计算机系统应用  2020, Vol. 29 Issue (7): 166-172   PDF    
基于NN-Attention的中文短文本摘要
何正方, 梁宇     
云南大学 软件学院, 昆明 650500
摘要:在以往的Attention模型中, 只采用了Bidirectional-RNN, BRNN对上下文信息是有效的, 但是无法提取文本的高维特征, 所以引入了CNN. 因为基于矩阵变换的Attention模型无法对CNN抽取的特征进行表征, 所以采用全连接神经网络对Attention模型进行改进, 提出了NN-Attention. 为了加速模型的训练, 采用的循环神经网络为GRU. 实验采用CSTSD数据集, 并用TensorFlow完成模型的构建. 实验结果表明, 该模型在CSTSD数据集中可以较好地实现文本摘要的自动生成.
关键词: 中文    短文本    摘要    GRU    CNN    NN-Attention    
Chinese Short Text Summarization Based on NN-Attention
HE Zheng-Fang, LIANG Yu     
School of Software, Yunnan University, Kunming 650500, China
Abstract: The Bidirectional RNN (BRNN) was adopted in previous Attention models. The BRNN is effective for context information, but it is unable to extract high dimensional text features. Therefore, the CNN was introduced. The Attention model based on matrix transformation cannot characterize the features extracted by the CNN, a fully-connected neural network is used to improve the Attention model, and the NN-Attention is proposed. The recurrent neural network adopted was GRU, so as to speed up model training, the CSTSD dataset was used and TensorFlow was utilized for model construction. The experimental results show that the proposed model is able to realize automatic generation of text abstracts well in the CSTSD dataset.
Key words: Chinese     short text     summarization     GRU     CNN     NN-Attention    

随着Internet的飞速发展, 人们越来越多地依赖于万维网来获取所需要的信息. 如何更加有效地浏览和查阅万维网上的海量信息成了当前的研究热点[1]. 自动文本摘要技术对给定源文本内容进行压缩、提炼与总结, 并产生简洁、流畅且保留关键信息的文本来概括用户所关注的主要内容. 根据摘要内容的来源可以分为抽取式摘要和生成式摘要两类. 其中, 抽取式摘要生成的摘要内容是按一定规则从原文本中抽取出来的词、短语或句子组成的. 生成式摘要产生的摘要文本则是通过理解文本内容, 用简练的文字将原文本的内容表达出来[2]. 由于生成式摘要与人类做摘要的过程相似, 所以生成式摘要方法在文本摘要模型中得到了广泛使用.

随着人工智能技术快速发展, 神经网络和深度学习已广泛应用于自然语言处理任务, 比如机器翻译、情感分析、语音识别、文本摘要等. 其中, 以序列到序列(Sequence2Sequence)[3]神经网络模型为代表, 其结合了循环神经网络(Recurrent Neural Network, RNN)[4]和注意力机制(attention)[5], 该模型能够决定需要关注输入的是哪部分, 分配有限的信息处理资源给重要的部分, 比传统的自然语言处理方法效果好很多. 但是以往设计的注意力机制(BahdanauAttention[5], LuongAttention[6]), 不足以将长句的高维特征提取, 会造成导致生成摘要存在句子不通顺、词语重复、可读性差等问题. 这个问题限制了模型的性能, 尤其是当输入序列比较长时, 模型的性能会变得很差, 这个问题在长句的翻译中较为明显.

针对上述问题, 本文重新设计了注意力机制, 以提取长句的特征. 提出了NN-Attention, 其中的NN是全连接神经网络(Fully-connected Neural Network, FNN)[7]. 通过实验, 该模型生成的摘要在正确性和可读性上都较以往的注意力模型有所改善.

1 GRU

RNN是神经网络的一种, 它的输入不仅包括当前时刻的输入还包含了前一时刻的输出. 基本的RNN通过反向传播进行矩阵幂运算, 很容梯度消失或者梯度爆炸. LSTM[8]的提出有效地解决了这个问题, LSTM通过引入3个门控单元, 通过“门”结构来保留重要的内容和去除次要的内容. 但是由于本文引入了CNN, 参数成几何级增长. 若使用LSTM, 整个模型的参数量将非常庞大, 训练会变得十分困难. 为了解决LSTM参数过多, 训练时间过长, 本文采用GRU[9]神经元. GRU是LSTM的一种变种, 它将遗忘门和输入门合并为一个更新门, 其作用在于每个隐藏层减少了两个矩阵乘法运算, 模型的参数得到减少, 从而减少了训练时间, 并且容易实现, 其示意图如图1所示.

