独家 | Python利用深度学习进行文本摘要的综合指南(附教程)

本文详述如何利用Python和深度学习构建文本摘要器,重点介绍序列到序列(Seq2Seq)模型和注意力机制。通过Keras实现了一个完整的文本摘要模型,包括编码器-解码器架构、注意力层的实现和推理过程。文章还探讨了模型的局限性和提升性能的方法,提供了完整的代码示例。
摘要由CSDN通过智能技术生成
640?wx_fmt=png

作者:ARAVIND PAI

翻译:和中华

校对:申利彬

本文约7500字,建议阅读15分钟

本文介绍了如何利用seq2seq来建立一个文本摘要模型,以及其中的注意力机制。并利用Keras搭建编写了一个完整的模型代码。


介绍


“我不想要完整的报告,只需给我一个结果摘要”。我发现自己经常处于这种状况——无论是在大学还是在职场中。我们准备了一份综合全面的报告,但教师/主管却仅仅有时间阅读摘要。


听起来很熟悉?好吧,我决定对此采取一些措施。手动将报告转换为摘要太耗费时间了,对吧?那我可以依靠自然语言处理(NLP)技术来帮忙吗?


自然语言处理(NLP)

https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=comprehensive-guide-text-summarization-using-deep-learning-python


这就是使用深度学习的文本摘要真正帮助我的地方。它解决了以前一直困扰着我的问题——现在我们的模型可以理解整个文本的上下文。对于所有需要把文档快速摘要的人来说,这个梦想已成现实!


640?wx_fmt=png


我们使用深度学习完成的文本摘要结果如何呢?非常出色。因此,在本文中,我们将逐步介绍使用深度学习构建文本摘要器的过程,其中包含构建它所需的全部概念。然后将用Python实现我们的第一个文本摘要模型!


注意:本文要求对一些深度学习概念有基本的了解。 我建议阅读以下文章。


  • A Must-Read Introduction to Sequence Modelling (with use cases)

https://www.analyticsvidhya.com/blog/2018/04/sequence-modelling-an-introduction-with-practical-use-cases/?

