资讯详情

如何利用BERT做文本摘要

引言

文本摘要是NLP在本文中,我们将学习如何微调文本摘要任务BERT模型。这种BERT模型通常被称为BERTSUM(BERT for summarization)。

文本摘要有两种不同的方法,即提取式(extractive)和生成式(abstractive)。

文本摘要

文本摘要(text summarizatioin)将长文本转换为总结(summary)过程。假设我们有一篇维基百科全书文章,但我们不想读完整的文章——我们只想概述这篇文章。此时,摘要生成可以帮助我们获得文本概述。

image-20220510222144876

文摘有两种方法:

  • 抽取式
  • 生成式

抽取式

在这种方法中,我们从给定的文本中提取关键句子。例如,考虑以下维基百科全书文章:

Machine learning is the study of computer algorithms that improve automatically through experience. It is seen as a subset of artificial intelligence. Machine learning algorithms build a mathematical model based on sample data, known as training data, in order to make predictions or decisions without being explicitly programmed to do so. Machine learning algorithms are used in a wide variety of applications, such as email filtering and computer vision, where it is difficult or infeasible to develop conventional algorithms.  

现在,我们只提取重要的句子。因此,假设抽取结果如下:

Machine learning is the study of computer algorithms that improve automatically through experience. It is seen as a subset of artificial intelligence. Machine learning algorithms are used in a wide variety of applications, such as email filtering and computer vision, where it is difficult or infeasible to develop conventional algorithms.  

即我们可以得到保持给定文本大体意思的句子。

生成式

在生成方法中,我们不从原文中提取句子。相反,通过解释原文(paraphrasing)生成一个总结。解释意味着我们用不同的单词以另一种更清晰的方式重新表达给定的文本。同时,句子只包含原文的重要信息。

假设一个例子,假设使用上面的文章:

Machine learning is the study of computer algorithms that improve automatically through experience. It is seen as a subset of artificial intelligence. Machine learning algorithms build a mathematical model based on sample data, known as training data, in order to make predictions or decisions without being explicitly programmed to do so. Machine learning algorithms are used in a wide variety of applications, such as email filtering and computer vision, where it is difficult or infeasible to develop conventional algorithms.  

通过生成方法,我们通过解释生成总结如下:

Machine learning is a subset of artificial intelligence and it is widely used for creating a variety of applications such as email filtering and computer vision.  

从结果可以看出,文本的关键信息基本保留。

微调文本摘要BERT

首先,我们来看看如何做抽取摘要。

使用BERT抽取摘要

为了做抽取摘要,我们需要微调BERT模型输入数据格式。在此之前,让我们回顾一下如何喂养输入数据BERT模型。

假设我们有两句话:Paris is a beautiful city. I love Paris.

首先,我们分词句子,然后增加句子的开头[CLS]标记增加句子的结尾[SEP]标记。然后将这些单词输入三个嵌入层:标记嵌入、片段嵌入和位置嵌入。

BERT模型接收这些输入,然后输出每个标记:

那我们该怎么办?BERT应用于文本摘要任务?

我们知道BERT每以得到每个标记的表示,但在这里我们不需要每个标记的表示,而是每个句子的表示。

因为提取摘要只是选择重要的句子。如果我们能得到每个句子的表达,我们可以将句子的表达输入分类器,让分类器告诉我们句子是否重要。

那么,问题是我们如何得到句子的表达呢?我们能用吗?[CLS]标记对应的表示作为句子的表示?是的!但是这里有一个小问题。我们只在第一句开头添加[ CLS ]标记,但是在文本摘要任务中,我们给 BERT 模型输入多个句子,我们需要所有句子的表达。

因此,我们修改输入数据格式。增加每个句子的开头[CLS]通过这个标记,我们可以得到每个句子的表示。

假设我们有三句话:sent one, sent twosent three。当然,首先是分词,然后增加每个句子的开头[CLS]标记。我们也通过了。[SEP]每句话分开:

