【文本摘要】Text Summarization文本摘要与注意力机制

2020 年 10 月 16 日 AINLP

整理:泛音

公众号:深度学习视觉



什么是NLP中的文本摘要

自动文本摘要是在保持关键信息内容和整体含义的同时,生成简洁流畅的摘要的任务。
文本摘要目前大致可以分为两种类型:
  1. Extractive Summarization:重要内容、语句的提取。

  2. Abstractive Summarization:文本总结。

Extractive Summarization

由图可以看出,这种方法提取的内容语句来自于原文。

Abstractive Summarization

由图可以看出,这种方法提取的内容语句可能不存在于原文。

Seq2Seq模型

Seq2Seq模型可以处理一切连续型信息,包括情感分类,机器翻译,命名实体识别等。
  1. 机器翻译任务中,输入是连续文本序列,输出也是连续文本序列。

2. 命名实体识别中,输入是连续文本序列,输出是连续的标签信息。
所以,我们可以利用Seq2Seq模型,通过输入一段长文本,输出短的摘要,实现文本摘要功能。下图是典型的Seq2Seq模型架构:
通常我们可以选择RNNs网络的变体GRU或者LSTM,这是因为它们能够通过克服梯度消失的问题来捕获长期依赖性。

Encoder编码器

LSTM中的Encoder读取整个输入序列,其中每个时间step上,都会有一个字输入编码器。然后,他在每个时间step上处理信息,并捕获输入序列中存在的上下文信息。

上一个时间step的隐藏层h1与记忆单元层c1将会用来初始化Decoder。

Decoder解码器

Decoder是LSTM结构的另一部分。它逐字读取整个目标序列,并以一个时间步长预测相同的序列偏移量。
解码器可以在给定前一个单词的情况下预测序列中的下一个单词。解码器的初始输入是编码器最后一步的结果。
在将整个目标序列放入解码器前,还需将[start] 与 [end]这两个特殊的tokens加入序列中,告知模型的开始与结束。模型通过输入的[start]开始预测第一个词,而[end]则表示整个句子的结束。

Deocder的工作流程

假设输入序列为[x1,x2,x3,x4],将其编码成内部固定长度的向量。
下图显示了每一个time step下Decoder是如何工作的。

推理部分

下图是整个Encoder-Decode的结构。通过上面的理解,我觉得这个图非常清晰。
  1. Encoder整个输入序列,并且用Encoder最后一个状态结果来初始化Decoder。

  2. 将[start]作为输入传递给解码器Decoder。

  3. 使用通过Encoder初始化过的Decoder运行一个time stpe。

  4. 输出将是下一个单词的概率,将选择概率最大的单词。

  5. 这个预测的单词将会在下一时间Step中作为输入。并且通过当前状态更新内部参数。

  6. 重复步骤3-5,直到生成[end]或达到目标序列的最大长度。

Encoder-Decoder结构的局限性

Encoder将整个输入序列转为固定的长度,但是当序列很长的时候,Encoder将会很难记住整个序列的内容,无法将所有必要信息准确的编码到固定长度。但是,我们需要关注序列中所有的内容么,不需要。

注意力机制

为了解决长句子的问题,注意力机制出现在人们的视野。注意力机制为对结果重要的部分添加高的权重,以保留主要信息。举个例子:
  1. 需要编码的序列[x1,x2,x3,x4,x5,x6,x7]
    Source sequence: “Which sport do you like the most?

  2. 需要解码的序列[y1,y2,y3]
    Target sequence: I love cricket.

我们可以判断,y1[I]与x4[you]有关,而y2[love]则与x5[like]有关。所以,相比记住序列中的所有单词,不如增加对目标序列重要部分的权重,忽视低权重的部分。

Global Attention and Local Attention

编码器的隐藏层中,所有部分都参与attention计算上下文。

编码器的隐藏层中,仅有部分参与attention计算上下文。

本文最终采用全局注意力机制。(只是添加了注意力机制,编码的固定长度依然需要固定。所以实战中需要通过数据确定一个合适的长度数值。短了无法表达文本内容,长了会造成计算资源浪费。)

实战

我们的目标是为亚马逊美食评论生成文本摘要。(这里我只提取了我觉得有用的部分)

数据表述

这些评论通常很长而且具有可描述性。数据集下载:kaggleData。
数据涵盖了超过10年的时间,包括截至2012年10月的所有〜500,000条评论。这些评论包括产品,用户信息,评级,纯文本评论和摘要。它还包括来自所有其他亚马逊类别的评论。

数据处理

由于评论文本和摘要中涉及的预处理步骤略有不同,因此我们需要定义两个不同的函数来预处理评论和摘要。

评论文本处理

  1. 将所有字母小写;

  2. 移除HTML标签;

  3. Contraction mapping;

  4. 移除(‘s);

  5. 删除括号内的内容(觉得括号里面的内容解释说明不重要);

  6. 消除标点符号和特殊字符;

  7. 删除停用词;

  8. 删除低频词;

摘要文本处理

为摘要文本添加[start]和[end]。

数据分布

