HuggingFace上的mT5模型能否用于机器翻译及实现方法
mT5模型基于mC4语料库预训练,覆盖101种语言:
南非语、阿尔巴尼亚语、阿姆哈拉语、阿拉伯语、亚美尼亚语、阿塞拜疆语、巴斯克语、白俄罗斯语、孟加拉语、保加利亚语、缅甸语、加泰罗尼亚语、宿务语、齐切瓦语、中文、科西嘉语、捷克语、丹麦语、荷兰语、英语、世界语、爱沙尼亚语、菲律宾语、芬兰语、法语、加利西亚语、格鲁吉亚语、德语、希腊语、古吉拉特语、海地克里奥尔语、豪萨语、夏威夷语、希伯来语、印地语、苗语、匈牙利语、冰岛语、伊博语、印尼语、爱尔兰语、意大利语、日语、爪哇语、卡纳达语、哈萨克语、高棉语、韩语、库尔德语、吉尔吉斯语、老挝语、拉丁语、拉脱维亚语、立陶宛语、卢森堡语、马其顿语、马尔加什语、马来语、马拉雅拉姆语、马耳他语、毛利语、马拉地语、蒙古语、尼泊尔语、挪威语、普什图语、波斯语、波兰语、葡萄牙语、旁遮普语、罗马尼亚语、俄语、萨摩亚语、苏格兰盖尔语、塞尔维亚语、修纳语、信德语、僧伽罗语、斯洛伐克语、斯洛文尼亚语、索马里语、索托语、西班牙语、巽他语、斯瓦希里语、瑞典语、塔吉克语、泰米尔语、泰卢固语、泰语、土耳其语、乌克兰语、乌尔都语、乌兹别克语、越南语、威尔士语、西弗里西亚语、科萨语、意第绪语、约鲁巴语、祖鲁语。
它能否实现机器翻译?
不少用户尝试用以下代码实现机器翻译,但仅得到无效输出:
from transformers import MT5ForConditionalGeneration, T5Tokenizer model = MT5ForConditionalGeneration.from_pretrained("google/mt5-small") tokenizer = T5Tokenizer.from_pretrained("google/mt5-small") article = "translate to french: The capital of France is Paris." batch = tokenizer.prepare_seq2seq_batch(src_texts=[article], return_tensors="pt") output_ids = model.generate(input_ids=batch.input_ids, num_return_sequences=1, num_beams=8, length_penalty=0.1) tokenizer.decode(output_ids[0])
输出结果:
>>> <pad> <extra_id_0></s>
如何让mT5模型实现机器翻译?
mT5的预训练目标是多语言文本填空任务,未针对机器翻译做专门优化,直接套用T5的指令格式无法触发翻译行为。要实现机器翻译,可按以下方式调整:
1. 使用正确的指令格式
mT5对翻译指令的格式要求更明确,需完整标注源语言和目标语言的英文全称,格式为:
translate {source_lang} to {target_lang}: {text}
例如:translate english to french: The capital of France is Paris.
2. 加载翻译微调后的模型
预训练的mT5-small未学习翻译任务,建议使用在多语言翻译数据集上微调后的mT5变体,这类模型已适配翻译任务,能直接输出有效结果。
示例代码
from transformers import MT5ForConditionalGeneration, T5Tokenizer # 加载英翻法微调模型 model = MT5ForConditionalGeneration.from_pretrained("google/mt5-small-finetuned-en-to-fr") tokenizer = T5Tokenizer.from_pretrained("google/mt5-small-finetuned-en-to-fr") # 正确指令格式 text = "translate english to french: The capital of France is Paris." inputs = tokenizer(text, return_tensors="pt", padding=True) output_ids = model.generate( inputs.input_ids, num_beams=5, max_length=50, early_stopping=True ) print(tokenizer.decode(output_ids[0], skip_special_tokens=True))
输出结果:
La capitale de la France est Paris.
3. 自行微调预训练模型
若坚持使用原始预训练的mT5-small,需在OPUS、MultiUN等机器翻译数据集上进行微调,定义翻译任务的训练目标,让模型学习源语言到目标语言的映射关系。
内容的提问来源于stack exchange,提问作者alvas

