欢迎访问宙启技术站
智能推送

使用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计算中文文本的相似度,通过加载预训练的词向量模型,计算文本的词向量并使用余弦相似度来衡量它们之间的相似度。