ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

罗马尼亚语机器翻译评测后处理实战:用 Moses 管线把 mBART 的 BLEU 从 26.8 提升到 37

罗马尼亚语机器翻译评测后处理实战:用 Moses 管线把 mBART 的 BLEU 从 26.8 提升到 37 推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载本指南围绕 transformers 官方 seq2seq 示例目录中的romanian_postprocessing.md展开系统讲解英→罗English→Romanian翻译评测中必须的语料后处理步骤安装 Moses 工具链、编写ro_post_process后处理函数、对生成译文与参考译文做统一归一化后重新计算 BLEU。读完本文你将掌握如何复现“不做处理 26.8、做处理后 37”这一显著提升并能把这套管线迁移到自己的机器翻译评测任务中。一、为什么罗马尼亚语翻译的 BLEU 需要“后处理”原文文档在一开始就给出了一个非常直观的动机对比不做后处理英→罗mbart-large-en-ro在 WMT 数据上的 BLEU 只有26.8做后处理同样模型、同样生成结果BLEU 可以提升到37。同一份生成结果分数却相差 10 分以上原因不在模型而在评测口径。罗马尼亚语文本带有大量变音符号diacritics而 WMT 参考语料test.target通常已经过标点归一化、变音符号移除和分词处理。若直接用原始生成文本去和参考文本做 n-gram 匹配任何一个“带变音符号”的单词都无法与“无变音符号”的参考词精确对齐BLEU 会被人为压低。后处理的作用就是把生成译文与参考译文放到同一套归一化与分词口径下再比较。这一点在仓库代码中也有印证seq2seq 示例的run_eval.py计算翻译指标时直接调用utils.py中的calculate_bleu内部使用 sacrebleu 的corpus_bleu并不包含任何罗马尼亚语专属的归一化步骤。因此README.md中也特别提醒MBART 的 BLEU 分数“低得可疑suspiciously low”。本文的后处理管线正是解决这个“可疑”的关键。二、前置条件先拿到test_generations.txt与参考译文后处理流程的输入是两批对齐的文本每行一条模型生成译文test_generations.txt文档明确要求开始后处理前必须已有该文件参考译文test.target以 WMT 英→罗测试集为例。在 transformers seq2seq 示例的工作流中test_generations.txt由finetune_trainer.py在开启--predict_with_generate时自动写出训练/评测脚本会把model.generate的解码结果逐行写入{output_dir}/test_generations.txt。对应的英→罗微调命令可参考train_mbart_cc25_enro.sh其核心参数包括python finetune_trainer.py \ --model_name_or_pathfacebook/mbart-large-cc25 \ --data_dir $ENRO_DIR \ --output_dir mbart_cc25_enro --overwrite_output_dir \ --src_lang en_XX --tgt_lang ro_RO \ --max_source_length 128 --max_target_length 128 \ --num_train_epochs 6 \ --do_train --do_eval --do_predict \ --predict_with_generate --logging_first_step \ --task translation \ $其中--predict_with_generate是产出test_generations.txt的开关--data_dir指向 WMT 英→罗数据目录包含train/val/test各自的.source与.target文件。数据下载方式见README.md下载wmt_en_ro.tar.gz并解压后目录中即包含test.target等 6 个文件。提示也可以先用run_eval.py生成翻译结果文件再进入后处理流程本文后处理函数只关心“生成文本文件 参考文本文件”两个输入与文件来源无关。三、第一步安装mosesdecoder与wmt16-scripts后处理依赖两套外部工具按文档要求克隆到$HOME下cd $HOME git clone gitgithub.com:moses-smt/mosesdecoder.git cd mosesdecoder git clone gitgithub.com:rsennrich/wmt16-scripts.gitmosesdecoder提供 Moses 生态的 Perl 预处理脚本标点替换、归一化、去非打印字符、分词等位于scripts/tokenizer/目录wmt16-scripts提供罗马尼亚语专属的 Python 脚本normalise-romanian.py、remove-diacritics.py位于preprocess/目录。这两套工具共同组成了后续ro_post_process函数引用的完整工具链。注意它们是较早的经典工具链运行环境需具备 Perl 与相应版本的 Python 解释器克隆成功后建议先确认各脚本具有可执行权限。四、第二步编写ro_post_process后处理函数原文文档给出了完整的 Bash 函数定义这是整篇指南的核心。建议将其保存为可复用的 shell 函数例如写入.bashrc或独立脚本完整代码如下ro_post_process () { sys$1 ref$2 export MOSES_PATH$HOME/mosesdecoder REPLACE_UNICODE_PUNCT$MOSES_PATH/scripts/tokenizer/replace-unicode-punctuation.perl NORM_PUNC$MOSES_PATH/scripts/tokenizer/normalize-punctuation.perl REM_NON_PRINT_CHAR$MOSES_PATH/scripts/tokenizer/remove-non-printing-char.perl REMOVE_DIACRITICS$MOSES_PATH/wmt16-scripts/preprocess/remove-diacritics.py NORMALIZE_ROMANIAN$MOSES_PATH/wmt16-scripts/preprocess/normalise-romanian.py TOKENIZER$MOSES_PATH/scripts/tokenizer/tokenizer.perl langro for file in $sys $ref; do cat $file \ | $REPLACE_UNICODE_PUNCT \ | $NORM_PUNC -l $lang \ | $REM_NON_PRINT_CHAR \ | $NORMALIZE_ROMANIAN \ | $REMOVE_DIACRITICS \ | $TOKENIZER -no-escape -l $lang \ $(basename $file).tok done # compute BLEU cat $(basename $sys).tok | sacrebleu -tok none -s none -b $(basename $ref).tok }4.1 逐段拆解输入与输出约定函数接收两个位置参数$1为系统生成译文文件sys$2为参考译文文件ref对两个文件执行完全相同的处理管线for file in $sys $ref各自输出以basename命名的.tok文件。这一“两边同口径”的设计非常关键——只有生成与参考都经过同样的归一化BLEU 才能反映真实翻译质量最后一行用 sacrebleu 计算并打印 BLEU 分数。工具管线六个步骤各司其职步骤工具脚本作用1replace-unicode-punctuation.perl将 Unicode 标点如弯引号、连字符变体替换为 ASCII 等价标点2normalize-punctuation.perl -l ro按语言ro规则归一化标点与空格3remove-non-printing-char.perl移除不可打印的控制字符4normalise-romanian.py罗马尼亚语专属归一化处理该语言特有的字符形态与变体5remove-diacritics.py移除变音符号如ă、î、ș、ț等转为基础拉丁字符6tokenizer.perl -no-escape -l ro按罗马尼亚语规则分词-no-escape关闭 XML 转义原文作者也坦诚地写道这套管线“移除变音符号并做了其他自己不完全理解的处理”——从脚本名称与 Moses 生态的通用约定看前三步属于所有语言通用的文本清洗后三步则是罗马尼亚语 BLEU 提升的关键参考语料WMT 官方正是按这种“去变音、已分词”的形态发布的把生成文本对齐到同一形态后n-gram 才能正确匹配。4.2 关于langro的说明-l $lang参数$langro作用于normalize-punctuation.perl与tokenizer.perl指示按罗马尼亚语的语言规则处理。如果你的任务换成其他语言需要相应调整该变量并确认工具链中有对应的语言规则文件。五、第三步对生成译文与参考译文执行后处理并重算 BLEU函数定义好后直接调用并传入两个文件路径即可沿用原文示例ro_post_process enro_finetune/test_generations.txt wmt_en_ro/test.target执行后会发生两件事写出两个后处理文件在当前目录调用函数的目录而非输入文件所在目录生成test_generations.txt.tok与test.target.tok——注意文件名取的是输入文件的basename路径信息会被丢弃打印新的 BLEU 分数将test_generations.txt.tok与test.target.tok交给 sacrebleu 计算命令为cat $(basename $sys).tok | sacrebleu -tok none -s none -b $(basename $ref).tok其中-tok none表示文本已经由 Moses 分词、sacrebleu 无需再分词-s none关闭平滑-bbrief只输出分值而不输出详细统计。5.1 与仓库评测代码的衔接仓库自带的评测路径run_eval.pyutils.py默认直接对未处理的输出算 BLEU因此分数偏低。本文的ro_post_process相当于在最终计分之前插入了一道语料归一化关卡。两种方式对比评测方式处理对象BLEU 口径run_eval.py直接计分原始生成 vs 原始参考未归一化偏低ro_post_process后计分Moses 管线归一化后的.tok双方对齐 WMT 官方口径六、结果解读与正确使用姿势按原文文档在 WMT 英→罗数据上同一个mbart-large-en-ro模型未后处理 BLEU26.8后处理 BLEU37需要强调的是后处理没有改变模型本身它改变的是评测口径。因此若要将自己的分数与论文、排行榜对比必须确认对方是否使用了相同的归一化/分词管线否则 26.8 与 37 之间并不存在“模型好坏”的差距后处理文件.tok应妥善保留作为评测的可复现证据若后续调整模型或解码参数beam size、length penalty 等只需对新生成的test_generations.txt重新调用一次函数即可参考侧test.target的处理可复用。七、常见问题与注意事项必须先有test_generations.txt函数只做后处理与计分不负责生成译文。译文文件需先由finetune_trainer.py--predict_with_generate或run_eval.py产出路径随意函数不关心其来源目录。MOSES_PATH路径变量函数开头export MOSES_PATH$HOME/mosesdecoder假设工具链安装在$HOME下若实际安装位置不同必须修改此变量否则后续六个脚本路径全部失效。输出文件位置.tok文件写到当前工作目录且以basename命名。若对多个目录下的文件做处理注意同名文件会互相覆盖建议在独立目录中调用。sacrebleu 依赖仓库 seq2seq 示例的requirements.txt已包含sacrebleu执行前请确认已安装。旧版 sacrebleu 的参数风格与新版存在差异若参数解析报错可查阅本地sacrebleu --help调整-tok/-s/-b写法。工具链兼容性wmt16-scripts与 Moses Perl 脚本属于较早期工具个别脚本对解释器版本敏感若运行报错可从“该步骤脚本的具体报错”入手排查通常与 Unicode 编码或 Python 2/3 差异相关从脚本年代可以推断。语言不可迁移性remove-diacritics.py与normalise-romanian.py是为罗马尼亚语量身定制的其他语言需要寻找对应的归一化工具不能照搬本函数。八、小结本指南完整复现了romanian_postprocessing.md中的三步流程安装 Moses 工具链 → 定义ro_post_process六段管线 → 对生成译文与参考译文统一后处理并重算 BLEU使英→罗翻译评测从“低估的 26.8”回到真实水平“37”。这套方法论的本质是让评测口径与参考语料的发布口径一致它不仅适用于 mBART也适用于任何在 WMT 类数据上评测的罗马尼亚语翻译模型并可作为其他语言评测后处理流程的设计范本。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐Refine v5 shadcn/ui RefreshButton 详解基于 useInvalidate 的详情页数据就地刷新Refine v5 shadcn/ui RefreshButton 详解基于 useInvalidate 的详情页数据就地刷新 本文以 Refine 文档 sTensorFlow Models Transformer 机器翻译模型实战从 WMT 数据预处理到 Keras 训练与 BLEU 评估TensorFlow Models Transformer 机器翻译模型实战从 WMT 数据预处理到 Keras 训练与 BLEU 评估 本文围绕 Tenso人工智能深度学习计算机视觉NLP语音上一篇保障Docker管理安全Harbour的认证机制与数据加密实践下一篇React Turnstile核心特性解析隐私优先的验证码解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表