1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 文本摘要生成 - 基于注意力的序列到序列模型

文本摘要生成 - 基于注意力的序列到序列模型

时间:2023-06-28 20:23:45

相关推荐

文本摘要生成 - 基于注意力的序列到序列模型

向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程 公众号:datayx

1 相关背景

本文完整源码 以及论文链接获取方式:

关注微信公众号 datayx 然后回复 摘要生成 即可获取。

摘要生成算法主要分为抽取型(Extraction-based)和概括型(Abstraction-based)两类. 传统的摘要生成系统大部分都是抽取型的, 这类方法从给定的文章中, 抽取关键的句子或者短语, 并重新拼接成一小段摘要, 而不对原本的内容做创造性的修改. 这类抽取型算法工程上已经有很多开源的解决办法了, 例如Github上的项目sumy, pytextrank, textteaser等. 本文重点讲概括型摘要生成系统的算法思想和tensorflow实战, 算法思想源于A Neural Attention Model for Abstractive Sentence Summarization这篇论文. 本文希望帮助读者详细的解析算法的原理,再结合github上相关的开源项目textsum讲解工程上的实际应用.

2 算法原理

2.1 模型训练(train)

下面我们举一个例子来说明训练的过程:

通过包含编码器并且联合训练这两个组块, 我们根据当前yc对x的不同内容投入不同的关注度, 进而的到更好的结果. 模型结构如下图所示:

2.2 Beam Search生成摘要(decode)

Step1: 预测前C个词的时候窗口溢出的部分需要进行padding操作, 预测第1个词的时候我们选出K个词符.

Step2: 预测第2个词的时候, 我们选出新的K个词符, 对应K条备选路径. 前一阶段概率低的路径和词符, 被抛弃掉.

Step3: 重复前面的过程.

Step4: 每次beam search不一定能选出不同的K个词, 但是每次beam search都找到最优的前K个路径, 路径可以有重叠.

Step5: 迭代N次, 最终选出可能性最大的一条词序列路径

下面是对Beam Search算法的详细分析, 对原文的Algorithm 1逐条进行解释.

Beam Search算法分析

3 TensorFlow程序实战

Github上的textsum首页给出了此项目在Bazel环境下的运行方式. 如果你不想通过Bazel运行, 你可以直接在seq2seq_attention.py中设定运行参数. 设定完参数后, 直接运行python seq2seq_attention.py即可.

除了上述项目运行时所需的必要参数, 模型参数也在seq2seq_attention.py中设定, 如下图所示, 包括学习率, 最小学习率(学习率会衰减但不会低于最小学习率), batch size, train模式encoder的RNN层数, 输入正文词汇数上限, 输出摘要词汇数上限, 最小长度限制, 隐层节点数, word embedding维度, 梯度截取比例, 每一个batch随机分类采样的数量.

git项目textsum给的toy数据集太小, vocab也几乎不可用(一些常见的单词都没有覆盖到). 如果希望获得好的效果, 需要自己整理可用的数据集.

为了方便理解, 简单解释一下图中出现的符号,

第一个符号表示从x1,x2到y的线性变换, 红色变量是训练过程要学习出来的.

attention机制比较复杂也比较重要, 我们对这部分细化一下来看. attention decoder结构图如下:

下图是对attention模块的细化:

符号说明:

为什么attention这个模块会起到效果呢? 因为attention模块会根据decoder当前时刻的LSTM单元的状态, 来调整对attention_states(encoder输出)的注意力. Attention_states不同位置获得的关注不一样. 这样我们就更大程度地, 关注了原文中, 对当前输出更为有用的信息, 输出结果也就更准确了. Attention模块输出结果和decoder模块原本的输出联合起来, 得到最终的输出结果.

阅读过本文的人还看了以下:

不断更新资源

深度学习、机器学习、数据分析、python

搜索公众号添加:datayx

长按图片,识别二维码,点关注

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。