我找了很多这个,但还没有弄清楚,所以我希望你能帮我:
我想把德文翻译成英文!我使用这个代码:
tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-de-en")
model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-de-en")
batch = tokenizer(
list(data_bert[:100]),
padding=True,
truncation=True,
max_length=250,
return_tensors="pt")["input_ids"]
results = model(batch) 这给了我一个尺寸错误!我修复了这个问题(感谢社区:https://github.com/huggingface/transformers/issues/5480),将最后一行代码切换到:
results = model(input_ids = batch,decoder_input_ids=batch)现在,我的输出看起来像一个很长的数组。这个输出究竟是什么?这些是某种词的嵌入吗?如果是的话:我应该如何继续把这些嵌入转换成英文文本呢?非常感谢!
发布于 2021-08-17 15:09:15
加上Timbus的答案,
这个输出究竟是什么?这些是某种词的嵌入吗?
results是<class 'transformers.modeling_outputs.Seq2SeqLMOutput'>类型,您可以这样做
results.__dict__.keys()若要检查results包含以下内容:
dict_keys(['loss', 'logits', 'past_key_values', 'decoder_hidden_states', 'decoder_attentions', 'cross_attentions', 'encoder_last_hidden_state', 'encoder_hidden_states', 'encoder_attentions'])您可以在拥抱面文档中阅读更多有关该类的内容。
我应该如何继续将这些嵌入转换成英文文本?
要用英语翻译文本,您可以使用model.generate,它可以通过以下方式轻松解码:
predictions = model.generate(batch)
english_text = tokenizer.batch_decode(predictions)发布于 2021-08-17 13:27:08
我认为解决您的困境的一个可能的答案是在这个问题中:https://stackoverflow.com/questions/61523829/how-can-i-use-bert-fo-machine-translation#:~:text=BERT%20is%20not%20a%20machine%20translation%20model%2C%20BERT,there%20are%20doubts%20if%20it%20really%20pays%20off。
实际上,通过BERT的输出,您可以得到每个单词的向量化表示。本质上,在其他任务中更容易使用输出,但在机器翻译的情况下则更复杂。
在机器翻译上下文中使用变压器库中的seq2seq模型的一个很好的起点是:https://github.com/huggingface/notebooks/blob/master/examples/translation.ipynb。
上面的例子提供了如何从英语翻译到罗马尼亚语。
https://stackoverflow.com/questions/68817989
复制相似问题