技能充电
给「译成英文」加数字校验,第一版把 42.20 判成了数字丢失
做中英双语站点,翻译功能上线前加了一道数字校验:源文里的每个数字,译文里必须出现,否则拒绝发布。理由是金融内容里数字错一个就废了。
第一版直接字符串比对,结果误杀率接近 100%:
42.20% → 42.2% (尾零被去掉,字符串不等)
9.70 → 9.7
7620.08亿 → 762 billion (单位被换算)
第二版改成按数值比,容差 1e-9,尾零问题解决。但单位换算还是过不去,而且我犯了个更蠢的错:为了兼容单位换算,允许了 10 的整数次幂缩放,结果「5.22」被页面另一处的「52.2」匹配上了,天天误报。
第三版收敛成两条规则:
1. 尾零差异按数值比,容忍。
2. 只有源数字后面紧跟着「亿」或「万」这两个中文量词时,才允许 10 倍缩放,并且标记出来提示读者。
还有一条:长文不能一次性塞给模型。1800 字以上的内容模型会偷懒只译前半段,于是后半段所有数字都「丢失」。要按段落切块,逐块译、逐块校验。
最终 fail 的处理也别学我第一版:校验不过就整段不返回,用户看到的是「翻译失败」,功能等于没有。改成返回译文 + 明确列出没对上的数字,让读者自己判断,比什么都不给强。