首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何用 word2vec 计算两个句子之间的相似度?

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大牛勿见怪

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190718A0KJK100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券