图 1 GRU示意图

更新门z决定隐藏状态的更新是否基于一个新的隐藏状态 $\widetilde h$ , 重置门r状态决定之前的隐藏状态是否被忽略.

让我们来描述j-th隐藏单元的激活是如何计算的, 首先, 按照式(1)计算重置门rj.

${r_j} = \sigma \left( {{{\left[ {{W_r}x} \right]}_j} + {{\left[ {{U_r}{h_{ < t - 1 > }}} \right]}_j}} \right)$ (1)

式(1)中, σ是Sigmoid激活函数, [·]jj-th的向量表示. xht-1分别表示输入和前一个隐藏状态, WrUr是已经学习到的权重矩阵.

类似的, 按照式(2)计算更新门zj.

${{\textit{z}}_j} = \sigma \left( {{{\left[ {{W_{\textit{z}}}x} \right]}_j} + {{\left[ {{U_{\textit{z}}}{h_{ < t - 1 > }}} \right]}_j}} \right)$ (2)

激活隐藏单元hj的实际计算公式如式(3)所示.

${{\textit{z}}_j} = \sigma \left( {{{\left[ {{W_{\textit{z}}}x} \right]}_j} + {{\left[ {{U_{\textit{z}}}{h_{ < t - 1 > }}} \right]}_j}} \right)$

其中,

${\widetilde {{h_j}}^{ < t > }} = \phi \left( {{{\left[ {Wx} \right]}_j} + {{\left[ {U\left( {r \odot {h_{ < t - 1 > }}} \right)} \right]}_j}} \right)$ (3)

在式(3)中, 当重置门接近0时, 隐藏状态仅重置当前的输入并强制移除之前的状态, 这能有效地阻止无关的信息. 另一方面, 更新门控制多少之前的隐藏状态信息继续留存到当前的隐藏状态, 这和LSTM网络中的记忆细胞很像, 并帮助RNN记忆长期的信息[10]. 每一个隐藏单元都有独立的重置门和更新门, 并学习到长时记忆和短时记忆. 隐藏单元因重置门被频繁的激活而学习到短时记忆, 因更新门被频繁激活而学习到长时记忆, 所以GRU很适合作为文本摘要模型的神经元.

2 Attention机制

Sequence2Sequence模型对输入序列X缺乏区分度, 因此引入了Attention Mechanism来解决这个问题, 总体模型结构如图2所示.

在以往的Attention模型中, 只采用了Bidirectional-RNN[11], BRNN对上下文信息是有效的, 但是无法提取文本的高维特征, 所以本文引入了CNN[12], CNN的详细设计见本文的第3节, 将CNN的输出按照式(4)的方式拼接起来.

$h = \left[ {\begin{array}{*{20}{c}} {{n_i}} \\ {\overleftarrow {{h_i}} } \\ {\overrightarrow {{h_i}} } \end{array}} \right]$ (4)

在该模型中, 按照式(5)定义了一个条件概率.

$p\left( {{y_i}|{y_1}, \cdots ,{y_{i - 1}},x} \right) = g\left( {{y_{i - 1}},{s_i},{c_i}} \right)$ (5)

其中, si是Decoder中RNN在i时刻的隐状态, 如图2所示, 其计算公式如式(6)所示.

${s_i} = f\left( {{s_{i - 1}},{y_{i - 1}},{c_i}} \right)$ (6)
图 2 Attention Mechanism模型

这里的语义向量ci的计算方式, 与传统的Sequence2-Sequence模型直接累加的计算方式不一样, 这里的ci是一个权重化(weighted)之后的值, 其表达式如式(7)所示.

${c_i} = \sum\limits_{j = 1}^{{T_x}} {{\alpha _{ij}}{h_j}} $ (7)

其中, i表示Encoder端的第i个词, hj表示Encoder端的第j个词的隐向量, αij表示Encoder端的第j个词与Decoder端的第i个词之间的权值, 表示源端第j个词对目标端第i个词的影响程度, αij的计算公式如式(8)所示.

$ {\alpha _{ij}} = \frac{{\exp \left( {{e_{ij}}} \right)}}{{\displaystyle\sum\nolimits_{k = 1}^{{T_x}} {\exp \left( {{e_{ik}}} \right)} }} $

其中,

