【Keras教程】用Encoder-Decoder模型自动撰写文本摘要

2017 年 12 月 11 日 专知 专知内容组

点击上方“专知”关注获取专业AI知识!

【导读】这篇博文介绍了如何在深度学习框架Keras上实现文本摘要问题,探讨了如何使用编码器-解码器递归神经网络体系结构来解决文本摘要问题,如何实现文本摘要问题的不同的编码器和解码器,博文通俗易懂,专知内容组整理出来,希望大家喜欢。


Encoder-DecoderModels for Text Summarization in Keras

用Keras实现基于Encoder-Decoder的文本自动摘要

作者:Jason Brownlee

译者:专知内容组


文本摘要概述




文本摘要是从一个源文档中创建出一个的简短、准确和流畅的摘要问题。


针对机器翻译而开发的编码器-解码器递归神经网络架构在文本摘要的问题中证明是非常有效的。


在Keras深度学习库中应用这种结构可能会很困难,因为为了保持Keras库的整洁、简单和易于使用而牺牲了一些灵活性。

 

在本教程中,您将了解如何在Keras中实现用于文本摘要的编码器-解码器网络结构。

 

完成本教程之后,您将知道:

  • 如何使用编码器-解码器递归神经网络体系结构来解决文本摘要问题;

  • 如何实现文本摘要问题的不同的编码器和解码器;

  • 您可以使用三种模型来实现Keras中文本摘要的结构。

 

详细内容




接下来我们开始吧:


Keras文本摘要的编码器-解码器模型。

照片由Diogo Freire提供,保留版权。

 

教程概述:




该教程分为5部分,包括:

  1. 编码器-解码器结构

  2. 文本摘要编码器

  3. 文本摘要解码器

  4. 读取源文本

  5. 实现模型

 

 

▌1. 编码器-解码器结构




编码器-解码器结构是一种组织循环神经网络用于序列预测问题的方法,其具有输入、输出或输入和输出变量。

该结构涉及两个组件:一个编码器和一个解码器。

编码器:编码器读取整个输入序列并将其编码为内部表示,通常一个固定长度的向量称为上下文向量。

解码器:解码器从编码器读取编码的输入序列并生成输出序列。

 

想要了解更多的编码器-解码器结构,请看下面的帖子:

Encoder-DecoderLong Short-Term Memory Networks(编码器-解码器长期短期记忆网络)

https://machinelearningmastery.com/encoder-decoder-long-short-term-memory-networks/

 

编码器和解码器子模型都是共同训练的,也就是说同时进行训练。

 

这在传统意义上是一个很大的壮举,挑战自然语言问题需要开发单独的模型,这些模型后来被串联起来,允许在序列生成过程中积累错误。

 

整个编码输入被用作输出中每个步骤的上下文。虽然这是有效的,但输入的固定长度编码限制了可以生成的输出序列的长度。

 

编码器-解码器结构的扩展提供的更具表现性的形式是编码输入序列,并且允许解码器在生成输出序列的每个步骤时学习在何处关注编码输入。

 

这个架构的扩展被称为注意力。

想要了解编码器-解码器结构的注意力概念,请参看下面帖子:

Attention in LongShort-Term Memory Recurrent Neural Networks(长期短期记忆循环神经网络的注意力)

https://machinelearningmastery.com/attention-long-short-term-memory-recurrent-neural-networks/

 

有注意力的编码器-解码器结构对于产生可变长度输出序列(例如文本摘要)的一系列自然语言处理问题而言是受欢迎的。

 

该体系结构在文本摘要中的应用如下:

编码器:编码器负责读取源文档并将其编码为内部表示。

解码器:解码器是一种语言模型,负责使用源文档的编码表示在输出摘要时生成每个单词。

 

 

▌2. 文本摘要编码器




编码器是模型的复杂性所在,因为它负责捕获源文档的含义。

 

可以使用不同类型的编码器,但是更常用的是双向递归神经网络,例如LSTM。在编码器中使用递归神经网络时,使用单词嵌入(word embedding)来提供单词的分布式表示。

 

Alexander Rush, etal.使用一个简单的词袋编码器,丢弃词序和卷积编码器,尝试捕获n-gram信息。

 

引用我们最基本的模型只是简单地使用输入语句的字符串嵌入到H尺寸,而忽略原始顺序的属性或相邻字词之间的关系。 [...]为了解决一些建模问题,我们还考虑在输入语句中使用深度卷积编码器。——关于抽象句摘要的神经注意模型, 2015。(A NeuralAttention Model for Abstractive Sentence Summarization,2015.)

 

Konstantin Lopyrev使用4LSTM递归神经网络堆叠起来作为编码器。

 

引用编码器作为输入提供一篇新闻文章的文字。每个单词首先通过一个嵌入层,将单词转换为分布式表示。该分布式表示然后用多层神经网络进行组合。——使用递归神经网络生成新闻头条,2015。Generating NewsHeadlines with Recurrent Neural Networks, 2015.

 

Abigail See, et al.使用单层双向LSTM作为编码器。

 

