1.简介 #
在本笔记本中,我们将使用 BLEU 指标来比较两种不同翻译方法的质量。
由于我的主要语言是西班牙语,我将把我的书《大型语言模型项目》第 4 章“评估模型”开头的几行从英语翻译成西班牙语。
我的翻译将作为参考翻译。换句话说,它们将被用作确定自动翻译质量的基础。
!pip install -q googletrans==3.1.0a0
!pip install -q evaluate==0.4.2
!pip install -q transformers==4.42.4
from googletrans import Translator
import transformers
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
import evaluate
#Sentences to Translate.
sentences = [
"In the previous chapters, you've mainly seen how to work with OpenAI models, and you've had a very practical introduction to Hugging Face's open-source models, the use of embeddings, vector databases, and agents.",
"These have been very practical chapters in which I've tried to gradually introduce concepts that have allowed you, or at least I hope so, to scale up your knowledge and start creating projects using the current technology stack of large language models."
]
#Spanish Translation References.
reference_translations = [
["En los capítulos anteriores has visto mayoritariamente como trabajar con los modelos de OpenAI, y has tenido una introducción muy práctica a los modelos Open Source de Hugging Face, al uso de embeddings, las bases de datos vectoriales, los agentes."],
["Han sido capítulos muy prácticos en los que he intentado ir introduciendo conceptos que te han permitido, o eso espero, ir escalando en tus conocimientos y empezar a crear proyectos usando el stack tecnológico actual de los grandes modelos de lenguaje."]
]
我们将使用 NLLB 模型执行第一次翻译,这是一个专门用于执行翻译的小模型,我们将从 Hugging Face 中检索它。
model_id = "facebook/nllb-200-distilled-600M"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
tokenizer_config.json: 0%| | 0.00/564 [00:00<?, ?B/s]
sentencepiece.bpe.model: 0%| | 0.00/4.85M [00:00<?, ?B/s]
tokenizer.json: 0%| | 0.00/17.3M [00:00<?, ?B/s]
special_tokens_map.json: 0%| | 0.00/3.55k [00:00<?, ?B/s]
config.json: 0%| | 0.00/846 [00:00<?, ?B/s]
pytorch_model.bin: 0%| | 0.00/2.46G [00:00<?, ?B/s]
generation_config.json: 0%| | 0.00/189 [00:00<?, ?B/s]
在创建管道时,我们将翻译的源语言和目标语言传递给它。
translator = pipeline('translation', model=model, tokenizer=tokenizer,
src_lang="eng_Latn", tgt_lang="spa_Latn")
translations_nllb = []
for text in sentences:
print ("to translate: " + text)
translation = ""
translation = translator(text)
#Add the summary to summaries list
translations_nllb += translation[0].values()
to translate: In the previous chapters, you've mainly seen how to work with OpenAI models, and you've had a very practical introduction to Hugging Face's open-source models, the use of embeddings, vector databases, and agents.
to translate: These have been very practical chapters in which I've tried to gradually introduce concepts that have allowed you, or at least I hope so, to scale up your knowledge and start creating projects using the current technology stack of large language models.
现在我们已将翻译存储在列表“translations_nllb”中。
translations_nllb
['En los capítulos anteriores, han visto principalmente cómo trabajar con modelos OpenAI, y han tenido una introducción muy práctica a los modelos de código abierto de Hugging Face, el uso de embebidos, bases de datos vectoriales y agentes.',
'Estos han sido capítulos muy prácticos en los que he intentado introducir gradualmente conceptos que han permitido, o al menos espero que lo hagan, ampliar sus conocimientos y comenzar a crear proyectos utilizando la tecnología actual de los modelos de lenguaje grande.']
2.使用谷歌翻译创建翻译 #
作为翻译的第二个来源,我们将使用 Google Translator API
translator_google = Translator()
translations_google = []
for text in sentences:
print ("to translate: " + text)
translation = ""
translation = translator_google.translate(text, dest="es")
#Add the summary to summaries list
translations_google.append(translation.text)
print (translation.text)
to translate: In the previous chapters, you've mainly seen how to work with OpenAI models, and you've had a very practical introduction to Hugging Face's open-source models, the use of embeddings, vector databases, and agents.
En los capítulos anteriores, vio principalmente cómo trabajar con modelos OpenAI y tuvo una introducción muy práctica a los modelos de código abierto de Hugging Face, el uso de incrustaciones, bases de datos vectoriales y agentes.
to translate: These have been very practical chapters in which I've tried to gradually introduce concepts that have allowed you, or at least I hope so, to scale up your knowledge and start creating projects using the current technology stack of large language models.
Estos han sido capítulos muy prácticos en los que he intentado introducir gradualmente conceptos que te han permitido, o al menos eso espero, ampliar tus conocimientos y empezar a crear proyectos utilizando la tecnología actual de grandes modelos de lenguaje.
在此列表中,我们有由 Google 创建的翻译.
translations_google
['En los capítulos anteriores, vio principalmente cómo trabajar con modelos OpenAI y tuvo una introducción muy práctica a los modelos de código abierto de Hugging Face, el uso de incrustaciones, bases de datos vectoriales y agentes.',
'Estos han sido capítulos muy prácticos en los que he intentado introducir gradualmente conceptos que te han permitido, o al menos eso espero, ampliar tus conocimientos y empezar a crear proyectos utilizando la tecnología actual de grandes modelos de lenguaje.']
3. 使用 BLEU 评估翻译 #
我们将使用 Hugging Face 的 Evaluate 库中的 BLEU 实现
bleu = evaluate.load('bleu')
Downloading builder script: 0%| | 0.00/5.94k [00:00<?, ?B/s]
Downloading extra modules: 0%| | 0.00/1.55k [00:00<?, ?B/s]
Downloading extra modules: 0%| | 0.00/3.34k [00:00<?, ?B/s]
results_nllb = bleu.compute(predictions=translations_nllb, references=reference_translations)
为了获得指标,我们将翻译文本和参考文本传递给 BLEU 函数。
请注意,翻译文本是翻译列表:[“Translation1”, “Translation2”]
而参考文本是文本列表的列表。这允许为每个翻译提供多个参考:
[[“reference1 Translation1”, “reference2 Translation1”], [“reference2 Translation2”, “reference2 Translation2”]]
results_google = bleu.compute(predictions=translations_google, references=reference_translations)
print(results_nllb)
{'bleu': 0.3686324165619373, 'precisions': [0.7159090909090909, 0.47674418604651164, 0.30952380952380953, 0.18292682926829268], 'brevity_penalty': 0.988700685876667, 'length_ratio': 0.9887640449438202, 'translation_length': 88, 'reference_length': 89}
print(results_google)
{'bleu': 0.44975901966417653, 'precisions': [0.7710843373493976, 0.5679012345679012, 0.4177215189873418, 0.2987012987012987], 'brevity_penalty': 0.9302618655343314, 'length_ratio': 0.9325842696629213, 'translation_length': 83, 'reference_length': 89}
看起来,Google API 执行的翻译明显优于 NLLB 模型执行的翻译。