如何使用深度学习进行抽象化总结

357 阅读6分钟

使用深度学习进行抽象总结

抽象总结使用了谷歌的Pegasus模型。该模型使用变形金刚编码器-解码器架构。编码器输出被屏蔽的标记,而解码器则生成Gap句子。

抽象总结的目的是将一段文本变成一个较短的版本。抽象式总结不仅缩短了文本的内容,而且还生成了新的句子。

以前的文本总结版本不是这样的,它们的目的只是为了从输入的文件中生成准确而简明的总结。它从输入的句子中复制有信息的片段。

本教程将指导你如何使用Pegasus模型从头到尾进行抽象概括。我们将对一些维基百科、新闻和科学期刊和文件进行抽象化总结。

前提条件

要理解本教程,你需要熟悉。

  • 自然语言处理。
  • Python编程语言。
  • 机器学习建模。
  • 谷歌Colab或Jupyter笔记本。

在Python中安装转化器的依赖项

我们将首先安装所有的依赖项,以便能够使用Pegasus模型。具体来说,我们将使用一个名为HuggingFace Transformers的库,Pytorch,以及一个名为SentencePiece的文本标记器。

PyTorch将是支持Pegasus模型的底层框架。

要安装PyTorch,请导航到PyTorch的主网站。在主网页上,你会看到一个install 选项。

在这里,你可以选择你所选择的PyTorch构建、你的操作系统、安装包、语言和计算平台。这将生成一个代码,您可以用它来安装PyTorch。请注意,不同的选择会产生不同的安装代码。

在我们的案例中,我们将选择LTS (1.8.2) Pytorch构建,Linux 操作系统,Pip 软件包,Python 编程语言,最后是CUDA 10.2 。如果你的机器中没有GPU,你仍然可以继续选择CPU选项。

选择之后,会生成下面的安装命令。

!pip3 install torch==1.8.2+cu102 torchvision==0.9.2+cu102 torchaudio==0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html

如果你使用的是Jupyter笔记本或Google Colab,请确保在命令前加上! 。否则,它将无法安装。

第二个依赖,我们应该安装的是HuggingFace变换器库。

!pip3 install transformers

我们的第三个依赖项是SentencePiece 。它是一个文本标记器和去标记器,有助于在神经模型训练前预先确定词汇量。

!pip3 install sentencepiece

导入和配置Pegasus模型

from transformers import PegasusForConditionalGeneration, PegasusTokenizer

上述命令从我们之前安装的transformers中导入我们的主要依赖项。这导入了两个类,即PegasusForConditionalGeneration ,和PegasusTokenizer

PegasusTokenizer 类将把我们的句子转换成标记。这是我们的句子的一个编号表示。这使得我们可以将其传递给我们的深度学习模型。

PegasusForConditionalGeneration 类将允许我们使用我们的模型。

我们现在需要为该模型创建我们的标记器。

tokenizer_model = PegasusTokenizer.from_pretrained("google/pegasus-xsum")

我们的标记器现在被导入。from_pretrained 方法允许我们导入一个预训练的模型。在我们的例子中,它是google/pegasus-xsum

在HuggingFace库中还有其他Pegasus模型可用。其中包括google/pegasus-reddit_tifugoogle/pegasus-newsroomgoogle/pegasus-pubmedgoogle/pegasus-arxiv

所有这些模型都是基于Pegasus的,并在不同的数据集上训练。你可以玩玩它们,看看哪个最适合你。

要使用其他模型,请确保用你喜欢的模型替换上述命令中from_pretrained 方法中的google/pegasus-xsum 模型。

接下来的步骤涉及加载我们的模型。

loaded_model = PegasusForConditionalGeneration.from_pretrained("google/pegasus-xsum")

我们使用PegasusForConditionalGeneration 类来执行这项任务。我们还使用from_pretrained 方法来允许我们导入一个预先训练好的模型。剩下的事情就是对一些维基百科的文本进行抽象概括。

执行抽象概括

这最后一步涉及到提取一堆文本,通过Pegasus模型,并查看该模型如何对文本进行抽象概括。

为了总结文本,让我们创建一个名为text 的变量,并向其添加一些文本。

text = """

Hugging Face是一个伟大的开源库,在自然语言处理(NLP)领域做着强大的工作。该库有一堆预先训练好的模型,你可以利用或微调。

该库有许多模型,包括执行各种任务的BERT和GPT-2模型,但我们将利用预训练的语言管道来达到我们的目的。与其去训练一个巨大的语言模型,如具有15亿个参数的GPT-2,不如利用ML管道。

我们从Section网站的这个教程中挑选了一些文本。使用我们的标记器,让我们把我们的文本转换为其标记表示。

tokens = tokenizer_model(text, truncation=True, padding="longest", return_tensors="pt")

我们已经创建了一个名为tokens 的变量来存储我们的标记表示。我们使用我们之前创建的标记器tokenizer_model ,对我们的文本进行标记。

truncation=True 参数允许模型将我们的文本截断成适合输入模型的大小。return_tensors 参数告诉模型使用PyTorch的张量。

为了查看我们的标记,我们写道。

tokens

是时候总结我们的文本了。

summary = loaded_model.generate(**tokens)

**tokens 解包我们的标记,并将它们传入我们的模型。 中的星号只是把上述结果中存在的 和 加在一起。**tokens input_ids attention_mask

为了检查我们生成的摘要结果的标记,我们输入summary

summary

这些结果代表了我们的输出标量。这些对人类来说可能只是一堆数字,但对机器来说不是。这就是它们理解语言的方式。对这些值进行解码将帮助我们理解这些数字。

tokenizer_model.decode(summary[0])

上面的summary 结果显示,这些结果是在一个嵌套的列表中。但是我们只需要第一个结果,所以这就是我们对[0]进行索引的原因。

运行上述命令显示了我们的摘要文本。那块文本是如何被总结出来的,这难道不令人印象深刻吗?如果你浏览一下这个巨大的文本块,你会发现这个文本的总结版本并不存在。

它是新颖的,完全是由模型生成的。这就是抽象化总结的意义所在!

总结

这就是抽象化总结的概要。

有时候,模型不会给你一个抽象的总结。而是一个文本总结。这可能是因为你没有为那个特定的任务使用经过微调的pegasus模型。

尝试使用为该任务微调的Pegasus模型以获得更好的结果。例如,相对于google/pegasus-xsumpegasus-reddit_tifu 最适合对Reddit帖子进行抽象总结。