ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

《大话文渊慧典》:九、项目测试

《大话文渊慧典》:九、项目测试 第九篇项目测试——我们用两万页古籍把文渊慧典往死里测结果……它活下来了——大胖老师“开发完了功能跑通了是不是就可以发布了”——二黑从抽屉里掏出一个硬盘往桌上一放“这里面有两万页古籍扫描件从明刻本到民国手抄从高清扫描到手机拍照从完美品相到虫蛀水泡。先跑一遍活下来再说发布的事。”——小菜倒吸一口凉气“两万页这是测试还是用刑”——二黑推了推眼镜“用刑。而且是满清十大酷刑级别的用刑。”——大胖老师端起保温杯悠悠地说“软件和人一样不经历毒打不知道自己的极限在哪。今天咱们就讲讲我们是怎么把文渊慧典按在地上摩擦的以及它被摩擦之后站起来变成了什么样子。”一、测试哲学不虐够一万遍不准出门见王大姐大胖老师在白板上写了一行大字用力画了三个圈“在最差的环境里用最烂的数据跑出最好的结果。”“这是我们的测试哲学。”他敲着白板“很多软件测试是在理想环境下跑标准数据集跑出一个漂漂亮亮的99%然后到真实场景直接跪。我们不玩这个。我们定了一条规矩每一个测试用例都必须来自于真实图书馆的真实扫描件不准用自己生成的干净图片凑数。”二黑补充“我们内部有一个‘魔鬼测试集’里面分了五个等级青铜——高清扫描的清代刻本字迹清晰版面规整白银——有轻微透背和污渍的民国石印本黄金——虫蛀缺笔、墨迹晕染的明代方志钻石——手机拍照的手抄家谱弯曲变形字迹潦草王者——朱墨套印、双行夹注、眉批侧批混排的复杂版面再加点水泡霉斑。”“测试集的总量从最初的五百页慢慢积累到两万页。每一页都有王大姐或其他馆员手工校对过的‘标准答案’可以用来逐字比对。这批数据是我们最宝贵的财富。代码可以重写模型可以重训但这两万页标注数据是我们一个字一个字抠出来的丢不起。”小菜听到“一个字一个字抠出来的”下意识地揉了揉手腕“标注两万页得贴多少膏药”大胖老师拍拍他“所以后来我们开发了一个‘半自动标注工具’——先用模型跑一遍人工只改错字效率提升了五倍。但即使这样维护这套测试集仍然是全实验室最枯燥、最耗时的工作。向每一个为测试集付出过手腕的兄弟姐妹致敬。”二、第一轮测试准确率到底是多少实事求是地报有了测试集第一轮测试就是跑准确率。“跑完之后我们拿到了第一个真实的数字。”二黑调出一张电子表格“在青铜难度上识别准确率大概93.7%。白银难度上降到89.2%。黄金难度上82.5%。钻石难度上只有71.3%手抄本字迹太潦草。王者难度上76.8%——因为朱墨套印我们做了专门优化反而比手抄本高一些。”“这个数字漂亮吗”大胖老师问小菜。小菜犹豫了一下“好像……没有想象中高”“对。”大胖老师点点头“如果我们想吹牛完全可以只报青铜难度的93.7%甚至挑最好的几十页报个98%。很多商业OCR就是这么干的。但我们在发布文档里老老实实把五个难度的准确率都写了出来。为什么”二黑接过话“因为信任。王大姐不懂技术但她懂诚实。你说95%她拿去一试发现自己的那些破破烂烂的扫描件只有70%她会觉得你在骗她以后再也不信你了。你老老实实说‘手抄本大概七成刻本九成以上’她拿去试果然差不多甚至偶尔有惊喜她就会觉得你靠谱。信任一旦建立后面的合作就顺畅了。”“另一个原因”大胖老师补充“是给社区一个可复现的基线。开源项目最怕的是‘在我这儿能跑’和‘效果因人而异’。我们把测试集也开源了一部分脱敏后任何人都可以下载、测试、复现我们的数据。你觉得我们吹牛自己跑一遍。这比任何广告词都管用。”三、第二轮测试速度与资源——老爷机上的生死时速准确率测完了接着测速度和资源占用。这是专门针对“王大姐的电脑”做的测试。二黑列了一组数据“我们在三台设备上跑了同样的五百页测试集。第一台实验室主力机i7-1370032G内存NVMe固态。第二台模拟普通办公电脑i5-85008G内存机械硬盘。第三台极限老爷机2014年的AMD A84G内存机械硬盘Win7系统。”“主力机上平均每页4.2秒。办公机上平均每页7.8秒。老爷机上平均每页45秒。”二黑指着最后一个数字“45秒一页听起来很慢。但你要知道这台老爷机打开一个Word文档都要三十秒。文渊慧典能在上面跑起来并且不崩溃、不出错本身就是奇迹。”小菜问“45秒一页王大姐能接受吗”“能。”大胖老师回答“因为她在老爷机上处理古籍的替代方案是手抄。手抄一页至少半小时。45秒对半小时是几十倍的提升。而且系统可以通宵跑人去睡觉早上起来全跑完了。王大姐的原话是‘它慢但它不偷懒、不请假、不跟我抱怨加班费。我喝茶等着就行。’这就是为什么我们不做‘低于某配置拒绝运行’的限制——哪怕跑得慢也比跑不了强。”“不过我们也做了优化。”二黑补充“老爷机模式下系统会自动降低并行线程数、减小预处理图像缓存、关闭非必需的UI动画。这些优化总共带来了约30%的速度提升。虽然还是慢但至少从‘不能忍’变成了‘可以等’。”四、第三轮测试极限压力——异常输入的“地狱模式”这是小菜最难忘的一轮测试。大胖老师让他扮演一个“完全不懂电脑的王大姐”想尽一切办法把系统搞崩溃。“我做了很多‘丧心病狂’的操作。”小菜回忆“比如拖一个空文件夹进去拖一个里面有两千张图片的文件夹进去识别到一半突然拔网线虽然系统不需要联网但我想试试识别过程中连续点击开始按钮十几次把PDF文件后缀名改成.jpg再拖进去拖一个1.5G的超大PDF进去拖一个不是古籍的现代横排论文PDF进去甚至拖了一张我自己的自拍照进去……”“结果呢”二黑问。“大部分都扛住了。”小菜说“空文件夹提示‘未检测到有效文件’两千张图片正常排队处理只是时间很长拔网线没影响因为本来就是离线连击按钮做了防抖处理只响应一次后缀名错的文件自动识别真实格式超大PDF逐页加载没爆内存横排论文正常识别只是准确率不如古籍自拍照提示‘未检测到文字区域’。”“唯一一次崩溃”二黑翻开日志“是小菜拖了一个加密的PDF进去。当时还没做密码检测PyMuPDF直接抛异常。后来加了一层try-except遇到加密PDF就提示‘此文件有密码保护请解密后重试’。王大姐应该不会有加密PDF但万一有呢防住。”大胖老师总结“这一轮测试教会我们一件事用户的操作是不可预测的。我们无法穷举所有可能但可以做到两点——第一对任何异常输入给出友好的提示而不是崩溃第二任何操作都有‘撤销’或‘取消’的路径不让用户陷入死胡同。这不是技术问题是产品修养。”五、第四轮测试对比测试——和竞品正面刚为了让自己的定位更清晰大胖老师安排了一次盲测对比。把文渊慧典和三个竞品——一个国际大厂OCR、一个国内云OCR、一个开源Tesseract方案——放在一起用同样的五十页古籍样本测试请五位图书馆馆员盲评结果。“盲评的意思是不告诉馆员哪份结果是哪个系统出的只看文本质量打分。”二黑展示结果“综合得分云OCR 4.2分文渊慧典 4.1分国际大厂 2.8分Tesseract 1.9分。”“我们和云OCR几乎打平”小菜很惊讶。“对。在纯文本质量上我们略逊一筹——毕竟云OCR背后是GPU集群和大模型我们只是轻量级CPU推理。但在版面结构保留和阅读顺序正确性上我们反超。因为云OCR的版面分析没有针对古籍优化输出的文本经常顺序错乱而我们做了专门的阅读顺序重建。馆员们更看重‘读得通’其次才是‘错字少’。所以综合得分非常接近。”“但我们的成本是零云OCR的成本是每页几分钱。”大胖老师补充“如果把这个因素告诉馆员我们的得分可能就反超了。不过我们没这么做——盲评就是盲评不能加戏。这个结果告诉我们技术路线是对的差距在可追赶范围内。只要持续优化模型未来完全可以在纯质量上也打平甚至超越。”六、第五轮测试真实场景——王大姐的“终极验收”实验室测得再好也不如王大姐用一个月来得真实。2024年春天文渊慧典在六个不同省份的县级图书馆开始了为期一个月的真实场景测试。大胖老师管这叫“放养测试”——把系统交出去不派人驻场只留一个微信群让王大姐们自己折腾。“第一个星期群里炸了。”二黑回忆“各种意想不到的问题——有王大姐把扫描仪设成黑白模式导致二值化过度有王大姐把系统装在C盘满了也不清理有王大姐用繁体输入法搜简体字搜不到以为系统坏了还有一个王大姐每天只处理一页因为她以为‘识别’就是‘出版’怕弄坏了书……”“我们一个一个解答同时也在反思。”大胖老师说“很多问题不是系统的问题是交互设计的问题。比如‘开始识别’这个按钮我们改成了‘开始识别不影响原文件’消除王大姐的顾虑。比如搜索功能我们加了简繁自动转换搜‘学’也能找到‘學’。比如安装路径我们默认改到了D盘并加了磁盘空间检测。这些改进都是在群里被王大姐‘骂’出来的。”一个月后六家图书馆的测试报告汇总上来。平均识别准确率86.7%覆盖各种难度系统崩溃率0.3%主要是老爷机内存不足用户满意度评分4.3/5。最让大胖老师感动的是有一家图书馆在测试期间用文渊慧典独立完成了八百页家谱的数字化这是他们以前想了三年都没做成的事。“放养测试的结论”大胖老师说“不是系统完美无缺而是系统已经足够有用——有用到王大姐愿意忍受那些小毛病愿意主动学习、主动反馈。这是一个系统从‘实验室玩具’到‘生产力工具’的标志性跨越。”七、测试中的“趣味发现”测试过程中也发生了不少让人忍俊不禁的趣事。小菜选了三个最喜欢的。第一个“百年前的标题党”某县馆的民国报纸OCR把“张宗昌督鲁之苛政”识别为“张宗昌督鲁之奇葩”少了一个“政”字的偏旁。王大姐看了之后说“虽然认错了但意思差不多。张宗昌确实挺奇葩的。”后来一查原文确实是“苛政”但“奇葩”这个无心之失反而让王大姐记住了这个系统。二黑把这条记录进了bug库标签写的是“语义歪打正着”。第二个“古今同名人大撞车”某馆的一页清代方志里出现了“李嘉诚捐资修桥”的记载。系统准确无误地识别出来了。王大姐吓得赶紧打电话“是不是识别错了李嘉诚不是香港那个吗”后来经专家确认清代当地确实有一位乡绅也叫李嘉诚同姓同名纯属巧合。王大姐感叹“这系统给我挖出了一个清代李嘉诚以后读者搜‘李嘉诚’得小心别搞混了。”大胖老师由此想到未来应该在人名识别后加注朝代标签避免跨越时空的同名乌龙。第三个“系统不认字但认出了图”小菜那次把混在扫描件里的满月照拖进系统本来是恶作剧结果系统提示“检测到非文字区域已跳过”。但日志里显示版面分析模型确实在那张照片上检测到了一个文字块——“百日留念”四个印刷体字置信度0.92。二黑看了之后说“这说明我们的通用文字检测能力还在只是被我们主动过滤了。以后可以考虑加一个‘图中文提取’功能给照片里的题字、匾额单独识别。”一个恶作剧意外催生了一个新功能的方向。八、测试教会我们的五件事大胖老师在白板上总结了测试阶段的五条核心经验不准在理想环境里自嗨——用真实数据、真实设备、真实用户来测数字不好看也要认。不要替用户想当然——你永远猜不到王大姐会怎么操作。让小菜这种“破坏王”来测比任何测试用例都管用。竞品不是敌人是镜子——和竞品正面刚不是为了证明自己多牛而是为了看清自己的位置和差距。用户体验不是界面好看是安全感——王大姐敢放心用不怕按错、不怕丢数据、不怕把书“弄坏”这才是最好的体验。测试的终点不是发布是持续反馈——放养测试结束了但微信群永远保留。每一条王大姐的反馈都是下一个版本的起点。九、下期预告大胖老师看看时间“测试讲完了。数字有了信心也有了。下一步是什么”小菜抢答“发布然后推广”“对但不全对。”二黑翻着笔记本“发布之后还要看落地情况。我们的六个试点图书馆现在用得怎么样了有没有新的用户加入推广过程中遇到了什么阻力这些都需要单独讲。”大胖老师点头“而且推广不仅仅是发个下载链接。你要说服馆长培训馆员对接已有的数字图书馆系统处理各种历史遗留问题。中间的故事不比开发少。”“那就下期主题就叫——”《从零到一文渊慧典的第一个试点图书馆经历了什么》“小菜联系一下湖南那个县馆的王姐问能不能把她的故事写出来。就是那个用我们的系统发现了‘憋死县令’奇闻的王姐。她的故事是最好的推广素材。”小菜已经在发微信了。窗外新一轮的测试数据正在生成。实验室的白板上那张“魔鬼测试集”难度分级表旁边又多了一张“试点图书馆分布地图”。六颗图钉钉在六个不同的省份每一颗背后都有一个王大姐和一批正在被激活的古籍。本文为注水技术版您看看即可不必当真写此文字就是图一乐-
返回列表