使用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
相关产品推荐
相关产品推荐

