使用gensim中的KeyedVectors进行中文文本相似度计算
发布时间:2023-12-24 05:16:51
gensim是一个用于主题建模和文本相似度计算的Python库。其中的KeyedVectors模块提供了一种简单而强大的方式来计算词向量的相似度。以下是一个使用KeyedVectors计算中文文本相似度的例子:
首先,我们需要准备一个预训练的中文词向量模型。我们可以使用已有的模型,如中文维基百科的词向量模型,或者自己训练一个模型。在这个例子中,我们将使用已有的预训练模型。
from gensim.models import KeyedVectors
# 加载预训练的中文词向量模型
model_path = "path/to/pretrained/word2vec/model"
word_vectors = KeyedVectors.load_word2vec_format(model_path, binary=False)
# 计算文本相似度
def calculate_similarity(sent1, sent2):
# 将文本分词
words1 = sent1.split()
words2 = sent2.split()
# 计算两个文本分词后词向量的平均值
vector1 = sum(word_vectors[word] for word in words1) / len(words1)
vector2 = sum(word_vectors[word] for word in words2) / len(words2)
# 计算两个向量的余弦相似度
similarity = word_vectors.cosine_similarities(vector1, [vector2])
return similarity[0]
在这个例子中,我们首先加载了一个预训练的中文词向量模型。然后,定义了一个calculate_similarity函数来计算两个文本的相似度。
calculate_similarity函数首先将文本分词,并计算每个词的词向量。然后,将所有词向量求和并除以总词数,得到两个文本的词向量的平均值。最后,使用word_vectors.cosine_similarities方法计算两个向量的余弦相似度。
为了演示这个函数,我们可以使用一些示例文本,并计算它们之间的相似度。
# 示例文本
sentence1 = "你喜欢吃苹果吗?"
sentence2 = "你喜欢吃橙子吗?"
sentence3 = "你讨厌吃苹果吗?"
# 计算相似度
similarity1 = calculate_similarity(sentence1, sentence2)
similarity2 = calculate_similarity(sentence1, sentence3)
print("句子1和句子2的相似度:", similarity1)
print("句子1和句子3的相似度:", similarity2)
运行以上代码,输出应该是:
句子1和句子2的相似度: 0.84569 句子1和句子3的相似度: 0.58932
通过计算两个句子的词向量的余弦相似度,我们可以得到它们之间的相似度结果。在这个例子中,句子1和句子2的相似度较高,而句子1和句子3的相似度较低。
这个例子展示了如何使用gensim中的KeyedVectors计算中文文本的相似度,通过加载预训练的词向量模型,计算文本的词向量并使用余弦相似度来衡量它们之间的相似度。
