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 是正文词符的数量, 对应的摘要为 y=[y1,...,yN] , N 是摘要单词的数量.
对于给定的数据, 我们希望给定 x 生成摘要为 y 的概率最大, 即 maxθlogp(y|x;θ) , θ 是模型的参数. 但这个很难求解, 实际中我们用序列化的方式实例化这个目标, 原来的目标函数变为:

maxθi=0N1logp(yi+1|x,yc;θ)

这里 yi+1 是要预测的下一个词, ycy[iC+1,...,i] 是已知的序列, C 是已知序列窗口的长度. 后面会提到, 这个窗口的位置也是注意力关注的位置, 在后面的训练过程中会根据学习到的权重调整不同位置注意力的概率大小. 这个窗口是随着 i 的迭代来滑动的.
参数说明:
y : 参考摘要所有单词向量组成的序列
x : 正文的所以单词向量组成的序列
i : 当前评估函数所对应的位置
yc : 当前训练的窗口对应的局部摘要序列
yi+1 : 模型要预测的下一个单词

下面我们举一个例子来说明训练的过程:
这里写图片描述
我们希望根据, 当前局部摘要序列 yc 和全部的正文信息 x , 来预测下一个单词 yi+1 . 我们希望模型预测下一个单词为 yi+1 的概率最大, 并且希望所有单词都尽可能的预测准确, 在公式上表现为 N1i=0logp(yi+1|x,yc;θ) 最大. 窗口

  • 29
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值