通过数据统计,可以看到摘要与文本数据的长度分布。通过数据可视化,我们可以将评论文本的长度限定在80,而摘要的长度限定在10。

建立Tokenizer

通过分词器生成词汇表,并将单词文本序列转为数值序列,方便计算机计算。

模型建立

  1. 我们可以选择是否让LSTM在每个时间步都会生成隐藏状态h和记忆单元状态c。

  2. 选择LSTM是否仅生成最后一个时间步的隐藏状态h和记忆单元状态c。

  3. 选择LSTM相互堆叠提高模型效果。

  4. 选择双向LSTM,可以双向处理文本数据,获取更加丰富的上下文信息。

  5. 使用beam search strategy代替贪婪方法argmax。

  6. 根据BLEU分数评估模型的性能。

  7. 可以选择指针生成网络,

  8. 因为整数序列采用独热编码的方式,所以损失函数采用了稀疏交叉熵,对内存友好。

数学理解注意力机制

1. 编码器为源文本序列每一个时间步j都生成了一个隐藏状态值hj。
2. 相似的工作,解码器为目标文本每一个时间步i都生成了隐藏状态值si。
3. alignment score:   。用这个分数表示源文本中的第j步单词与目标文本中第i步单词的关联度。可以用hj与si来计算这个分数值 
根据所使用的得分函数的类型,有不同类型的注意力机制。这里列举一些流行的注意力机制:
4. 使用softmax函数对注意力参数的值进行归一化。 
5. 计算注意力权重$a_{ij}$与编码器hj的隐藏状态乘积的线性总和,以产生注意力上下文向量Ci。 
6. 将注意力上一下文向量Ci与目标隐藏层向量si级联以产生新的注意力隐藏层向量Si。 
7. 将注意力隐藏层向量传入密集层产生yi。 

参考:

Comprehensive Guide to Text Summarization using Deep Learning in Python

https://www.analyticsvidhya.com/blog/2019/06/comprehensive-guide-text-summarization-using-deep-learning-python/?utm_source=blog&utm_medium=understanding-transformers-nlp-state-of-the-art-models




由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心


欢迎加入文本摘要技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注文本摘要

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
7

相关内容

【ICML2020】文本摘要生成模型PEGASUS
专知会员服务
34+阅读 · 2020年8月23日
【IJCAI2020南大】上下文在神经机器翻译中的充分利用
专知会员服务
15+阅读 · 2020年8月17日
【SIGIR 2020】 基于协同注意力机制的知识增强推荐模型
专知会员服务
89+阅读 · 2020年7月23日
【论文推荐】文本摘要简述
专知会员服务
68+阅读 · 2020年7月20日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
【文本摘要】BottleSum——文本摘要论文系列解读
深度学习自然语言处理
10+阅读 · 2019年12月10日
深度学习的下一步:Transformer和注意力机制
云头条
56+阅读 · 2019年9月14日
用深度学习做文本摘要
专知
24+阅读 · 2019年3月30日
最新论文解读 | 基于预训练自然语言生成的文本摘要方法
微软研究院AI头条
57+阅读 · 2019年3月19日
自动文本摘要
AI研习社
21+阅读 · 2018年10月27日
Jointly Improving Summarization and Sentiment Classification
黑龙江大学自然语言处理实验室
3+阅读 · 2018年6月12日
干货|当深度学习遇见自动文本摘要,seq2seq+attention
机器学习算法与Python学习
10+阅读 · 2018年5月28日
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
论文报告 | Graph-based Neural Multi-Document Summarization
科技创新与创业
15+阅读 · 2017年12月15日
Arxiv
3+阅读 · 2019年9月5日
Arxiv
5+阅读 · 2019年8月22日
Arxiv
3+阅读 · 2018年12月18日
Music Transformer
Arxiv
5+阅读 · 2018年12月12日
Arxiv
7+阅读 · 2018年1月30日
VIP会员
相关资讯
【文本摘要】BottleSum——文本摘要论文系列解读
深度学习自然语言处理
10+阅读 · 2019年12月10日
深度学习的下一步:Transformer和注意力机制
云头条
56+阅读 · 2019年9月14日
用深度学习做文本摘要
专知
24+阅读 · 2019年3月30日
最新论文解读 | 基于预训练自然语言生成的文本摘要方法
微软研究院AI头条
57+阅读 · 2019年3月19日
自动文本摘要
AI研习社
21+阅读 · 2018年10月27日
Jointly Improving Summarization and Sentiment Classification
黑龙江大学自然语言处理实验室
3+阅读 · 2018年6月12日
干货|当深度学习遇见自动文本摘要,seq2seq+attention
机器学习算法与Python学习
10+阅读 · 2018年5月28日
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
论文报告 | Graph-based Neural Multi-Document Summarization
科技创新与创业
15+阅读 · 2017年12月15日
相关论文
Arxiv
3+阅读 · 2019年9月5日
Arxiv
5+阅读 · 2019年8月22日
Arxiv
3+阅读 · 2018年12月18日
Music Transformer
Arxiv
5+阅读 · 2018年12月12日
Arxiv
7+阅读 · 2018年1月30日
Top
微信扫码咨询专知VIP会员