Word2Vec
词向量可以用于测量单词之间的相似度,相同语义的单词,其词向量也应该是相似的。对词向量做降维并可视化,可以看到如下图所示的聚类效果,即相近语义的词会聚在一。
文本或句子相似度问题,可以把句子中每个单词的词向量简单做一个平均,得到的向量作为整个句子的向量表示,再利用余弦相似度计算句子的相似度。
代码实现
训练词向量模型请参考:使用GloVe训练中文词向量
import numpy as npfrom gensim.models import KeyedVectorsfrom sklearn.metrics.pairwise import cosine_similarity# 加载词向量模型model = KeyedVectors.load_word2vec_format(r'E:\vectors.txt',binary=False,encoding="gbk")# 对句子中的每个词的词向量简单做平均 作为句子的向量表示def wordavg(model,words): return np.mean([model.get_vector(word) for word in words],axis=0)s1 = "今天是个好日子"s2 = "好日子就在今天"s1_list = jieba.lcut(s1, cut_all=True) # jieba分词s1_list = jieba.lcut(s2, cut_all=True) # jieba分词s1_avg = wordavg(model,s1_list) # s1的向量表示s2_avg = wordavg(model,s2_list) # s2的向量表示print(cosine_similarity(s1_avg.reshape(1,-1),s2_avg.reshape(1,-1))) # 计算s1、s2向量的余弦相似度