【问题标题】:Translating using pre-trained hugging face transformers not working使用预训练的拥抱脸转换器进行翻译不起作用
【发布时间】:2023-04-10 20:51:09
【问题描述】:

我有一种情况,我正在尝试使用预先训练的拥抱脸模型将 pandas 的一列文本从荷兰语翻译成英语。我的输入很简单:

Dutch_text             
Hallo, het gaat goed
Hallo, ik ben niet in orde
Stackoverflow is nuttig

我正在使用下面的代码来翻译上面的列,并且我想将我的结果存储到一个新的列 ENG_Text 中。所以输出将如下所示:

ENG_Text             
Hello, I am good
Hi, I'm not okay
Stackoverflow is helpful

我使用的代码如下:

#https://huggingface.co/Helsinki-NLP for other pretrained models 
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-nl-en")
model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-nl-en")
input_1 = df['Dutch_text']
input_ids = tokenizer("translate English to Dutch: "+input_1, return_tensors="pt").input_ids # Batch size 1
outputs = model.generate(input_ids)
decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(decoded)

任何帮助将不胜感激!

【问题讨论】:

  • 您能否详细说明您看到的错误和/或输出与您预期不符的地方?这可能有助于其他人找出问题所在。

标签: python-3.x nlp translation huggingface-transformers huggingface-tokenizers


【解决方案1】:

这不是应该使用 MT 模型的方式。测试模型是否能理解指令并不是一个类似 GPT 的实验。它是一个只能翻译的翻译模型,不需要添加指令"translate English to Dutch"。 (你不想反过来翻译吗?)

此外,翻译模型经过训练,可以逐句翻译。如果您连接列中的所有句子,它将被视为一个句子。您需要:

  1. 遍历列并独立翻译每个句子。

  2. 将列拆分为多个批次,以便您可以并行翻译。请注意,在这种情况下,您需要填充批次中的句子以具有相同的长度。最简单的方法是使用标记器的batch_encode_plus 方法。

【讨论】:

  • 你是对的,我需要分别迭代每个句子,我会处理的,但是你能解释一下我应该如何翻译,我的要求是翻译多种语言仅限英文。例如荷兰语到英语和德语到英语。那我应该如何调整指令呢?是否有一个单独的模型可以用来实现相同的目标?
  • 没有说明。对于从德语到英语的翻译,您必须使用不同的模型,例如 Helsinki-NLP/opus-mt-de-en
  • 没错,我现在正在使用该模型,因为我正在尝试将文本从德语翻译成英语。但是我如何将该模型直接应用于每个句子?如果我将它应用于每个句子,那么我是否需要添加填充序列以使文本长度相等?
猜你喜欢
  • 2021-08-10
  • 2021-12-06
  • 2021-08-16
  • 1970-01-01
  • 2020-10-08
  • 2021-09-12
  • 1970-01-01
  • 2021-01-10
  • 2022-01-23
相关资源
最近更新 更多