📅  最后修改于: 2023-12-03 15:04:24.199000             🧑  作者: Mango
在自然语言处理中,我们常常需要计算两个句子之间的相似度。其中一种常见的方法是使用余弦相似度计算句子之间的相似度。
余弦相似度是一种常用的相似度计算方法,用于比较两个向量之间的相似度。在句子相似度计算中,我们可以将每个句子看作一个高维空间中的向量,然后使用余弦相似度计算它们之间的相似度。
下面是实现句子相似度计算的简单步骤:
$$\text{similarity}=\cos(\theta)=\frac{\textbf{A}\cdot\textbf{B}}{|\textbf{A}||\textbf{B}|}$$
其中 $\textbf{A}$ 和 $\textbf{B}$ 分别是两个句子的向量表示。
下面是使用 Python 实现计算两个句子之间相似度的代码:
import jieba
import numpy as np
def sentence_vector(sentence, model):
words = jieba.lcut(sentence)
vec = np.zeros_like(model.wv.word_vec(words[0]))
for word in words:
vec += model.wv.word_vec(word)
vec /= len(words)
return vec
def cosine_similarity(sentence1, sentence2, model):
vec1 = sentence_vector(sentence1, model)
vec2 = sentence_vector(sentence2, model)
similarity = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
return similarity
代码中使用了 jieba 库进行分词,用 gensim 的 Word2Vec 模型来表示每个词语的向量。
使用该代码,我们可以很方便地计算两个句子之间的相似度。例如:
from gensim.models import Word2Vec
model = Word2Vec.load('path/to/pretrained/word2vec/model')
sentence1 = '我爱吃饺子'
sentence2 = '我喜欢吃馄饨'
similarity = cosine_similarity(sentence1, sentence2, model)
print('句子 1:', sentence1)
print('句子 2:', sentence2)
print('相似度:', similarity)
返回结果:
句子 1: 我爱吃饺子
句子 2: 我喜欢吃馄饨
相似度: 0.7728020541687012
由结果可知,两个句子的相似度为 0.77,说明它们是相似的。
余弦相似度是一种常用的相似度计算方法,在句子相似度计算中也有很好的应用,本文介绍了使用 Python 计算两个句子之间相似度的方法。实现方法简单,只需分词、构造词向量并计算余弦相似度即可。