机器翻译 本节摘要:翻译这项任务,养了 NLP 研究三十年,现在还在养。模型读一句语言 A,产出一句语言 B。长度变、词序变、一词对多词、习语拒绝一一对应——"I miss you" 译成法语是 "tu me manques",字面是「你对我来说是缺失的」,词级对齐全垮。机器翻译是逼着 NLP 发明编码器-解码器、注意力、Transformer、乃至整个 LLM 范式的那项任务,每一步前进都因为翻译质量可测、而人机差距顽固。本节跳过历史课,直教 2026 年的工作流水线:预训练多语言编码器-解码器(NLLB-200 或 mBART)、子词分词、束搜索、BLEU 与 chrF 评估,以及那几个仍会悄悄混进生产的失败模式。 对应原课程:Phase 5 · Lesson 11 · (原英文 )。
本节摘要:翻译这项任务,养了 NLP 研究三十年,现在还在养。模型读一句语言 A,产出一句语言 B。长度变、词序变、一词对多词、习语拒绝一一对应——"I miss you" 译成法语是 "tu me manques",字面是「你对我来说是缺失的」,词级对齐全垮。机器翻译是逼着 NLP 发明编码器-解码器、注意力、Transformer、乃至整个 LLM 范式的那项任务,每一步前进都因为翻译质量可测、而人机差距顽固。本节跳过历史课,直教 2026 年的工作流水线:预训练多语言编码器-解码器(NLLB-200 或 mBART)、子词分词、束搜索、BLEU 与 chrF 评估,以及那几个仍会悄悄混进生产的失败模式。
对应原课程:Phase 5 · Lesson 11 ·
machine-translation(原英文phases/05-nlp-foundations-to-advanced/11-machine-translation/docs/en.md)。前置依赖:第 10 节(注意力机制)、第 04 节(GloVe、FastText、子词)。
阅读完本节,你应当能够:
模型读一句语言 A,产出一句语言 B。长度变,词序变,有的源词映到多个目标词,反之亦然。习语拒绝一一对应——"I miss you" 译成法语是 "tu me manques",字面是「你对我来说是缺失的」,任何词级对齐都活不下来。
机器翻译是逼着 NLP 发明编码器-解码器、注意力、Transformer、乃至整个 LLM 范式的那项任务。每一步前进都因为翻译质量可测,而人机差距顽固。
现代机器翻译是 Transformer 编码器-解码器,在平行文本上训练。编码器用源语言的分词读入,解码器借助交叉注意力(第 10 节)用编码器输出,逐子词生成目标。解码用束搜索避开贪心陷阱,输出再去分词、去真大小写,对照参考打分。
驱动真实质量的三大运营抉择:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM model_id = "facebook/nllb-200-distilled-600M" tok = AutoTokenizer.from_pretrained(model_id, src_lang="eng_Latn") model = AutoModelForSeq2SeqLM.from_pretrained(model_id) src = "The cats are running." inputs = tok(src, return_tensors="pt") out = model.generate( **inputs, forced_bos_token_id=tok.convert_tokens_to_ids("fra_Latn"), num_beams=5, length_penalty=1.0, max_new_tokens=64, ) print(tok.batch_decode(out, skip_special_tokens=True)[0])
Les chats courent.
三处要紧。src_lang 告诉分词器用哪套文字与切分;forced_bos_token_id 告诉解码器生成哪种语言。两者都是 NLLB 专属技巧,mBART 和 M2M-100 各有约定,不通用。
BLEU 测输出与参考的 n-gram 重叠:四个参考 n-gram 尺寸(1~4),精度的几何均值,过短的简洁惩罚。分数在 [0, 100]。常用,但难解读:30 BLEU「可用」,40「好」,50「出色」,1 BLEU 以内的差距是噪声。
chrF 测字符级 F 分数,对形态丰富语言更敏感(BLEU 在那里少算匹配),常与 BLEU 并报。
import sacrebleu hypotheses = ["Les chats courent."] references = [["Les chats courent."]] bleu = sacrebleu.corpus_bleu(hypotheses, references) chrf = sacrebleu.corpus_chrf(hypotheses, references) print(f"BLEU: {bleu.score:.1f} chrF: {chrf.score:.1f}")
永远用 sacrebleu,它归一化分词让分数跨论文可比。自己滚 BLEU,就是误导性基准的由来。
现代机器翻译评估用三族互补指标,至少上两族。
💡 2026 实战栈:
sacrebleu出 BLEU 和 chrF,unbabel-comet出 COMET,提示的 LLM 出最终面向人的信号。每个指标在信任生产数据前,都用 50~100 个人工标注样本校准。
无参考指标(COMET-QE、BLEURT-QE、LLM 评判)让你在没有参考时评估翻译,这对长尾语对要紧——那里根本没有参考译文。
上面这条流水线 80% 的时候译得流畅,剩下 20% 静默失败。已命名失败模式:
forced_bos_token_id,并在输出上恒用语言识别模型检查。预训练模型是通才。法律、医学、游戏对话翻译,在领域平行数据上微调可测地受益。配方并不花哨:
from transformers import Trainer, TrainingArguments from datasets import Dataset pairs = [ {"src": "The defendant pleaded guilty.", "tgt": "L'accusé a plaidé coupable."}, ] ds = Dataset.from_list(pairs) def preprocess(ex): return tok( ex["src"], text_target=ex["tgt"], truncation=True, max_length=128, padding="max_length", ) ds = ds.map(preprocess, remove_columns=["src", "tgt"]) args = TrainingArguments(output_dir="out", per_device_train_batch_size=4, num_train_epochs=3, learning_rate=3e-5) Trainer(model=model, args=args, train_dataset=ds).train()
几千条高质量平行样本胜过几十万条噪声网抓样本。训练数据质量是最大的生产杠杆。
2026 年机器翻译的生产栈:
| 用例 | 推荐起点 |
|---|---|
| 任意到任意,200 语言 | facebook/nllb-200-distilled-600M(笔记本)或 nllb-200-3.3B(生产) |
| 英语为中心,高质量,50 语言 | facebook/mbart-large-50-many-to-many-mmt |
| 短跑、推理便宜,英-法/德/西 | Helsinki-NLP / Marian 模型 |
| 延迟敏感的浏览器端 | ONNX 量化的 Marian(约 50 MB) |
| 最高质量,愿意付费 | GPT-4 / Claude / Gemini 配翻译提示 |
截至 2026,LLM 在若干语对上已超越专用 MT 模型,尤以习语内容和长上下文为甚。代价是每 token 成本与延迟。当上下文长度、风格一致或提示式领域适配比吞吐更要紧时,选 LLM。
保存为 outputs/skill-mt-evaluator.md:
--- name: mt-evaluator description: Evaluate a machine translation output for shipping. version: 1.0.0 phase: 5 lesson: 11 tags: [nlp, translation, evaluation] --- Given a source text and a candidate translation, output: 1. Automatic score estimate. BLEU and chrF ranges you would expect. State whether a reference is available. 2. Five-point human-verifiable check list: (a) content preservation (no hallucinations), (b) correct language, (c) register / formality match, (d) terminology consistency with glossary if provided, (e) no truncation or length explosion. 3. One domain-specific issue to probe. E.g., for legal: named entities and statute citations. For medical: drug names and dosages. For UI: placeholder variables `{name}`. 4. Confidence flag. "Ship" / "Ship with review" / "Do not ship". Tie to the severity of issues found in step 2. Refuse to ship a translation without a language-ID check on output. Refuse to evaluate without a reference unless the user explicitly opts in to reference-free scoring (COMET-QE, BLEURT-QE). Flag any content over 1000 tokens as likely needing chunked translation.
nllb-200-distilled-600M 把一段 5 句英文译成法语再译回英文,测往返与原文的接近度。应看到语义保留、用词漂移。fasttext lid.176 或 langdetect 对翻译输出做语言识别,集成进 MT 调用,在返回前抓住脱靶生成。nllb-200-distilled-600M,测微调前后留出集的 BLEU,报告哪些句子变好、哪些退步。src_lang 与 forced_bos_token_id 是 NLLB 专属,与 mBART/M2M-100 不通用。下一节,我们把「变长到变长」用到压缩上——进入「文本摘要」,看抽取式与生成式如何取舍、ROUGE 怎么算。