gpt4 book ai didi

python - Huggingface MarianMT 翻译器丢失内容,具体取决于模型

转载 作者:行者123 更新时间:2023-12-04 15:09:53 25 4
gpt4 key购买 nike

上下文

我通过 Python 使用 MarianMT von Huggingface 将文本从源语言翻译成目标语言。

预期行为

我将一个序列输入到 MarianMT 模型中,然后将该序列翻译回来。为此,我使用相应的语言模型和标记器。我输入的所有句子也都回来了。这些句子被视为一个序列。

当前行为

根据语言模型,模型不会翻译所有内容,而只会返回部分。在这个例子中,最后一句话丢失了:

原文(德语):Ein Nilpferd lief im Dschungel rum und musste aufs WC。 Da traf es einen Kakadu und fragte nach dem Weg。 Der sagte wenn du Kaka musst,dann pass mal ganz kurz auf。 Ich sag dir wo du hingehen must, ich kenn mich hier gut aus.

结果(英文):一只河马在丛林里跑来跑去,不得不去厕所。有凤头鹦鹉问路。他说,如果你必须卡卡,那么请注意一分钟。 我会告诉你必须去的地方,我知道这里的路。

结果(荷兰语):Een nijlpaard liep rond in de jungle en moest naar het toilet...en een kaketoe vroeg naar de weg...die zei dat als je Kaka moest, ik even最反对。

当前代码

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM


def translate_text(input, source, target):

# Prepare output
output = ""

model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-" + source + "-" + target)
tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-" + source + "-" + target)

inputs = tokenizer.encode(input[:512], return_tensors="pt", padding='longest')
outputs = model.generate(inputs, max_length=4000, num_beams=4, early_stopping=True)

for t in [tokenizer.convert_ids_to_tokens(s) for s in outputs.tolist()[0]]:
output = output + t.replace("▁", " ").replace("</s>", "")

output.replace("<pad>", "")

return output


print(translate_text("Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.", "de", "nl"))
print(translate_text("Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.", "de", "en"))

需要帮助

我错过了什么?为什么缺少一些序列部分?

最佳答案

在这种情况下,您可以将其翻译成英文:

de_en = translate_text("Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.", "de", "en")

en_nl = translate_text(de_en, "en", "nl")

print(en_nl)

结果: Een nijlpaard rende rond in de jungle en moest naar het toilet。 Er was een kaketoe en vroeg om de weg。 Hij zei als je moet Kaka, dan uitkijken voor een minuut. Ik zal je vertellen waar je moet gaan,Ik weet mijn weg hier。


最后一句没有消失,只是质量降低了。 De->En 和 En->Nl 模型可能在他们的训练数据中有比 De->Nl 更长的句子(你永远不知道),这就是最后一句话没有从模型中消失的原因翻译。但同时,翻译成英文可能会造成一些信息丢失(例如du/Sie -> you)。

给定模型名称(在 OPUS 语料库上训练),句子理论上有多大,您可以在这里看到:http://opus.nlpl.eu/Europarl/v8/de-nl_sample.html或此处:http://opus.nlpl.eu/MultiParaCrawl/v7.1/de-nl_sample.html;或在 opus.nlpl.eu 的其他 de-nl 样本中

更多信息可在此处获得:https://github.com/Helsinki-NLP/Opus-MT

tl;dr 这些模型翻译粘在一起的多个句子很可能只是一种不应依赖的副作用。

关于python - Huggingface MarianMT 翻译器丢失内容,具体取决于模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65408757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com