给一个开源4B模型一句加拿大中小企业页面上的标准话术:“你需要从CRA拿到一个商业号码(BN)”。它写出来的法语是“auprès du RRCQ”。
![]()
RRCQ这个东西不存在。加拿大税务局在法语里是ARC,在加拿大的开放数据里,这对缩写出现的31次中,政府译员31次都写的是ARC。
这就是Sans calque这个工具想解决的问题。它面向的是接加拿大法语翻译单的自由职业者:客户不会逐字读法语,但会一眼看到本该写ARC的地方写着CRA。
三个检查项,每条都标注规则来源
把英文粘进去,你会同时看到微调模型和未改动基础模型输出的法语,外加一份复核清单。清单会标出三类问题,每一条都写明依据:
- 法语里残留的英文缩写,比如法语句子里的“CRA”
- 政府有固定用法却缺失的法语缩写:CRA对应ARC(政府语料31对31),SIN对应NAS(10对10)。这张缩写映射表从训练语料里学到了466个
- 翻译局Termium Plus标注应避免的用词,比如用“année fiscale”表示财年,它要求用“exercice financier”
没有任何东西会被悄悄改掉。被标记的句子会进入复核清单,“法语,可发送”的框会告诉你发送前要先核对多少处。
数据全部来自开放语料
加拿大开放政府门户上的每个数据集,标题和描述都有双语版本,采用开放政府许可。作者拉取了全部48,116条记录,剔除门户标记为机器翻译的法语条目,只在英法两侧切分方式一致时才配对段落和句子,最终得到82,455对。
微调在Tinker上跑了两轮。Qwen3.5-4B,LoRA rank 32,8,000对,2个epoch,每轮约13分钟。第一轮是随机采样。第二轮从10,752条含已知缩写的语料里抽了2,000对,因为第一轮仍然把CRA写成了“de la RC”。按Tinker的每token价格和实际token数估算,两轮成本分别是1.26美元和1.35美元。训练脚本会在估算超预算时拒绝启动,因为额度是一次性的10美元。
评测不是自己出的题。全部打分都在canada.ca的中小企业页面上完成,那些法语出自加拿大政府译员之手:300个随机句子,加上全部147个涉及Termium“避免”概念的句子。这些句子都不在训练集里。
提升集中在缩写和术语上,不是整体质量。缩写上的提升站得住:在146个含政府法语缩写的留出句子上做1,000次bootstrap重采样,第二轮全部胜过基础模型。整体质量站不住:chrF++上第二轮在92%的重采样中胜出,而作者事先把门槛设在95%,所以他不认领这个结论。第二轮也不是处处更好,它残留的英文缩写和Termium术语都比第一轮多。之所以还是用它,是因为它能搞定客户会注意到的那些缩写。
它也不是总对,基础模型有时反而对。在“you can apply for your SIN”这句上,基础模型写的是“numéro d'assurance sociale (NAS)”,正确。第二轮写的是“NIS”。缩写检查能抓住这个错:政府语料里10对10都写NAS。第二轮还在需要“Conservez”的指令处写了“Conserver”,这个错没有任何检查能抓到。所以那个框才会提醒你发送前先读一遍。
检查器本身也被检查过
第一版Termium检查在25次里有21次把政府自己的译员标成了问题。它统计的标签“avoid, see observation”意思是某些语境下避免,于是这个标签被去掉了。剩下的规则只在一次人类翻译上触发,针对“année fiscale”,Termium称其为仿造词,而canada.ca仍在使用。这一条被保留了下来。
还有一个check_claims.py脚本,会从结果文件重建README里的每一个数字,如果正文和数据对不上就报错;文档里引用的模型输出如果不在记录的输出里,同样报错。
权重是自己的。微调结果从Tinker导出,转成2.59 GB的4-bit文件,在笔记本8 GB显卡上通过Ollama运行,速度32.5 token每秒。客户文本不必离开这台机器,也没有按词计费。同一个网页可以跑在本地模型上:作者把笔记本以外的所有请求都屏蔽后加载页面,翻译照常工作,字体也正常,零外部请求。
这条路踩了三个死胡同:Ollama不再接受LoRA适配器,它自带的量化器需要Mac,8-bit文件跑起来只有0.8 token每秒。压到4-bit可能损失性能,所以笔记本上的副本用同一套测试打了分。第一轮确实有损失:chrF++ 54.96,云端是55.65。第二轮没有:笔记本副本56.43,云端56.09,政府缩写命中率67.8%对66.9%。统计上这是同一个模型,所以作者不声称笔记本更好,只是说没有丢东西。
它刻意做得很窄。愿意为它付钱的是做加拿大法语的自由职业者和小型机构,以及作者自己。但这套配方不限于加拿大:用政府自己的开放双语文本做微调,再拿该政府的术语库逐条检查。凡是两者都存在的地方(比如欧盟的IATE术语库),同样的脚本应该能用,不过作者只在这里测过。
开放数据是这一切能成立的原因。训练语料、术语库和缩写证据都来自加拿大政府的开放数据,测试用的是同一批政府译员的作品。闭源模型没法告诉你它的“ARC”从哪来,这个可以,精确到那31对。
第一个用户是作者自己。jonathanandrei.com有英语和fr-CA两个版本,他把英语的“How I work”页面粘进线上应用,共41个块。
微调模型标出了8处。其中7处对这类文本是噪音:MCP、LLM、RAG、FHIR、SDK和一个NICE指南编号,这些缩写在作者自己的法语页面里本来就保留英文。缩写规则学的是政府的写法,技术黑话不遵循它。
第8处是真的。原句说日志里存着“the AI had already claimed was PHI-free”的数据,法语回来成了“lesquels avaient déjà été déclarés exempts”,意思是“已被声明为免除的”。AI这个词从句子里消失了,而它正是整句话的重点。标记触发是因为预期的“IA”缺失,而它缺失是因为模型丢掉了主语。
所以在自己的页面上:一处值得抓,七处可以挥手放过。这告诉作者下一步该做什么,于是他做了:每个客户一份“保留英文”清单,外加一个“抓取页面”输入框,页面按地址进来,不用复制粘贴。同一个页面由应用抓取,把MCP、LLM、RAG、FHIR、SDK和那个指南编号放进清单后,8处标记变成1处,剩下的那处正是真正的错误。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.