使用 T5 和 Transformers 实现多语言翻译

语言翻译是自然语言处理中最重要的任务之一。在本教程中,您将学习如何使用 T5(Text-to-Text Transfer Transformer)模型和 Hugging Face Transformers 库实现一个强大的多语言翻译系统。学完本教程后,您将能够构建一个可以处理多种语言对的生产级翻译系统。具体来说,您将学习:

  • 什么是 T5 模型及其工作原理
  • 如何为翻译生成多种备选方案
  • 如何评估翻译质量

通过我的书籍《Hugging Face Transformers中的NLP》快速启动您的项目。它提供了带有工作代码的自学教程

让我们开始吧!

使用 T5 和 Transformers 实现多语言翻译
Hermes Rivera。保留部分权利。

概述

这篇博文分为三部分;它们是:

  • 设置翻译管道
  • 带备选方案的翻译
  • 质量评估

设置翻译管道

文本翻译是自然语言处理中的一项基本任务,它启发了原始 Transformer 模型的发明。T5,即 *Text-to-Text Transfer Transformer*,由 Google 于 2020 年发布,由于其文本到文本的方法和在海量多语言数据集上的预训练,它是一个强大的翻译模型。

transformers 库中的文本翻译被实现为“条件生成”,这意味着模型在输入文本的条件下生成文本,就像条件概率分布一样。与 transformers 库中的所有其他模型一样,您只需几行代码即可实例化一个 T5 模型。在开始之前,请确保已安装以下依赖项:

让我们看看如何使用 T5 创建一个翻译引擎:

MultilingualTranslator 类像往常一样实例化一个 T5 模型和一个分词器。translate() 方法是实际翻译发生的地方。您可以看到它只是一个带提示的文本生成,提示只是说“将 X 翻译成 Y”。因为这是一个文本生成任务,所以您可以看到用于控制束搜索的参数,例如 num_beamslength_penaltyearly_stopping

分词器将 return_tensors="pt" 设置为返回 PyTorch 张量,否则它将返回一个 token ID 的 Python 列表。您需要这样做,因为模型需要 PyTorch 张量。输出的默认格式取决于分词器的实现,因此您需要查阅文档以正确使用它。

在生成之后,分词器再次用于将生成的 token 解码回文本。

以上代码的输出是:

您可以看到模型可以将英语翻译成法语或德语,但未能将西班牙语翻译成英语。这是模型的问题(可能与模型的训练方式有关)。您可能需要尝试其他模型,看看它是否表现更好。

带备选方案的翻译

将一个句子翻译成另一种语言并不是一一对应的关系。由于语法、词语用法和句法结构的变化,翻译一个句子有多种方法。

由于上述模型的文本生成使用束搜索,您可以原生生成翻译的多个备选方案。您可以修改 translate() 方法以返回多个翻译:

这个修改后的方法返回一个包含翻译列表和分数的字典,而不是单个字符串。模型的输出仍然是 logits 张量,您需要使用分词器将其解码回文本,一次一个翻译。

这些分数用于束搜索。因此,它们总是按降序排列,并且最高的分数会被挑选出来作为输出。

让我们看看如何使用它:

输出如下:

分数是负数,因为它们是对数概率。您应该使用更复杂的句子来查看翻译中的变化。

质量评估

上面代码中打印的分数是束搜索中使用的分数。它有助于自回归生成在保持多样性的同时完成一个句子。想象一下,模型一次生成一个 token,并且每个步骤都会发出多个候选。完成句子有多种路径,并且路径的数量随着探索的自回归步骤的数量呈指数增长。束搜索通过对每条路径进行评分并仅保留前 k 条路径来限制要跟踪的路径数量。

确实,您可以检查束搜索过程中使用的概率。在模型中,有一个 compute_transition_scores() 方法,它返回生成的 token 的转移分数。您可以尝试如下所示:

对于与上一个示例相同的输入文本,上述代码片段的输出是:

在 for 循环中,您并排打印 token 和分数。第一个 token 始终是填充 token;因此我们将 out_tok[1:]out_score 匹配。概率对应于该步骤的 token。它取决于之前的 token 序列,因此相同的 token 在不同的步骤或不同的输出句子中可能具有不同的概率。具有高概率的 token 很可能是由于语法规则。具有低概率的 token 意味着在该位置存在一些可能的替代方案。请注意,在束搜索中,输出是从概率加权分布中采样的。因此,您从上面看到的 token 不一定是生成的概率最高的 token。

outputs.sequence_scoresoutputs 对象中上述概率的归一化总和,其中包含每个序列的分数。您可以使用它来估计翻译的质量。

然而,这对您来说没什么用,因为您并没有自己实现束搜索。这些概率无法告诉您翻译的质量。您无法在不同的输入句子之间进行比较,也无法与不同的模型进行比较。

一种评估翻译质量的流行方法是使用 BLEU (Bilingual Evaluation Understudy) 分数。您可以使用 sacrebleu 库来计算翻译的 BLEU 分数,但您需要一个参考翻译才能获得分数。下面是一个示例:

输出可能为:

BLEU 分数显示翻译与参考文本的匹配程度。它的范围从 0 到 100;分数越高越好。您可以看到模型对翻译的评分与 BLEU 分数不匹配。一方面,这突出表明分数并非用于评估翻译质量。另一方面,这取决于您提供的参考翻译。

进一步阅读

以下是一些您可能会觉得有用的资源:

总结

在本教程中,您已经使用 T5 和 Transformers 库构建了一个全面的多语言翻译系统。具体来说,您学习了:

  • 如何使用 T5 模型和提示实现基本翻译系统
  • 如何调整束搜索以生成翻译的多种替代方案
  • 如何使用 BLEU 分数估计翻译质量

想在您的NLP项目中使用强大的语言模型吗?

NLP with Hugging Face Transformers

在您自己的机器上运行最先进的模型

...只需几行Python代码

在我的新电子书中探索如何实现
使用 Hugging Face Transformers 进行自然语言处理

它涵盖了在以下任务上的实践示例实际用例文本分类、摘要、翻译、问答等等...

最终将高级NLP带入
您自己的项目

没有理论。只有实用的工作代码。

查看内容

使用 T5 和 Transformers 实现多语言翻译 的 2 条回复

  1. kobubu 2025 年 4 月 14 日下午 5:25 #

    代码不起作用,请检查

    • James Carmichael 2025 年 4 月 15 日上午 6:48 #

      你好 kobubu。请复制并粘贴错误消息,以便我们进行调查。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。