You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用facebook/m2m100_418M模型翻译异常:法语变芬兰语排查

问题分析与解决方案

你遇到的问题不是缓存了其他模型,而是M2M100模型的用法存在错误。M2M100作为多语言翻译模型,仅修改model.config.target_lang无法正确指定目标语言,必须通过tokenizer或生成参数明确指定目标语言标识。

核心原因

M2M100的目标语言选择依赖tokenizer的target_lang设置,或者在生成时强制传入目标语言的起始token(bos token)。只修改模型配置的target_lang不会让模型正确识别翻译方向,导致默认输出了其他语言(比如你遇到的芬兰语)。

修正方法

以下是两种可行的修正方案:

方案一:通过tokenizer指定目标语言

from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer

model_name = 'facebook/m2m100_418M'
model = M2M100ForConditionalGeneration.from_pretrained(model_name)
tokenizer = M2M100Tokenizer.from_pretrained(model_name)

source_text = "Hello, how are you?"
# 明确指定源语言为英文
tokenizer.src_lang = "en"
input_ids = tokenizer.encode(source_text, return_tensors='pt')
# 指定目标语言为法语,让tokenizer生成对应语言的起始token
tokenizer.tgt_lang = "fr"
output_ids = model.generate(input_ids, forced_bos_token_id=tokenizer.get_lang_id("fr"))
translated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(translated_text)

方案二:直接在generate时强制设置目标语言的bos token

from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer

model_name = 'facebook/m2m100_418M'
model = M2M100ForConditionalGeneration.from_pretrained(model_name)
tokenizer = M2M100Tokenizer.from_pretrained(model_name)

source_text = "Hello, how are you?"
# 编码时指定源语言
input_ids = tokenizer(source_text, return_tensors='pt', src_lang="en").input_ids
# 生成时强制传入法语的bos token ID
output_ids = model.generate(input_ids, forced_bos_token_id=tokenizer.get_lang_id("fr"))
translated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(translated_text)

验证效果

修正后运行代码,应该能得到正确的法语翻译:Bonjour, comment ça va ?

内容的提问来源于stack exchange,提问作者justTil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:52:14