Wrod2vec计算句子相似度实战_3分钟热情学NLP第7篇

12 篇文章 0 订阅
11 篇文章 0 订阅

3分钟热情学NLP第7篇,Wrod2vec计算句子相似度实战

方法1,计算句子中各个词向量,得出句子的平均值

1、使用jieba分词,得出该句子包含的词;
2、计算每个词的词向量;
3、求得该句子的平均值
4、采用余弦值,计算各个句子的相似度;

输入:

import numpy as np
from scipy import spatial
import jieba

model = gensim.models.Word2Vec.load('word2vec_wx')
model_dimension = 256 #该模型的维度为256维

#采用jieba进行分词,分词后计算每个词的词向量,最后求平均值;
def avg_string_vector(sentence, model):
    words = jieba.cut(sentence)#默认jieba精确分词模式
    string_vec = np.zeros((model_dimension,), dtype='float32')#返回1个"1*256",元素为0的数组;
    num_words = 0 #该句话中词语的个数,初始值为0
    for word in words:
        if word in model.wv:
            num_words += 1#计算出该句话中,词语的个数
            string_vec = np.add(string_vec, model.wv[word])#计算每个分词的词向量,并进行相加;

    if(num_words > 0):
        string_vec = np.divide(string_vec, num_words)#求平均值:将词向量相加后的和,除以分词的个数;
    return string_vec


s1 = '在微信公众号上写文章'
s2= '把文章发表在微信公众号上'
s3 = '在微信上发表文章'
s4 = '欢迎大家来到微信总部参观'
s1_vec = avg_string_vector(s1, model=model)
s2_vec = avg_string_vector(s2, model=model)
s3_vec = avg_string_vector(s3, model=model)
s4_vec = avg_string_vector(s4, model=model)

#计算余弦距离
sim12 = 1 - spatial.distance.cosine(s1_vec, s2_vec)
sim13 = 1 - spatial.distance.cosine(s1_vec, s3_vec)
sim14 = 1 - spatial.distance.cosine(s1_vec, s4_vec)


print('”'+ s1 +'“和”' + s2 +'“的相似度为:%.4f'%sim12)
print('”'+ s1 +'“和”' + s3 +'“的相似度为:%.4f'%sim13)
print('”'+ s1 +'“和”' + s4 +'“的相似度为:%.4f'%sim14)

输出

”在微信公众号上写文章“和”把文章发表在微信公众号上“的相似度为:0.9013
”在微信公众号上写文章“和”在微信上发表文章“的相似度为:0.8178
”在微信公众号上写文章“和”欢迎大家来到微信总部参观“的相似度为:0.6783

方法2,使用第6篇提到的WMD算法

第6篇:https://www.jianshu.com/p/39e0c9d35f6c

代码如下:

import gensim
import pyemd
model = gensim.models.Word2Vec.load('word2vec_wx')

s1 = '在微信公众号上写文章'
s2= '把文章发表在微信公众号上'
s3 = '在微信上发表文章'
s4 = '欢迎大家来到微信总部参观'

#使用WMD距离算法
distance12 = model.wv.wmdistance(s1, s2)
distance13 = model.wv.wmdistance(s1, s3)
distance14 = model.wv.wmdistance(s1, s4)

print('”'+ s1 +'“和”' + s2 +'“的相似度为:%.4f'%distance12)
print('”'+ s1 +'“和”' + s3 +'“的相似度为:%.4f'%distance13)
print('”'+ s1 +'“和”' + s4 +'“的相似度为:%.4f'%distance14)

输出:

”在微信公众号上写文章“和”把文章发表在微信公众号上“的相似度为:0.7265
”在微信公众号上写文章“和”在微信上发表文章“的相似度为:1.1910
”在微信公众号上写文章“和”欢迎大家来到微信总部参观“的相似度为:2.2488

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

13线

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值