Input tokens = [ [CLS], sent, one, [SEP], [CLS], sent, two, [SEP], [CLS], sent, three, [SEP] ] 

然后我们将这些单词输入标记、片段和位置嵌入层。标记嵌入层如下:

下一层是片段嵌入层。我们知道片段嵌入层用于区分两个给定句子,并返回两个句子的嵌入层 E A E_A EA或 E B E_B EB​。但是在文本摘要设定中,我们会输入不只两个句子。那我们如何进行映射呢?

此时,我们使用一个间隔(interval)片段嵌入。间隔片段嵌入用于区分给定的多个句子,我们映射出现在奇数索引句子中的单词到 E A E_A EA​,映射偶数索引到 E B E_B EB​。假设我们有四个句子:

  • 句子1中的所有单词被映射到 E A E_A EA​
  • 句子2中的所有单词被映射到 E B E_B EB​
  • 句子3中的所有单词被映射到 E A E_A EA​
  • 句子4中的所有单词被映射到 E B E_B EB​

间隔片段嵌入层如下图所示:

下一层就是位置编码嵌入层,它编码了输入中单词的位置信息:

对上面的步骤进行一个总结:

然后我们将修改格式后的输入喂给BERT模型。如下图所示,BERT模型接收该输入,并输出每个标记的表示。因为我们为每个句子增加了[CLS]标记,我们可以使用该标记作为句子的表示。比如下图中的 R 1 R_1 R1​代表了sent one; R 2 R_2 R2​代表了sent two。我们称这种BERT模型为BERTSUM。

注意,为了得到句子表示,我们不必从头训练BERT。我们可以使用任一预训练的BERT模型,只要按照上面的做法修改输入格式。然后就可以用每个句子开头的[CLS]标记代表整个句子表示。

带分类器的BERTSUM

我们知道在抽取式摘要中,我们只要选择重要的句子。我们从上文已经知道如何获得句子的表示。现在,我们将这些表示输入一个简单的二分类器,来判断输入的句子是否能被加入到摘要中。该分类器层通常被称为摘要层:

该分类器返回每个句子能加到摘要中的概率。

对于文档中的每个句子 i i i,我们会得到句子表示 R i R_i Ri​,然后输入到摘要层,得到能加到摘要中的概率 Y ^ i \hat Y_i Y^i​: Y ^ i = σ ( W o R i + b o ) \hat Y_i = \sigma(W_o R_i + b_o) Y^i​=σ(Wo​Ri​+bo​) 显然,只需要一个Sigmoid分类器就能计算这个概率。通过最小化真实概率 Y i Y_i Yi​和预测概率 Y ^ i \hat Y_i Y^i​之间的二分类损失,我们可以同时微调预训练的BERT模型和摘要层。

但除了简单的Sigmoid分类器,我们还可以尝试其他的分类器。

BERTSUM和一个Transfomer及LSTM

学者们提出了另外两种不同的方法:

  • 一个句间(inter-sentence)Transformer
  • LSTM

即,不是将句子表示 R R R直接输入到一个sigmoid分类器,而是输入到一个Transformer和LSTM来得到更好的表示。

带有句间Transformer的BERTSUM

有了句间Transformer,我们可以将之前BERT的结果输入给Transformer编码器层。但是为啥要这么做么?Transformer的编码器接收表示 R R R,然后返回它的隐藏状态表示。该隐藏状态表示有助于学习注重于摘要任务的文档级特征。

我们先回顾下transformer的编码器。我们知道transformer包含 L L L个编码器。每个编码器由两个子层组成——多头注意力和带层归一化的前馈网络。下图显示了两个编码器(只有第一个是展开了的)。最顶层的编码器输出隐藏状态表示:

我们来理解transformer编码器在这里起的作用。我们知道transformer包含 L L L个编码器。

用 h h h表示由transformer编码器得到的隐藏状态表示,那么 h l h^l hl表示由编码器 l l l得到的。

我们输入从BERT得到的表示 R R R​到transformer编码器中,但在输入到编码器之前,我们增加位置嵌入。

