如何在GPU上用MBart50TokenizerFast批量处理多句翻译?
MBart50批量翻译的正确处理方式
错误原因清晰:批量传入的句子长度不一致,未做统一的补全(padding)和截断(truncation),导致无法生成形状统一的张量。
直接修改tokenizer调用代码,添加padding=True和truncation=True参数即可解决问题:
tokenizer.src_lang = source_lang # 新增padding和truncation参数,确保批量张量长度一致 inputs = tokenizer([title, ftext], return_tensors="pt", padding=True, truncation=True).to(device) outputs = model.generate(**inputs) translations = tokenizer.batch_decode(outputs, skip_special_tokens=True) translated_title = translations[0] translated_ftext = translations[1]
补充说明:
padding=True会自动将批量中较短的句子补全到当前批量最长句子的长度truncation=True会将超过模型默认最大输入长度的句子截断,若需自定义长度可额外添加max_length=xxx参数(比如max_length=512)- 无需给
model.generate(**inputs)再调用.to(device),因为输入张量已在GPU上,若模型也已移至GPU,生成的输出会自动保留在GPU上
内容的提问来源于stack exchange,提问作者Samik R
相关产品推荐
相关产品推荐

