理解 DistilBart 模型和 ROUGE 指标

DistilBart 是一个典型的用于 NLP 任务的编码器-解码器模型。在本教程中,您将学习如何构建这样一个模型,以及如何检查其架构以便与其他模型进行比较。您还将学习如何使用预训练的 DistilBart 模型生成摘要,以及如何控制摘要的风格。

完成本教程后,您将了解:

  • DistilBart 的编码器-解码器架构如何在内部处理文本
  • 控制摘要风格和内容的方法
  • 评估和改进摘要质量的技术

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

让我们开始吧!

理解 DistilBart 模型和 ROUGE 指标
图片来自 Svetlana Gumerova。部分权利保留。

概述

本文分为两部分:

  • 理解编码器-解码器架构
  • 使用 ROUGE 评估摘要结果

理解编码器-解码器架构

DistilBart 是 BART 模型的一个“蒸馏”版本,BART 是一个强大的用于自然语言生成、翻译和理解的序列到序列模型。BART 模型使用完整的编码器和解码器 Transformer 架构。

您可以在论文 “Attention is all you need” 中找到 Transformer 模型的架构。总的来说,其结构如下:

Transformer 架构

Transformer 架构的关键特征是它分为编码器和解码器。编码器接收输入序列并输出一系列隐藏状态。解码器接收隐藏状态并输出最终序列。它对于序列到序列任务(如摘要)非常有效,在这些任务中,在生成摘要之前需要完全解析输入以提取关键信息。

正如在 上一篇文章 中所解释的,您只需几行代码即可使用预训练的 DistilBart 模型构建一个摘要器。事实上,您可以通过查看模型配置来了解 DistilBart 架构中的一些设计参数:

上面的代码打印了模型中隐藏状态的大小、注意力头数以及编码器和解码器的层数。输出如下:

这样创建的模型是 PyTorch 模型。如果您想了解更多信息,可以打印模型:

这将显示:

这可能不易阅读。但如果您熟悉 Transformer 架构,您会注意到:

  • BartModel 包含嵌入模型、编码器模型和解码器模型。相同的嵌入模型同时出现在编码器和解码器中。
  • 嵌入模型的大小表明词汇量包含 50264 个 token。嵌入模型的输出大小为 1024(“隐藏大小”),这是每个 token 的嵌入向量的长度。
  • 编码器和解码器都使用 `BartLearnedPositionalEmbedding` 模型,这可能是一个用于每个模型输入序列的学习型位置编码。
  • 编码器有 12 层,而解码器只有 6 层。请注意,DistilBart 是 BART 的“蒸馏”版本,因为 BART 有 12 层解码器,而 DistilBart 将其简化为 6 层。
  • 在编码器的每一层中,有一个自注意力机制、两个层归一化、两个前馈层,并使用 GELU 作为激活函数。
  • 在解码器的每一层中,有一个自注意力机制、一个来自编码器的交叉注意力机制、三个层归一化、两个前馈层,并使用 GELU 作为激活函数。
  • 在编码器和解码器中,隐藏大小在各层之间保持不变,但前馈层中间部分的大小是隐藏大小的 4 倍。

大多数 Transformer 模型使用类似的架构,但存在一些差异。这些是模型的高级构建块,但您无法看到确切使用的算法,例如,按什么顺序调用构建块来处理输入序列。只有当您检查模型实现代码时,才能找到这些细节。

并非所有模型都同时拥有编码器和解码器。但是,这种设计对于序列到序列任务非常常见。来自编码器模型的输出被称为输入序列的“上下文表示”。它捕捉了输入文本的本质。解码器模型使用上下文表示来生成最终序列。

使用 ROUGE 评估摘要结果

既然您已经了解了如何使用预训练的 DistilBart 模型生成摘要,那么如何知道其输出的质量呢?

这确实是一个非常困难的问题。每个人对好的摘要都有自己的看法。然而,一些著名的指标用于评估语言模型的各种输出。评估摘要质量的一种流行指标是 ROUGE。

ROUGE 代表“Recall-Oriented Understudy for Gisting Evaluation”(面向召回的要点评估替补)。它是一组用于评估文本摘要和机器翻译质量的指标。在后台,会计算生成摘要的精度和召回率的 F1 分数,并与参考摘要进行比较。它易于理解且易于计算。作为一种基于召回的指标,它侧重于摘要回忆关键短语的能力。ROUGE 的弱点在于它需要参考摘要。因此,评估的有效性取决于参考的质量。

让我们回顾一下如何使用 DistilBart 生成摘要:

`Summarizer` 类加载了预训练的 DistilBart 模型和分词器,然后使用该模型为输入文本生成摘要。为了生成摘要,将多个参数传递给 `generate()` 方法来控制摘要的生成方式。您可以调整这些参数,但默认值是一个不错的起点。

现在,让我们扩展 `Summarizer` 类,通过为 `generate()` 方法设置不同的参数来生成不同风格的摘要。

`StyleControlledSummarizer` 类定义了四种摘要风格:“简洁”,“详细”,“技术”和“简单”。您可以看到 `generate()` 方法的参数对于每种风格都不同。特别是,“详细”风格使用了更长的摘要长度,“技术”风格使用了更高的重复惩罚,而“简单”风格则使用了较低的温度以获得更具创意的摘要。

这样好吗?让我们看看 ROUGE 指标怎么说。

您可能会看到如下输出

要运行此代码,您需要安装rouge_score

上面使用了三个指标。ROUGE-1基于unigrams,即单个词。ROUGE-2基于bigrams,即两个词。ROUGE-L基于最长公共子序列。每个指标衡量摘要质量的不同方面。指标值越高越好。

正如您从上面看到的,更长的摘要并不总是更好。这完全取决于您用于评估ROUGE指标的“参考”。

总而言之,以下是完整的代码

进一步阅读

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

总结

在这个高级教程中,您学习了文本摘要的几个高级功能。特别是,您学习了

  • DistilBart 的编码器-解码器架构如何处理文本
  • 控制摘要风格的方法
  • 评估摘要质量的方法

这些高级技术使您能够创建更复杂、更有效的文本摘要系统,以满足特定的需求和要求。

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

NLP with Hugging Face Transformers

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

...只需几行Python代码

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

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

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

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

查看内容

暂无评论。

留下回复

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