引用:将文章w(i)的tokens一个接一个地送入编码器(单层双向LSTM),产生一系列编码器隐藏状态h(i)。——指出要点:用指针-生成器器网络生成摘要,2017。Get To ThePoint: Summarization with Pointer-Generator Networks, 2017.

 

Ramesh Nallapati等,在其编码器中使用双向GRU递归神经网络,并在输入序列中包含了有关每个单词的附加信息。

引用:编码器由一个双向GRU-RNN组成。——使用序列-to-序列RNNs的抽象文本摘要,2016。Abstractive Text Summarization Using Sequence-to-Sequence RNNs andBeyond, 2016.

 

▌3. 文本摘要解码器




解码器必须在给定两个信息源的输出序列中生成每个词:

上下文向量:编码器提供的源文档的编码表示形式。

生成序列:已经作为摘要生成的单词或单词序列。

上下文向量可以是简单的编码器-解码器体系结构中的固定长度编码,或者可以是由注意力机制过滤的更具表现力的形式。

 

为生成的序列提供了准备,例如通过词嵌入来分配每个生成的词的表示。

引用在每个步骤t,解码器(单层单向LSTM)接收前一个词的嵌入(训练时,这是参考摘要的前一个词;在测试时,它是解码器发出的前一个词)——指出要点:用指针-生成器器网络生成摘要,2017。(Get To ThePoint: Summarization with Pointer-Generator Networks, 2017.

 

Alexander Rush, et al.x是源文档的图中清楚地显示了这一点,enc是提供源文档的内部表示的编码器,yc是先前生成的词的序列。



用于文本摘要的解码器的输入示例。

Taken from “A Neural Attention Model forAbstractive Sentence Summarization”, 2015.

 

每次生成一个单词需要运行该模型,直到生成最大数量的单词或者达到一个特殊的结束标记。

 

该过程必须通过为模型提供一个特殊的开始序列标记来生成第一个单词。

引用解码器将输入文本的最后一个词后的隐藏层作为输入。首先,序列结束符号作为输入,再次使用嵌入层将符号变换为分布式表示。生成下一个单词时,用该单词的同一个单词(生成的单词)作为输入。——使用递归神经网络生成新闻头条,2015。(Generating NewsHeadlines with Recurrent Neural Networks, 2015.

 

Ramesh Nallapati等人使用GRU递归神经网络来生成输出序列。

引用...解码器由一个单向的GRU-RNN组成,它的隐藏状态大小与编码器的相同。——


▌4. 读取源文本




这种体系结构的应用具有灵活性,这取决于所处理的特定文本摘要问题。

 

大多数研究都集中在编码器中的一个或几个源语句,但事实并非如此。

 

例如,编码器可以被配置为以不同大小的块读取和编码源文档:

  • 句子

  • 段落

  • 文档

 

同样地,解码器可以被配置为汇总每个块或者汇集编码的块并且输出更广泛的概要。

 

沿着这个方向已经做了一些工作,Alexander Rush等人在词汇和句子层面都使用分层编码器模型。

引用这个模型旨在使用两个层面的两个双向RNN来捕获这个两个重要级别的概念,一个在单词级别,另一个在句子级别。注意力机制同时在两个层面上运作。——抽象句摘要的神经注意力模型,2015。(A NeuralAttention Model for Abstractive Sentence Summarization, 2015.

 

▌5. 读取源文本实现模型




在本节中,我们将看看如何在Keras深度学习库中实现用于文本摘要的编码器-解码器结构。

 

一般模型:模型的一个简单的实现包括一个Embedding输入编码器,后面跟着一个LSTM隐藏层,它产生一个固定长度的源文档表示。

解码器读取最后生成的词的表示和嵌入,并使用这些输入生成输出摘要中的每个词。


Keras中的文本摘要生成模型

 

有一个问题:

Keras不允许递归循环,模型的输出自动作为输入,输入到模型中。这意味着如上所述的模型不能直接在Keras中实现(但也许可以在更灵活的平台如TensorFlow中实现)。相反,我们可以看看我们可以在Keras中实现的模型的三种变体。

 

备选1:一次性模型(One-Shot Model

第一个替代模型是以一次性方式生成整个输出序列。也就是说,解码器仅使用上下文向量来生成输出序列。


备选1One-Shot文本描述生成模型。

 

以下是Keras中使用API实现这种方法的一些示例代码。



这个模型给解码器带来了沉重的负担。

解码器可能没有足够的上下文来产生相干的输出序列,因为它必须选择单词和它们的顺序。

 

备选2:递归模型A.

第二种可供选择的模型是开发一个生成单个单词预测并递归调用它的模型。

 

也就是说,解码器使用上下文向量以及到输入为止产生的所有单词的分布式表示,以便产生下一个单词。

 

可以使用语言模型来解释到目前为止产生的单词序列,以提供第二个上下文向量与源文档的表示组合,以便产生序列中的下一个单词。

 

通过递归地调用具有之前生成单词的模型(或者更具体地,在训练期间预期的前一个词)来建立摘要。

 

上下文向量可以集中或添加在一起,为解码器提供更广泛的上下文来解释和输出下一个单词。

 


备选2:递归文本摘要模型A

 

以下是KerasAPI实现这种方法的一些示例代码。

 



该模型是更好的,因为解码器有机会使用先前生成的单词和源文档作为生成下一个单词的上下文。

结合操作和解码器解释(以便解释生成输出序列的位置)确实带来了一定的负担。

 

备用3:递归模型B

在第三个替代方案中,编码器生成源文档的上下文向量。该文档在生成的输出序列的每一步被送到解码器。这允许解码器建立与生成输出序列中的单词相同的内部状态,以便在序列中生成下一个单词。

然后通过对输出序列中的每个单词迭代地调用模型来重复该过程,直到生成最大长度或序列结束标记。


备选3-递归文本摘要模型B

 

以下是KerasAPI实现这种方法的一些示例代码。


考虑一下,你还有其他的替代实现的想法吗?

延伸阅读:



 

如果您想要深入了解,本节将提供更多相关主题的资源。

 

文章:

  • A Neural Attention Model for     Abstractive Sentence Summarization, 2015.

  • Generating News Headlines with     Recurrent Neural Networks, 2015.

  • Abstractive Text Summarization     Using Sequence-to-Sequence RNNs and Beyond, 2016.

  • Get To The Point: Summarization     with Pointer-Generator Networks, 2017.

 

相关:

  • Encoder-Decoder     Long Short-Term Memory Networks(编码器-解码器LSTM网络)

  • Attention     in Long Short-Term Memory Recurrent Neural NetworksLSTM递归神经网络中的注意力机制)

 

概要:

在本教程中,您了解了如何在Keras深度学习库中实现文本摘要的编码器-解码器结构。

具体地,你学到了:

  • 如何使用编码器-解码器递归神经网络结构来解决文本摘要问题。

  • 在文本摘要问题中实现不同的编码器和解码器。

  • 您可以使用三种模型来实现Keras中文本摘要的结构。


参考链接:

https://machinelearningmastery.com/encoder-decoder-models-text-summarization-keras/


-END-

专 · 知

人工智能领域主题知识资料查看获取【专知荟萃】人工智能领域25个主题知识资料全集(入门/进阶/论文/综述/视频/专家等)

同时欢迎各位用户进行专知投稿,详情请点击

诚邀】专知诚挚邀请各位专业者加入AI创作者计划了解使用专知!

请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料

请扫一扫如下二维码关注我们的公众号,获取人工智能的专业知识!

请加专知小助手微信(Rancho_Fang),加入专知主题人工智能群交流!

点击“阅读原文”,使用专知



登录查看更多
13

相关内容

基于多头注意力胶囊网络的文本分类模型
专知会员服务
77+阅读 · 2020年5月24日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
GAN新书《生成式深度学习》,Generative Deep Learning,379页pdf
专知会员服务
202+阅读 · 2019年9月30日
基于句子嵌入的无监督文本摘要(附代码实现)
用深度学习做文本摘要
专知
24+阅读 · 2019年3月30日
最新论文解读 | 基于预训练自然语言生成的文本摘要方法
微软研究院AI头条
57+阅读 · 2019年3月19日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
从 Encoder 到 Decoder 实现 Seq2Seq 模型
AI研习社
10+阅读 · 2018年2月10日
【教程】如何使用深度学习为照片自动生成文本描述?
GAN生成式对抗网络
20+阅读 · 2017年11月19日
十分钟掌握Keras实现RNN的seq2seq学习
机器学习研究会
10+阅读 · 2017年10月13日
从Encoder到Decoder实现Seq2Seq模型(算法+代码)
量化投资与机器学习
8+阅读 · 2017年7月9日
Arxiv
6+阅读 · 2020年4月14日
Tutorial on NLP-Inspired Network Embedding
Arxiv
7+阅读 · 2019年10月16日
Star-Transformer
Arxiv
5+阅读 · 2019年2月28日
Arxiv
6+阅读 · 2018年6月20日
Arxiv
5+阅读 · 2018年5月5日
VIP会员
相关资讯
基于句子嵌入的无监督文本摘要(附代码实现)
用深度学习做文本摘要
专知
24+阅读 · 2019年3月30日
最新论文解读 | 基于预训练自然语言生成的文本摘要方法
微软研究院AI头条
57+阅读 · 2019年3月19日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
从 Encoder 到 Decoder 实现 Seq2Seq 模型
AI研习社
10+阅读 · 2018年2月10日
【教程】如何使用深度学习为照片自动生成文本描述?
GAN生成式对抗网络
20+阅读 · 2017年11月19日
十分钟掌握Keras实现RNN的seq2seq学习
机器学习研究会
10+阅读 · 2017年10月13日
从Encoder到Decoder实现Seq2Seq模型(算法+代码)
量化投资与机器学习
8+阅读 · 2017年7月9日
相关论文
Top
微信扫码咨询专知VIP会员