utm_source=blog&utm_medium=comprehensive-guide-text-summarization-using-deep-learning-python


  • Must-Read Tutorial to Learn Sequence Modeling (deeplearning.ai Course #5)

https://www.analyticsvidhya.com/blog/2019/01/sequence-models-deeplearning/?utm_source=blog&utm_medium=comprehensive-guide-text-summarization-using-deep-learning-python


  • Essentials of Deep Learning: Introduction to Long Short Term Memory

https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/?utm_source=blog&utm_medium=comprehensive-guide-text-summarization-using-deep-learning-python


目录


1. NLP中的文本摘要是什么?

2. 序列到序列(Seq2Seq)建模简介

3. 理解编码器(Encoder)-解码器(Decoder)架构

4. 编码器-解码器结构的局限性

5. 注意力机制背后的直觉

6. 理解问题陈述

7. 使用Keras在Python中实现文本摘要模型

8. 注意力机制如何运作?


我在本文的最后面保留了“注意力机制如何运作?”的部分。这是一个数学密集的部分,并不强制了解Python代码的工作原理。但是,我鼓励你通读它,因为它会让你对这个NLP概念有一个坚实的理解。


1. NLP中的文本摘要是什么?


在了解它是如何工作之前,我们先来看看文本摘要是什么。如下是一个简洁的定义,我们开始吧:


“自动文本摘要的任务是生成简明扼要的摘要,同时保留关键信息内容和整体含义”

          - 文本摘要技术:简要调查,

          2017


大致有两种不同的方法用于文本摘要:


  • 抽取式摘要(Extractive Summarization)

  • 生成式摘要(Abstractive Summarization)


640?wx_fmt=png


让我们更详细地看一下这两种类型。


  • 抽取式摘要


这个名字透露了这种方法的作用。我们从原文中找出重要的句子或短语,并从中抽取。这些抽取出的句子将成为我们的总结。下图简要说明了抽取式摘要:


640?wx_fmt=png


我建议你通读这篇文章,它介绍了如何使用TextRank算法构建一个抽取式文本摘要器:


  • An Introduction to Text Summarization using the TextRank Algorithm (with Python implementation)

https://www.analyticsvidhya.com/blog/2018/11/introduction-text-summarization-textrank-python/


  • 生成式摘要


这是一个非常有趣的方法。当中,我们会从原文中生成新的句子。这与我们之前看到的抽取方法形成了对比,之前我们只使用了现存的句子。通过生城式摘要生成的句子可能并未出现在原文中:


640?wx_fmt=png


你可能已经猜到了——我们将在本文中使用深度学习构建一个生成式文本摘要器! 在深入实现这部分之前,我们先了解一些构建文本摘要生成模型所需的概念。


前方高能!


2. 序列到序列(Seq2Seq)建模简介


我们可以针对涉及顺序信息的任何问题构建Seq2Seq模型。顺序信息的一些非常常见的应用包括情感分类,神经网络机器翻译和命名实体识别。


在神经网络机器翻译的情况下,输入是某一种语言的文本,输出是另一种语言的文本:


640?wx_fmt=png


在命名实体识别中,输入是一个单词序列,而输出是输入序列中每个单词的标记序列:


640?wx_fmt=png


我们的目标是构建一个文本摘要生成器,其中输入是一个单词的长序列(文本正文),输出是一个简短的摘要(也是一个序列)。 因此,我们可以将其建模为多对多Seq2Seq问题。 以下是一个典型的Seq2Seq模型架构:


640?wx_fmt=png


Seq2Seq模型有两个主要组件:


  • 编码器

  • 解码器

 

我们来详细了解一下这两个组件。这些对于理解文本摘要是如何工作的代码至关重要。你还可以查看本教程以更详细地了解序列到序列建模。


教程:

https://www.analyticsvidhya.com/blog/2018/03/essentials-of-deep-learning-sequence-to-sequence-modelling-with-attention-part-i/?utm_source=blog&utm_medium=comprehensive-guide-text-summarization-using-deep-learning-python


3. 理解编码器-解码器架构


编码器-解码器架构主要用于解决输入和输出序列长度不同的序列到序列(Seq2Seq)问题。


让我们从文本摘要的角度来理解这一点。输入是一长串单词,输出是输入序列的简短版本。


640?wx_fmt=png


通常,循环神经网络(RNN)的变体,比如门控循环神经网络(GRU)或长短时记忆(LSTM),将优选作为编码器和解码器组件。这是因为它们能够通过克服梯度弥散问题来捕获长期依赖性。


我们可以分两个阶段设置编码器-解码器:


  • 训练阶段

  • 推理阶段

 

让我们通过LSTM模型来理解这些概念。


  • 训练阶段


在训练阶段,我们将首先设置编码器和解码器。然后,我们将训练模型以预测偏移一个时间步长的目标序列。我们详细了解一下如何设置编码器和解码器。


  • 编码器


编码器长短时记忆模型(LSTM)读取整个输入序列,其中在每个时间步,一个单词被送到编码器。然后,它在每个时间步处理信息并捕获输入序列中存在的上下文信息。


下图说明了这个过程:


640?wx_fmt=png


最后一个时间步的隐藏状态(hi)和单元状态(ci)用于初始化解码器。请记住,这是因为编码器和解码器是两套LSTM架构。


  • 解码器


解码器也是LSTM网络,它逐字读取整个目标序列并在每一个时间步预测相同的序列偏移。训练解码器以达到,给定前一个词预测序列中的下一个词。


640?wx_fmt=png


<start>和<end>是在将其提供给解码器之前添加到目标序列的特殊标记。解码测试序列时,目标序列是未知的。因此,我们通过将第一个字(始终是<start>标记)传递给解码器来开始预测目标序列,并且<end>标记表示句子的结尾。


到目前为止非常直观。


推理阶段


训练后,用目标序列未知的新序列来测试模型。因此,我们需要设置推理架构来解码测试序列:


640?wx_fmt=png

推理过程如何工作?


以下是解码测试序列的步骤:


1. 对整个输入序列进行编码,并使用编码器的内部状态初始化解码器

2. 将<start>标记作为解码器的输入

3. 使用内部状态运行解码器一个时间步

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

5. 在下一个时间步中将采样的字作为输入传递给解码器,并使用当前时间步更新内部状态

6. 重复步骤3-5,直到我们生成<end>标记或达到目标序列的最大长度


我们举一个例子,测试序列由[x1,x2,x3,x4]给出。推理过程如何作用于此测试序列?希望你在往下看之前先自己考虑一下。


1. 将测试序列编码为内部状态向量

2. 观察解码器如何在每个时间步预测目标序列:


  • Timestep: t=1

640?wx_fmt=png

  • Timestep: t=2

640?wx_fmt=png

  • Timestep: t=3

640?wx_fmt=png


4. 编码器-解码器结构的局限性


尽管这种编码器-解码器架构很有用,但它也有一些限制。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值