机器翻译(Machine Translation, MT)是人工智能中自然语言处理(NLP)的重要任务之一。
主流机器翻译方法包括:
本教程我们将使用一个公开可用的预训练Transformer模型进行藏汉翻译,让你轻松入门。
步骤 | 说明 |
---|---|
1. 安装 Python | 建议 Python 3.8 及以上。安装时勾选 “Add Python to PATH”。 |
2. 创建虚拟环境(可选) | bash |
3. 安装依赖 | bash |
transformers
负责加载 Hugging Face 预训练模型;sentencepiece
是分词器依赖;torch
提供深度学习计算后端。
我们使用了来自Hugging Face平台上开源的预训练模型(Helsinki-NLP)
方向 | 模型名称 | 说明 |
---|---|---|
藏文 → 英文 | Helsinki‑NLP/opus‑mt‑mul‑en |
多语到英译模型,支持语言列表里包含 bod (藏文) (Hugging Face) |
英文 → 中文 | Helsinki‑NLP/opus‑mt‑en‑zh |
英译中模型,需在源句前加 “目标语言 token” >>zho_Hans<< (简体中文) (Hugging Face) |
为什么不用“藏 → 中”单模型?目前 Hugging Face 上尚无公开免费模型。级联(cascade)是快速上手的折中方案。
藏文输入 ──► 模型 A (mul‑en) ──► 英文中间结果 ──►
↓ │
└───────────────── 模型 B (en‑zh) ◄─┘
返回中文译文
translation_project/
├── translate.py
└── README.md (可选笔记)
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from tqdm import tqdm # 进度条,可选
# ① 加载模型与分词器 ----------------------------------------------------
print("⏳ 正在加载模型,请稍候……")
bo_en_name = "Helsinki-NLP/opus-mt-mul-en"
en_zh_name = "Helsinki-NLP/opus-mt-en-zh"
bo_en_tok = AutoTokenizer.from_pretrained(bo_en_name)
bo_en_model = AutoModelForSeq2SeqLM.from_pretrained(bo_en_name)
en_zh_tok = AutoTokenizer.from_pretrained(en_zh_name)
en_zh_model = AutoModelForSeq2SeqLM.from_pretrained(en_zh_name)
# ② 定义翻译函数 --------------------------------------------------------
def translate_step(text, tokenizer, model, prefix=""):
"""单步翻译:text->text"""
# 需要时给英文→中文模型加前缀 token
if prefix:
text = prefix + " " + text
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(
**inputs,
max_length=128,
num_beams=4,
early_stopping=True
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# ③ 交互式主程序 --------------------------------------------------------
def main():
print("\n=== 藏文 ➜ 英文 ➜ 中文 翻译器 ===")
while True:
tibetan = input("\n请输入藏文(空行退出):\n").strip()
if not tibetan:
break
# Step 1 藏→英
english = translate_step(tibetan, bo_en_tok, bo_en_model)
print(f"\n[中间英文] {english}")
# Step 2 英→中
chinese = translate_step(
english,
en_zh_tok,
en_zh_model,
prefix=">>zho_Hans<<" # 目标简体中文
)
print(f"[最终中文] {chinese}")
if __name__ == "__main__":
main()
运行:
cd translation_project python translate.py
请输入藏文:
ཁྱོད་ཀྱི་མིང་ལ་ཅི་ཟེར?
[中间英文] What is your name?
[最终中文] 你叫什么来着?
机器翻译(Machine Translation)本质是“序列到序列”(Sequence-to-Sequence)的任务:
Transformer模型由Google于2017年提出,革命性地提升了翻译效果:
自注意力机制(Self-attention):
预训练模型(如mT5、mBART):
传统序列到序列模型(如RNN、LSTM):
级联翻译的局限:误差会累积(藏→英→中);但优势在于无需自建数据集即可立刻使用。
报错提示 | 可能原因 | 解决方案 |
---|---|---|
401 Unauthorized 、Repository Not Found |
模型名写错或被下架 | 确认模型 ID,或在 Hugging Face 搜索替代模型。 |
OSError: Can't load tokenizer |
网络被墙或下载中断 | 使用 VPN/代理;或提前手动下载模型放入缓存。 |
显存不足 | 电脑显卡内存小 | 加 torch_dtype="auto" 或 device_map="auto" ;或改用 CPU 运行速度慢但内存占用低。 |
恭喜你!
你已经成功完成了一个简单版的藏汉翻译器项目。
这个基础项目能帮助你理解机器翻译的基本原理,未来可以进一步探索更复杂的翻译模型训练和微调技术,加深人工智能与语言处理的技能。
translate_step
改写成批处理函数,支持文件输入输出。