【问题标题】:Translating text from english to Italian using hugging face Helsinki models not fully translating使用未完全翻译的拥抱脸赫尔辛基模型将文本从英语翻译成意大利语
【发布时间】:2021-09-13 19:32:25
【问题描述】:

我是一个新手,正在浏览拥抱人脸库,尝试将翻译模型用于数据输入任务并将文本从英语翻译成意大利语。

我根据文档尝试的代码:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

#src = 'en'  # source language
#trg = 'it'  # target language
#saved the model locally.
#model_name = f'Helsinki-NLP/opus-mt-{src}-{trg}'
#model.save_pretrained("./model_en_to_it")
#tokenizer.save_pretrained("./tokenizer_en_to_it")


model = MarianMTModel.from_pretrained('./model_en_to_it')
tokenizer = MarianTokenizer.from_pretrained('./tokenizer_en_to_it')

#Next, trying to iterate over each column - 'english_text' of the dataset and 
#translate the text from English to Italian and append the translated text to the 
#list 'italian'.
 
italian = []
for i in range(len(data)):   
    batch = tokenizer(dataset['english_text'][i], 
                      return_tensors="pt",truncation=True, 
                      padding = True)
    gen = model.generate(**batch)
    italian.append(tokenizer.batch_decode(gen, skip_special_tokens=True))

这里有两个问题:

  1. 仅翻译和附加部分文本,即,如果段落超过一定长度,它会截断段落。如何翻译任意长度的文本?
  2. 我有大约 10k 数据,这需要花费大量时间。

即使任何一个问题都可以解决,这也是有帮助的。很想学习

【问题讨论】:

    标签: python-3.x neural-network nlp huggingface-transformers machine-translation


    【解决方案1】:

    几乎所有当前的 MT 系统都是使用单个句子而不是段落进行训练的。如果您的输入文本是分段的,您需要先进行句子拆分。任何 NLP 库都可以(例如,NLTK、Spacy、Stanza)。在单个输入中包含多个句子会导致翻译质量变差(因为这不是模型训练的目的)。此外,Transformer 模型的复杂度与输入长度成二次方关系(当所有内容都在 GPU 上并行化时,它并不完全成立),因此输入很长时它会变得很慢。

    【讨论】:

    • “当一切都在 GPU 上并行化时,它并不完全成立”是什么意思?
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多