${e_{ij}} = a\left( {{s_{i - 1}},{h_j}} \right)$ (8)

在式(8)中, αij是一个Softmax模型输出, 概率值的和为1. eij表示一个对齐模型, 用于衡量Encoder端的位置j的词, 对于Decoder端的位置i的词的对齐程度(影响程度), 换句话说: Decoder端生成位置i的词时, 有多少程度受Encoder端的位置j的词影响. 以往的对齐模型eij的计算方式如式(9)所示[6]. 为了方便讨论, 对齐模型的表示如图2中的Match框所示.

$score\left( {{h_t},\overline {{h_s}} } \right) = \left\{ \begin{array}{l} h_t^T\overline {{s_{t'}}} \\ h_t^T{W_a}\overline {{s_{t'}}} \\ v_a^T\tanh \left( {{W_a}\left[ {{h_t};\overline {{s_{t'}}} } \right]} \right) \end{array} \right.$ (9)

但是本文在隐藏层增加了CNN的输出, 以往的对齐模型已不完全适用, 所以本文应用神经网络重新设计了对齐模型.

3 CNN

本文将卷积神经网络CNN应用到中文文本摘要任务, 图2中的CNN的详细设计如图3所示.

图 3 CNN模型

CNN利用3个不同Size的Kernel来提取句子中的关键信息(类似于多窗口大小的N-Gram)[13], 从而能够更好地捕捉局部相关性.

TextCNN模型最大的缺陷是全局的Max Pooling无法提取文本的结构信息, 所以文本中的转折、递进等复杂的语义关系无法被TextCNN发现. TextCNN只能知道文本的关键词是否出现了, 而无法获知关键词出现的顺序和出现的次数. 针对这个问题, 本文采用k-Max Pooling[14]做一些优化, k-Max Pooling针对每个卷积核都不只保留最大的值, 而是保留前k个最大值, 并且保留这些值出现的顺序, 也即按照文本中的位置顺序来排列这k个最大值, 其在比较复杂的文本上相对于Max Pooling会有所提升. k的取值见表1.

表 1 不同参数的TextCNN

同时为了更多的提取文本的高维特征, 本文增加了Filter的数量, 具体参数见表1. 本文为了找到最佳的Filter-Size参数, 按照表1设计了两种Size的Kernel来训练模型. 此外, 为了减少CNN的参数, 本文对1到T时刻的CNN采用参数共享的方法来训练模型.

为了验证上述的改进对模型精度的影响, 本文按照表1, 分别使用CNN-1和CNN-2的参数训练模型, 并分析生成摘要的质量.

4 NN-Attention

图2中的Match框抽象提取出来, 如图4所示. 其中h为Encoder的隐藏状态, s为Decoder的隐藏状态, α为输出的数值.

图 4 Match示意图

因为本文的引入了CNN, 所以传统的对齐模型已不再适用. 为了提取长句的高维特征, 本文采用神经网络对Match进行了重新设计, 具体是全连接神经网络, 如图5所示.

图 5 全连接神经网络示意图

该结构对 ${{x}}_{{{{n}}}-1}$ 层和 ${{x}}_{{{{n}}}}$ 层而言, ${{x}}_{{{{n}}}-1}$ 层的每一个节点都和第 ${{x}}_{{{{n}}}}$ 层所有节点有连接. 即第 ${{x}}_{{{{n}}}}$ 层的每个节点在进行计算的时候, 激活函数的输入是 ${{x}}_{{{{n}}}-1}$ 层所有节点的加权. 由于引入了CNN, 所以神经网络要按照式(10)输入.

$Input = \left[ {h \oplus s} \right]$

其中,

$\begin{split} & h ={\left[ {\overleftarrow {{h_1}} \cdots \overleftarrow {{h_i}} \cdots \overleftarrow {{h_T}} } \right]^{ T}} \oplus {\left[ {\overrightarrow {{h_1}} \cdots \overrightarrow {{h_i}} \cdots \overrightarrow {{h_T}} } \right]^{ T}}\oplus {\left[ {{n_1} \cdots {n_i} \cdots {n_T}} \right]^{ T}} \\ & s = \left[ {{s_1} \cdots {s_i} \cdots {s_{T'}}} \right] \end{split} $ (10)

为了保证α为一个数值, 本文的NN-Attention最后一层的激活函数使用Sigmoid函数[15]. 为了找到最佳的对齐网络, 本文设计了两层模型, 并用不同的参数训练模型, 具体参数如表2所示.

表 2 不同NN-Attention的参数

5 实验 5.1 数据集

本文数据集采用的是CSTSD数据集[16], 数据来源于新浪微博主流媒体(头条新闻、环球网、人民网等)发布的微博约68万数据, 本文按照8:1:1的比例切分训练集、验证集、测试集.

5.2 数据预处理

(1) 去掉无效字符, 如表情、日期、链接、数字等.

(2) 长度限制, 正文的长度规定为25到250字, 摘要长度规定为8到35字.

$\begin{split} &Lengt{h_{\rm {text}}} \in \left( {25,250} \right)\\ &Lengt{h_{\rm {label}}} \in \left( {8,35} \right) \end{split}$ (11)

(3) 相似度过滤, 当正文和摘要有6个相同的字时, 本文认为该数据符合条件.

$Count\left( {{T_{\rm {text}}} \cap {T_{\rm {label}}}} \right) > 6$ (12)
5.3 训练

本文引入词嵌入解决矩阵稀疏性问题, 将输入文本映射为300维的向量. 首先根据词频统计选取出现频率最高的词汇为ENCODER和DECODER各定义一个词汇表, 在本文中设置为60 000, 没在词汇表中的词都转换成一个“Unknown”字符, 然后在训练期间学习词嵌入的权重.

将新闻和摘要同时输入到Sequence2Sequence模型中, 其中新闻对应Encoder, 摘要对应Decoder. 整个输入编码和解码的过程中, 按照式(13)使用梯度优化算法以及最大似然条件概率为损失函数去进行模型的训练和优化.

$\mathop {\max }\limits_\theta \frac{1}{N}\displaystyle\sum\limits_{n = 1}^N {\log {p_\theta }\left( {{y_n}|{x_n}} \right)} $ (13)

其中, θ为模型的参数, N为训练集的样本个数, (yn, xn)是相应的输出和输入的序列[3].

本文使用TensorFlow[17]构建模型, 模型的主要参数见表3.

表 3 模型的主要参数

5.4 推理——如何生成摘要

当模型训练完成后, 可以得到之前模型没见过的源文章的摘要, 这个过程称为推理. 在推理时, 我们只能访问源句子, 执行解码有很多种方法. 本文采用Beam Search (束搜索)[18]解码, Beam Search在做摘要时总是将一小部分顶级候选词留在周围, 从而在搜索空间更好地探索所有可能的词汇. Beam的大小称为宽度, 在本文中设置为12. 同时本文对生成的摘要的质量采用ROUGE[19]评估中的ROUGE-1, ROUGE-2和ROUGE-L的F1值进行评估.

5.5 采用不同的TextCNN参数和不同的FNN参数来训练模型

采用如表1所示的改进前后两种不同的TextCNN参数来训练网络, 模型训练的Loss如图6所示.

图6可以看出, CNN-2的Loss刚开始下降没有CNN-1快, 但是最终的Loss比CNN-1要小. 训练之后用应用Beam Search对测试集的文本进行推理, 并计算ROUGE得分, 本文以Sequence2Sequence与Attention的模型作为基线模型, 计算后的得分如表4所示.

图 6 改进前后的TextCNN的Loss曲线

表 4 CNN不同Size的参数的ROUGE F1得分

表4可以看出, 对文本摘要的问题, 在模型引入CNN后, 模型的性能有了提升. 模型虽然有了提升, 但是引入CNN后, 模型的参数增加很多, 传统的基于矩阵变换的注意力机制已经不能很好地表征这个模型, 所以本文引入了NN-Attention, 按照表2的参数来训练模型, 并使用CNN-2的模型来训练, 训练的Loss如图7所示.

图 7 多种NN-Attention参数的Loss曲线

训练之后运用Beam Search对测试集的文本进行推理, 并计算ROUGE得分, 这里以CNN-2的模型作为基线模型, 计算后的得分如表5所示.

表 5 不同NN-Attention的参数的ROUGE F1得分

表5可以看出, 对文本摘要的问题, 在模型引入NN-Attention后, 模型的性能有了较大的提升. 虽然NN-Attention-3模型的损失最小, 但是NN-Attention-2模型取得了最好的成绩. 说明NN-Attention-2模型最适合作为本文提出的NN-Attention模型的网络, NN-Attention-3模型存在过拟合问题.

5.6 案例分析

从测试集前10条中随机取4条, 给出测试结果如表6.

表 6 测试结果示例

6 结论

本文首先对现有Attention机制对文本摘要问题研究的缺点做了分析, 在以往的Attention模型中, 只采用了Bidirectional-RNN, BRNN对上下文信息是有效的, 但是无法提取文本的高维特征, 所以本文引入了CNN. 因为本文的引入了CNN, 所以传统的对齐模型已不再适用, 本文将Attention模型改进, 提出了NN-Attention以解决这个问题. 之后详细描述了GRU、Attention机制、CNN、NN-Attention, 为了寻找最佳的参数, 本文使用多种参数对模型进行训练, 通过计算ROUGE得分, 给出了最佳模型. 最后给出了测试结果, 从测试结果可以看出, 生成的摘要比之前的模型有所进步, 但是就准确性与可读性而言, 生成的摘要还有待提高, 生成式摘要的算法是一个持续性的研究课题.

参考文献
[1]
胡侠, 林晔, 王灿, 等. 自动文本摘要技术综述. 情报杂志, 2010, 29(8): 144-147. DOI:10.3969/j.issn.1002-1965.2010.08.034
[2]
张敏, 曾碧卿, 韩旭丽, 等. DAPC: 结合双注意力和指针覆盖的文本摘要模型. 计算机工程与应用. http://kns.cnki.net/kcms/detail/11.2127.TP.20190411.1719.018.html, 2019-12-27.
[3]
Sutskever I, Vinyals O, Le QV. Sequence to sequence learning with neural networks. Proceedings of the 27th International Conference on Neural Information Processing Systems. Cambridge, MA, USA. 2014.3104–3112.
[4]
Rumelhart DE, Hinton GE, Williams RJ. Learning representations by back-propagating errors. Nature, 1986, 323(6088): 533-536. DOI:10.1038/323533a0
[5]
Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate. arXiv: 1409.0473, 2014.
[6]
Luong MT, Pham H, Manning CD. Effective approaches to attention-based neural machine translation. arXiv: 1508.04025, 2015.
[7]
White BW, Rosenblatt F. Reviewed Work: Principles of Neurodynamics: Perceptrons and the theory of brain mechanisms by Frank Rosenblatt. The American Journal of Psychology, 1963, 76(4): 705-707. DOI:10.2307/1419730
[8]
Hochreiter S, Schmidhuber J. Long short-term memory. Neural Computation, 1997, 9(8): 1735-1780. DOI:10.1162/neco.1997.9.8.1735
[9]
Dey R, Salemt FM. Gate-variants of gated recurrent unit (GRU) neural networks. 2017 IEEE 60th International Midwest Symposium on Circuits and Systems (MWSCAS). IEEE, 2017. 1597–1600.
[10]
Cho K, Van Merrienboer B, Gulcehre C, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv: 1406.1078, 2014.
[11]
Schuster M, Paliwal KK. Bidirectional recurrent neural networks. IEEE Transactions on Signal Processing, 1997, 45(11): 2673-2681. DOI:10.1109/78.650093
[12]
Krizhevsky A, Sutskever I, Hinton GE. ImageNet classification with deep convolutional neural networks. Proceedings of the 25th International Conference on Neural Information Processing Systems. Lake Tahoe, NV, USA. 2012. 1097–1105.
[13]
Kim Y. Convolutional neural networks for sentence classification. arXiv: 1408.5882, 2014.
[14]
Shu B, Ren FJ, Bao YW. Investigating Lstm with k-max pooling for text classification. Proceedings of the 11th International Conference on Intelligent Computation Technology and Automation (ICICTA). Changsha, China. 2018. 31–34.
[15]
Han J, Moraga C. The influence of the Sigmoid function parameters on the speed of back propagation learning. Proceedings of 1995 International Workshop on Artificial Neural Networks. Malaga-Torremolinos, Spain. 1995. 195–201.
[16]
He ZF. 中文短文本摘要数据集. https://www.jianshu.com/p/8f52352f0748. (2018-06-20)[2019-07-01].
[17]
Google. TensorFlow. https://tensorflow.google.cn/. [2019-07-11].
[18]
Xiao XEY. Beam Search (集束搜索/束搜索). https://www.cnblogs.com/xxey/p/4277181.html. (2019-06-05)[2019-07-11].
[19]
Lin CY. ROUGE: A package for automatic evaluation of summaries. Proceedings of the Workshop on Text Summarization Branches Out (WAS 2004). Barcelona, Spain. 2004. 74–81.