使用word2vec计算词向量之间的相似度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用word2vec计算词向量之间的相似度相关的知识,希望对你有一定的参考价值。

通过word2vec计算词向量之间的相似度,发现两个函数similarity和most_similar计算出来的结果不一致,不知是怎么回事呢?
比如:通过 similarity计算张无忌和赵敏的相似度为: -1.0842e-19 ;
而通过most_similar计算赵敏和张无忌的相似度则为 0.9469258785247803 ;
感觉similarity计算出来的结果有误,可否指点一下?
用到的函数为(python):
print(model_1.similarity('张无忌', '周芷若') )
model_1.most_similar("张无忌", topn=10)

string为你需要获取向量的词,
double[] array = vec.getWordVector(string);
array是这个词的向量。
首先在创建vec的时候要保证.minWordFrequency(1),否则有些词你是得不到向量的,这个方法是设置词的最小使用频率。
参考技术A 科技大学怎么样

如何通过词向量技术来计算2个文档的相似度?

我正好是做记录文档匹配的,提供一个最简单的思路吧,计算两个向量的余弦或者jaccard相似度。即是比较两个向量相同的部分与总数之比,计算两个向量的编辑距离jaro距离或者仿射距离即是一个向量转换为另一个向量所需的最小插入删除更新等编辑操作次数,算出相似度之后,可以直接根据相似度判断是否相似,也可以利用knn分类器等分类方法判断相似与否,用deeplearning的话:短文本:拿word2vec开始,然后上面套CNN(如果n-gram更重要),或者LSTM做短文本的embedding,然后算两个文档在embeddingspace里的相似度。或者拿李航老师的Arc-II直接学word2vec之后的matching。

参考技术A

先不论这样定义的距离是否满足距离的性质(比如对称性),我们考虑这样的情况:文档1中每个词都跟“音乐”密切相关;文档2中只有一个词跟“音乐”密切相关,其余词都跟“音乐”完全无关;文档3中有一个词跟“音乐”密切相关,其他词都跟“音乐”有点关系但关联性不大。我们希望有,但只考虑匹配词对之间的距离和的话无法做到这一点,因为文档1中的所有词在文档2和文档3中都会被匹配到那个跟“音乐”密切相关的词上去,从而可能导致。所以我们希望通过某种约束,使得文档1中的每个词都会以不同权重被“强制性”地匹配到另一个文档的所有词上去。在上面关于“音乐”的例子里,由于文档2或3的所有词都会被匹配到,但文档3的词跟“音乐”更相关,我们便有希望得到。我们先把文档看成词的一个分布(比如使用归一化的词频特征)。首先考虑如何令“文档1中的每个词以不同权重匹配到另一个文档的所有词上”。如下图,很简单,我们允许“部分匹配”就可以了。这里我们把匹配看成是把文档1中的词“移动”到文档2中的词的一个过程,移动代价是两个词向量的Euclidean距离。比如说“Obama”在文档1中的权重(概率)是0.5,如果我把0.4移动到“President”、0.05移动到“greets”……等等,移动代价就是这里应该有个约束:把“Obama”分到文档2中词的权重的和应该等于它在文档1中的权重。

参考技术B

首先,如果不局限于NN的方法,可以用BOW+tf-idf+LSI/LDA的体系搞定,也就是俗称的01或onehotrepresentation。其次,如果楼主指定了必须用流行的NN,俗称word-embedding的方法,当然首推word2vec(虽然不算是DNN)。然后得到了word2vec的词向量后,可以通过简单加权/tag加权/tf-idf加权等方式得到文档向量。这算是一种方法。当然,加权之前一般应该先干掉stopword,词聚类处理一下。还有,doc2vec中的paragraphvector也属于直接得到doc向量的方法。特点就是修改了word2vec中的cbow和skip-gram模型。依据论文《DistributedRepresentationsofSentencesandDocuments》(ICML2014)。还有一种根据句法树加权的方式,是ICML2011提出的,见论文《ParsingNaturalScenesandNaturalLanguagewithRecursiveNeuralNetworks》,后续也有多个改编的版本。当然,得到词向量的方式不局限于word2vec,RNNLM和glove也能得到传说中高质量的词向量。ICML2015的论文《FromWordEmbeddingsToDocumentDistances,Kusner,WashingtonUniversity》新提出一种计算doc相似度的方式,大致思路是将词之间的余弦距离作为grounddistance,词频作为权重,在权重的约束条件下,求WMD的线性规划最优解。最后,kaggle101中的一个word2vec题目的tutorial里作者如是说:他试了一下简单加权和各种加权,不管如何处理,效果还不如01,归其原因作者认为加权的方式丢失了最重要的句子结构信息(也可以说是词序信息),而doc2vec的方法则保存了这种信息。在刚刚结束的ACL2015上,似乎很多人提到了glove的方法,其思想是挖掘词共现信息的内在含义,据说是基于全局统计的方法(LSI为代表)与基于局部预测的方法(word2vec为代表)的折衷,而且输出的词向量在词聚类任务上干掉了word2vec的结果。

以上是关于使用word2vec计算词向量之间的相似度的主要内容,如果未能解决你的问题,请参考以下文章

如何通过词向量技术来计算2个文档的相似度?

python gensim使用word2vec词向量处理英文语料

python gensim使用word2vec词向量处理中文语料

Gensim Word2vec:语义相似度

词向量:GloVe

如何使用 gensim 的 word2vec 模型与 python 计算句子相似度