2016.7.30-----------------------------------------------看了知友们的答案,我再补充一个结合word2vec和RNN来构造无监督式的句子特征学习模型。ps:本科毕业论文的一个子模块(E-LSTM-S),根据文献题目和文献摘要来衡量文本相似度。-----------------------------------------------在这里,首先给出模型在CiteUlike(文献分享数据集)上的结果。用E-LSTM-S得到每篇文献的文本特征后,可以简单地采用欧式距离计算文本相似度,示例如下:
其中A=>B表示跟A文献最为语义相关的是B文献,可以看到:
1. 200=>6091表明《Learning to cluster web search results》和《Web Document Clustering: A Feasibility Demonstration》两篇文献具有相近的语义,从标题上也可以直观地判断它们都跟“web clustering”相关。
2. 6091=>5282表明《Web Document Clustering: A Feasibility Demonstration》和《A personalized search engine based on web-snippet hierarchical clustering》两篇文献也具有相近的表达,同样跟“web clustering”相关。
3. 200=>6091、6091=>5282这个组合表明,跟“web clustering”语义相关的文档将构成一类(类似聚类)。
-----------------------------------------------那么,实现的过程如何呢?(这里需要先了解RNN的结构以及如何使用词嵌入embedding-layer)模型框架如下:
其中,ABCDE...为(词序列构成的)句子,A*B*C*D*E*...同样为相同句子。模型的核心就是通过编码-中间表示-解码的形式来学习每个句子的向量表示,从而可以用距离来衡量句子相似性。需要说明的是,有两种方式可以用来表示每个词的词向量(实验时选1):1.采用one-hot vector,定义embedding layer,word2vec作为其初始参数,训练时进行fine-tune。2.直接采用word2vec作为词向量,即在训练过程中不改变每个词的词向量。接下来,就涉及到了红色虚线处的Encoder-Decoder结构了,细节如下:
其中,上半部分是Embedding,下半部分则是RNN(LSTM)。具体应用时,将词向量表示依次输入RNN的每一时间步,综合词语义和词顺序的影响,将其编码成中间表示,再用Softmax解码。-----------------------------------------------当然,最好采用End-to-End(端到端)的方式直接生成句子的中间特征表示(E-LSTM-S是对每一时间步的隐层输出取平均),可以参考用于机器翻译、邮件回复的seq2seq模型。这里我给出几篇文献供大家阅读。
Sequence to Sequence Learning with Neural Networks
Effective Approaches to Attention-based Neural Machine Translation
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
此外,也可尝试使用CNN替换以上的RNN,目前CNN在文本处理上也有不少研究了。
A Convolutional Neural Network for Modelling Sentences
Convolutional Neural Networks for Sentence Classification
A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification
-----------------------------------------------
ps:不严谨之处,请NLP大牛勿见怪
领取专属 10元无门槛券
私享最新 技术干货