中文怎么离线翻译成英文?下载 OPUS-MT 并核对逐句译文

保存中文到英文 OPUS-MT 模型与分词器,用 UTF-8 模式从本地逐句翻译,断网复跑并核对日期、术语和否定关系。

离线翻译需要先联网把模型和分词器完整保存,然后在不依赖远端模型下载的模式下执行。本篇使用 OPUS-MT 的中文到英文检查点,按句保留原文和译文,方便核对日期、数字与否定词。

明确翻译方向与使用条件

Helsinki-NLP/opus-mt-zh-en 的模型资料标明源语言为中文、目标语言为英文及 CC-BY-4.0 许可。这个模型不能靠交换输入就变成英文到中文翻译;使用前核对模型资料和自身用途所需的署名等条件。运行期离线不代表首次安装和下载也无需网络。

中文怎么离线翻译成英文?下载 OPUS-MT 并核对逐句译文

示例面向有基础 Python 经验的读者,按 Transformers 4.57.1 接口编写。Windows 可用以下独立环境;macOS/Linux 用 python3 创建环境,并把后续解释器路径换为 .venv/bin/python。首次加载模型需要网络、磁盘和足够内存,CPU 可以执行但速度取决于机器。安装失败时先看 Python 版本与 pip 报错,不能把安装成功当成模型已跑通。

py -m venv .venv
.venv\Scripts\python -m pip install "torch>=2.6" "transformers==4.57.1" safetensors

再安装 Marian 分词所需依赖:.venv\Scripts\python -m pip install sentencepiece sacremoses。下载与翻译均使用同一个独立环境,避免安装在另一套 Python 下。

第一步:联网保存完整目录

保存为 download_model.py,联网执行一次。Windows 在当前目录用 .venv\Scripts\python -X utf8 download_model.py 启动;离线脚本也要以相同 UTF-8 模式启动。只有模型与 tokenizer 都保存完成,才进入离线翻译;不能仅复制权重文件。保留这个脚本以及模型目录,迁移到另一台机器时还需提前安装兼容运行依赖。

from pathlib import Path
from transformers import MarianMTModel, MarianTokenizer
folder = Path("opus-zh-en")
model_id = "Helsinki-NLP/opus-mt-zh-en"
tokenizer = MarianTokenizer.from_pretrained(model_id)
model = MarianMTModel.from_pretrained(model_id)
folder.mkdir(exist_ok=True)
tokenizer.save_pretrained(folder)
model.save_pretrained(folder, safe_serialization=True)
print("Saved model and tokenizer to", folder.resolve())

第二步:从本地目录逐句翻译

把下面保存为 translate_demo.py,用 .venv\Scripts\python -X utf8 translate_demo.py 执行。local_files_only=True 用于限制从本地读取;目录不存在或缺少文件时直接报错。两句中文为人为构造的检查样本,实际文件应按句拆分,并保留段落顺序。

from pathlib import Path
import json
import torch
from transformers import MarianMTModel, MarianTokenizer

folder = Path("opus-zh-en")
if not folder.exists():
    raise FileNotFoundError("Run download_model.py before offline translation")
tokenizer = MarianTokenizer.from_pretrained(folder, local_files_only=True)
model = MarianMTModel.from_pretrained(folder, local_files_only=True).eval()
sentences = ["请在周五下午三点前提交报告。", "本次会议不讨论预算调整。"]
rows = []
for number, sentence in enumerate(sentences, start=1):
    ids = tokenizer(sentence, return_tensors="pt", truncation=False)
    if ids["input_ids"].shape[1] > model.config.max_position_embeddings:
        raise ValueError(f"Sentence {number} exceeds the model input window")
    with torch.inference_mode():
        output = model.generate(**ids, max_new_tokens=128, do_sample=False)
    rows.append({"id": number, "source_zh": sentence,
                 "translation_en": tokenizer.decode(output[0], skip_special_tokens=True)})
Path("translations.json").write_text(json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8")
print(rows)

保存模型与保存分词器是两个独立步骤。官方模型 API 说明本地模型目录可供 from_pretrained 重载;tokenizer 的 save_pretrained 保存完整状态,供对应 tokenizer 类重新加载。local_files_only 只限制这里的模型文件读取,不替整台电脑或其他程序断网。

Windows 系统默认编码可能是 GBK,而模型词表可以含 UTF-8 中文;-X utf8 会让 Python 使用 UTF-8 模式,避免分词器内部读取 JSON 时出现 UnicodeDecodeError。macOS/Linux 也可以用 .venv/bin/python -X utf8 启动两个脚本。不能只设置终端输出编码来替代文件读取模式。

怎样核对离线与译文

先在线完成下载,再断开网络或阻止当前进程联网,重新运行 translate_demo.py;能完成这一步才是你这台机器上的离线验证。查看 translations.json,核对第一句的周五、下午三点、提交报告,以及第二句“不讨论预算调整”的否定关系。本文没有给出固定英文译句,不能把模型可能输出的措辞当成实测结果。

输入过长、输出中断和术语错误

代码按模型配置的输入窗口检查每句长度,不截掉原文结尾。输入超长要按语义拆句;输出达到 max_new_tokens 上限时检查是否漏译,可增大上限或缩短原句,并重新核对。术语表和人工复核仍必要,尤其是法律、医学与费用等内容;逐句翻译可能丢失跨句指代,最后需按整段再读一次。

本文已核对官方接口与模型资料,示例输入为人为构造;未在本文环境下载并实跑所列公开模型,未测速度或任务准确率。下面的检查方法由你在实际运行后执行,不能把演示代码当成质量评测结果。

官方资料与版本依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31350.html

赞 (0)
AI小管家的头像AI小管家
英文新闻怎么在本地生成摘要?用 DistilBART 控制长度并核对事实
上一篇 3小时前
固定标签分类和零样本分类有什么区别?用 BART-MNLI 测试新标签
下一篇 3小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部