输入表示 R R R经过位置嵌入得到的嵌入表示记为 h 0 h^0 h0: h 0 = PosEmb ( R ) h^0 = \text{PosEmb}(R) h0=PosEmb(R) PosEmb \text{PosEmb} PosEmb表示位置嵌入层。现在,我们将 h 0 h^0 h0喂给编码器。每个编码器包含两个子层——多头注意力层和前馈网络层。对于编码器 l l l​,两个子层的公式为: h ~ l = LN ( h l − 1 + MHAtt ( h l − 1 ) ) h l = LN ( h ~ l + FNN ( h ~ l ) ) \tilde h^l = \text{LN}(h^{l-1} + \text{MHAtt}(h^{l-1})) \\ h^l = \text{LN}(\tilde h^{l} + \text{FNN}(\tilde h^{l})) h~l=LN(hl−1+MHAtt(hl−1))hl=LN(h~l+FNN(h~l)) 这里 LN \text{LN} LN代表层归一化; MHAtt \text{MHAtt} MHAtt代表多头注意力; FNN \text{FNN} FNN代表前馈网络。

最顶层由 L L L表示,那么由最顶层编码器得到的隐藏状态表示记为 h L h^L hL。我们拿到这个隐藏状态表示 h L h^L hL​再喂给sigmoid分类器,得到了句子属于摘要的概率: Y ^ i = σ ( W o h i L + b o ) \hat Y_i = \sigma(W_o h_i^L + b_o) Y^i​=σ(Wo​hiL​+bo​) 整个架构如下:

带LSTM的BERTSUM

我们拿从BERT模型得到的句子 i i i表示 R i R_i Ri​喂给LSTM单元。LSTM单元输出隐藏状态 h i h_i hi​。然后还是将该隐藏状态输入到一个sigmoid分类器中: Y ^ i = σ ( W o h i + b o ) \hat Y_i = \sigma(W_oh_i + b_o) Y^i​=σ(Wo​hi​+bo​) 这种方法就简单多了,其架构为:

利用BERT做生成式摘要

在生成式摘要中,我们的目标是通过释义创建一个摘要。那我们要如何利用BERT来做这件事呢?由于BERT仅返回每个标记的表示。如何利用BERT来生成新文本呢?

为了做生成式摘要,我们使用带编码器-解码器的transformer模型。我们输入文本到编码器,输出给定文本的表示。然后将该表示输入到解码器,解码器基于该表示来生成摘要。

在这里,我们可以使用预训练的BERTSUM作为编码器。但有一个小问题:在transformer模型中,编码器是一个预训练的BERTSUM模型,但解码器是随机初始化的。这会在训练过程产生差异。因为编码器已经是预训练的,它可能会过拟合;而解码器不是预训练的,它可能会欠拟合。

所以,我们解决这个问题。我们需要使用两个Adam优化器,分别用于编码器和解码器。并且使用不同的学习率。因为编码器已经预训练了,我们可以设置一个小一点的学习率和平滑一点的decay。编码器的学习率给定为: l r e = l r e ~ . min ⁡ ( step − 0.5 , step . warmup e − 15 ) lr_e = \tilde {lr_e} . \min(\text{step}^{-0.5}, \text{step}.\text{warmup}_e^{-15}) lre​=lre​~​.min(step−0.5,step.warmupe−15​) 其中 l r e ~ = 2 e − 3 \tilde {lr_e}=2e^{-3} lre​~​=2e−3; warmup e = 20000 \text{warmup}_e=20000 warmupe​=20000。

而解码器的学习率给定如下: l r d = l r d ~ . min ⁡ ( step − 0.5 , step . warmup d − 15 ) lr_d=\tilde {lr_d}.\min(\text{step}^{-0.5}, \text{step}.\text{warmup}_d^{-15}) lrd​=lrd​~​.min(step−0.5, 标签: 热过载继电器lrd06c热继电器lrd1321n10

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台