TensorFlow文本摘要生成 - 基于注意力的序列到序列模型
Posted 黄文坚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow文本摘要生成 - 基于注意力的序列到序列模型相关的知识,希望对你有一定的参考价值。
1 相关背景
维基百科对自动摘要生成的定义是, “使用计算机程序对一段文本进行处理, 生成一段长度被压缩的摘要, 并且这个摘要能保留原始文本的大部分重要信息”. 摘要生成算法主要分为抽取型(Extraction-based)和概括型(Abstraction-based)两类. 传统的摘要生成系统大部分都是抽取型的, 这类方法从给定的文章中, 抽取关键的句子或者短语, 并重新拼接成一小段摘要, 而不对原本的内容做创造性的修改. 这类抽取型算法工程上已经有很多开源的解决办法了, 例如Github上的项目sumy, pytextrank, textteaser等. 本文重点讲概括型摘要生成系统的算法思想和tensorflow实战, 算法思想源于A Neural Attention Model for Abstractive Sentence Summarization这篇论文. 本文希望帮助读者详细的解析算法的原理, 再结合github上相关的开源项目textsum讲解工程上的实际应用.本文由PPmoney大数据算法团队撰写,PPmoney是国内领先的互联网金融公司,旗下PPmoney理财总交易额超过700亿元。此外,若对TensorFlow的使用技巧和方法感兴趣,欢迎阅读本团队负责人黄文坚所著的《TensorFlow实战》。
2 算法原理
下面对A Neural Attention Model for Abstractive Sentence Summarization这篇文章, 的算法原理进行讲解. 我们将这个模型简称为NAM. 主要分为模型训练(train)和生成摘要(decode)两部分讲解.
2.1 模型训练(train)
NAM这个模型是纯数据驱动, 我们喂给它的训练集数据是由一系列正文: 摘要对组成. 假设正文是
x=[x1,...,xM]
,
M
是正文词符的数量, 对应的摘要为
对于给定的数据, 我们希望给定
这里 yi+1 是要预测的下一个词, yc≜y[i−C+1,...,i] 是已知的序列, C 是已知序列窗口的长度. 后面会提到, 这个窗口的位置也是注意力关注的位置, 在后面的训练过程中会根据学习到的权重调整不同位置注意力的概率大小. 这个窗口是随着
参数说明:
y : 参考摘要所有单词向量组成的序列
x : 正文的所以单词向量组成的序列
i : 当前评估函数所对应的位置
yi+1 : 模型要预测的下一个单词
下面我们举一个例子来说明训练的过程:
我们希望根据, 当前局部摘要序列
yc
和全部的正文信息
x
, 来预测下一个单词
yi+1
. 我们希望模型预测下一个单词为
yi+1
的概率最大, 并且希望所有单词都尽可能的预测准确, 在公式上表现为
∑N−1i=0logp(yi+1|x,yc;θ)
最大. 窗口
C
会从摘要的起始位置滑动到终止位置, 当<s>
来补全.
我们感兴趣的分布
p(yi+1|x,yc;θ)
是基于输入语句
x
的条件语言模型. 这里我们直接将原始的分布, 参数化为一个神经网络. 这个神经网络既包括了一个神经概率语言模型(neural probabilistic language model), 也包括了一个编码器(这个编码器就是一个条件摘要模型).
通过包含编码器并且联合训练这两个组块, 我们根据当前
模型整体的网络结构图(具有一个额外的编码器单元):
右侧分支: 仅根据当前的序列 yc 预测下一个单词是 yTensorFlow文本摘要生成 - 基于注意力的序列到序列模型