xjtukuixing 2019-04-17
文章的表示具有不同的层次,由粗到细可分为类型(分类)、事件(主题)、代表词(关键词)等,关键词是文章表示的重要环节。文本的关键词可以被认为“浓缩”了整篇文章的主旨和要义,是一篇文章高度概括的自然语言表示形式。更加精准的文本关键词,可以为后续推荐系统带来更精准的文本内容特征、召回更高质量的同类型文章;同时,高质量的关键词也可以作为分类标签直接用于内容运营和用户推荐,提升编辑和运营同事的工作效率。
文本关键词提取问题吸引了大量研究者的关注。从最简单的TF-IDF计算词语权重,到TextRank和LDA等无监督的方法,再到目前广泛使用的Seq2Seq等神经网络模型,无一不在关键词提取领域有着众多实践和探索。
在公司内部的电竞和游戏中心等综合类游戏产品中都沉淀了大量的游戏攻略、新手指引、晋级指南等多种不同类型的游戏文本,如何将合适的游戏文本打上正确的关键词标签,并将内容推送给恰当的用户成为一个重要的课题。
我们在游戏文本关键词提取工作的探索中,尝试了基于图的无监督方法TextRank和基于有监督的Seq2Seq神经网络方法,并针对两种方法的表现做了初步的比较。
基于神经网络的有监督方法通常需要一定数量的标注数据才能学到较好的参数。为满足神经网络训练的需求,结合项目和数据的实际情况,我们在手机QQ平台的游戏中心中收集了约3万余条带分类和标签的游戏文本,经过相似文本去重、低质量文本过滤等处理,最终得到了24000条数据样本。该份语料的文本长度从几百到一千余字不等,每个样本带有3~6个人工标注的关键词,共有约9万余个<文本,关键词>对;语料包含新手指引、晋级指南、游戏介绍等不同内容的文本,并涵盖了王者荣耀、天天炫斗、全民斗战神、天天快跑等热门游戏。实验将24000余条文本随机划分为20000条的训练集、2000条的验证集和2000条的测试集;在预处理过程中,使用jieba工具对文本分词,并在分词前导入了游戏词汇相关的词典以提高分词的精度。
1、基于TextRank的游戏文本关键词提取方法
TextRank算法的思想直接借鉴了PageRank网页排序算法,使用在K长度窗口中词的相邻关系来代表PR算法中的链接指向关系,与PageRank的迭代公式完全相同,即
。其中,
是i的重要性权重,
是指向该词的词集合,
是指向该词的词集合,该公式通过迭代完成计算,最后将每个词的重要性权重逆向排序即为词的重要性排序。
基于TextRank的方法简单有效,速度也在可接受的范围内。但这一方法存在两个较为明显的不足:
1、关键词的来源有限,仅为本篇文档所有词汇的集合,难以学习到更多的关键词表示,
也无法以“生成”的方式得到文章抽象的关键词表述。
2.、虽然TextRank考虑了关键词在给定距离窗口的共现等信息,但实际上仍然偏向于给高频词以更高的权重,所以在实际使用中与TF-IDF这类方法相比没有太大的优势。
TextRank思想简单,容易实现,在各类NLP工具包中都有可以直接调用的模块,如基于Python的jieba,基于Java的Hanlp等。
2、 Seq2Seq的背景
Seq2Seq模型自被提出后,已经广泛应用于神经机器翻译、图片文字描述生成和文本摘要等领域。关键词提取与文本摘要任务一脉相承,也已有学者使用各类神经网络模型在这一任务中做了各种尝试。
Seq2Seq模型又常被称作Encoder-Decoder模型,其中的两个Sequence分别对应Encoder(编码器)和Decoder(解码器)两个部分,Encoder和Decoder通常为普通的RNN单元构成,或者是LSTM单元和GRU单元。而基于CNN或其他网络结构的Seq2Seq不在本文的讨论之列。典型的Seq2Seq模型如下图1所示。
图1 Encoder-Decoder模型示意图
在图1中,下框部分为Seq2Seq模型的编码器Encoder,
为源序列的输入,在关键词抽取中对应为源文本;上框部分为Seq2Seq模型的Decoder解码器,
为解码器的输出,对应关键词的输出。以关键词提取为例,每个时间步的输出向量y都将会与一个softmax相连,以计算词表中每一个词的概率(由于语料中词表过大,计算每一个词通常会有计算复杂度过高的问题,有很多学者提出改进方案着手解决这一问题,如https://arxiv.org/pdf/1412.2007.pdf)。
由上图Encoder框内部分可以看到,
,即每个时间步计算得到的隐藏层向量
为前一个隐藏层输出
和当前时间步输入
共同作用的结果。而Decoder部分接受的输入向量c(图1)来自Encoder部分的输出向量,一般为Encoder最后一个时间步的隐藏层输出
,在某些工作中也有可能是若干隐藏层向量的组合或者函数变换,即为
。而Decoder部分的隐藏层状态向量计算方式为
,即对于每一个时间步的隐藏层
,都使用同样长度的同一个c来计算。Decoder部分输出向量
的计算同样依赖于来自Encoder同样的信息,如图1所示,这一信息依然是同一个c。
由上述讨论可以看出,一般来讲,在文本摘要、机器翻译等工作中,Decoder部分接受的来自源文本的输入信息仅为一个固定长度的向量c(即便输入的文本非常长),由一个固定长度的向量去解码为译文或者关键词摘要的信息,通常会带来较大的性能损失。Bahdanau于2014年提出的attention机制便可以较好的解决这一问题,并在随后的两三年中,在翻译、摘要、关键词提取、图片文本生成乃至情感分析领域都得到了广泛的应用。
基于attention机制的Seq2Seq模型在Encoder编码部分与传统模型并无二致,attention机制的关注点主要集中在Decoder部分,如图2所示。该图的下半部分为Seq2Seq的Encoder部分,当然从图中看,这里的Encoder与图1相比,多了一个双向RNN的部分。这样做的缘由是使网络能够从两个方向共同学到信息,与attention并无关联。
图2 带有attention机制的Seq2Seq模型
与普通Seq2Seq模型相同的是,图2中的模型也会在Decoder阶段读入来自Encoder的c,但是这个c并不是简单由Encoder最后一个隐藏层节点的值再做函数变换而来,而是通过读取Encoder每一个时间步的隐藏层节点状态并加权求和得到。如下公式所示。
结合公式和图2可以清晰的看出,
对应Decoder的t时刻中、来自编码器Encoder
时刻输入的权重,通过线性加权求和,就可以得到
,即t时刻Decoder中接受Encoder向量的部分。由图2可知,这时Decoder部分的隐藏层状态向量
的计算方式为
。
而公式中的
,由语料经训练得到,并通过一个归一化公式将解码器t时刻来自不同
的权重
之和归为1。
2、基于Copying机制的Seq2Seq-attention模型
上述基于attention的模型在机器翻译、智能问答和文本摘要等多项任务中取得了广泛的应用。然而,对于文本摘要、关键词抽取和智能问答等任务来说,Decoder部分的设计仍然难以避免部分缺憾。
以关键词提取为例,解码器Decoder部分每一个时间步都会产生一个词汇,这个词汇经过softmax计算得出,而词汇的来源则是一个大小为n的词表
。从计算时间成本的角度考虑,这个词表通常不会包含训练集中所有的词汇,训练集中的大量低频词汇只能统一用UNK代替;另一方面,测试集中的词不一定完全在训练集中出现过,当然也未必会在可预测的词表V的范围内。这就带来了一个问题——在文本摘要、关键词提取中常被称为OOV(out of vocabulary)问题。由于OOV的这一现象,当新的测试语料中包含一些重要的词表外(OOV)词汇时,那么无论是提取关键词还是生成摘要,这些重要的OOV词汇只能被预测为UNK。
谈完OOV问题给Seq2Seq模型带来的缺憾,下面说回Copying机制。如果让人类去做文档摘要或者关键词的提炼,他不仅会使用自己的背景知识和过去学到的东西来写这一份摘要,而且会从原文中“照抄”或者“摘录”一部分重要的文字。我们对照机器的摘要(关键词提取)工作,传统模型往往仅利用在训练语料中学到的参数,在生成的时候,逐个预测某一个位置应当选择词表中的哪一个词;若原文中几个重要的关键词并不在词表中,那么很遗憾,这些词没有机会生成在关键词列表中。Jiatao gu等人借鉴人类“照抄”、“拷贝”的形式,在Seq2Seq with attention模型中引入了Copying机制,很大程度的改善了OOV问题对关键词抽取和摘要工作带来的影响。这一网络模型在Encoder部分同样是一个传统的形式,并没有变化;但是在Decoder解码器部分,增加了很多关于Copying机制的计算,如图3所示。
图3 带有Copying机制的Seq2Seq模型
由图3可以看出,Decoder部分该模型在隐藏层状态向量
的更新和
的预测上都与之前的模型有明显不同。如图3的右下方所示,State Update的过程可以很明显的分为这么几个部分:第一部分是左侧蓝色箭头实线,这是来自attentive read的信息,也就是我们通常说的attention信息
;第二部分是
的部分,也与之前的attention模型相同;但是第三部分
的信息,并不仅仅使用上一时间步产出结果的embedding,还与一个selective read向量拼接,这个向量事实上是通过一个与注意力机制类似的方式计算得到,计算解码器该位置与编码器各个时间步隐藏层状态的位置相关信息,为接下来的Copy-Mode提供信息。
图3的右上方Generate-Mode和Copy-Mode是生成关键词文本的两个概率计算公式。左侧的Generate-Mode与经典模型的生成方式相同;而Copy-Mode则计算从源序列中生成各个单词的概率,两个概率相加即为
位置的目标词的概率,如公式所示。
注意,公式中的g和c分别代表两个生成方式。而g和c的计算方式与生成的词
和两个词表V、X(源文本词表)的关系有关,原文中的Figure2有清晰描述,这里不再赘述。
由以上的描述可知,一篇文本中的重要关键词如果不是整个训练集的高频词,不在词表Vocabulary中,那么在传统attention-Seq2Seq束手无策的情况下,Copying机制可以通过直接从原文中“拷贝”,较好的解决这个问题。同时,作为经典的生成模型,它与Textrank等方法相比,又增加了很多从成千上万篇训练语料中学习的知识,可以很好的平衡“抽取”和“生成”两种模型的优点。
下面以一个简单的示例结束这篇文章。
Sample:《王者联盟》5V5王者峡谷三路推塔激情博弈<eos>在《王者联盟中》,5v5对战备受众多玩家喜爱,玩家可自行匹配,也可邀好友一起开黑。在5v5对战中不是个人秀操作就能掌控全场,更多的需要团队之间进行默契配合。合理的阵容搭配,明确的战场分工,玩家对英雄的操作技巧……(节选)
GroundTruth:5v5王者峡谷;王者联盟;新手
Seq2Seq with Copying Mechanism(Top5)
TextRank(Top5)
1. 王者学院
英雄
2. 王者联盟
2. 敌方
3. 5v5王者峡谷
3. 击杀
4. 新手
4. 队友
5. 5v5王者联盟
5. 发育
2. 敌方
3. 击杀
4. 队友
5. 发育
经过测试集测试可知,基于DNN的Seq2Seq方法比TextRank的P1@5高出4%,R1@5高出8%,F1@5高出5.4%,初步证明了这一方法的有效性。
接下来,仍需要从数据和模型两个层面进一步提升关键词提取的表现,也可以考虑从多模型结果ensemble的角度去增加结果的鲁棒性。
原文发布于微信公众号 - 腾讯文曲星(tencent_wisdom)