首页  >  文章  >  后端开发  >  如何在不使用外部库的情况下计算两个句子之间的余弦相似度?

如何在不使用外部库的情况下计算两个句子之间的余弦相似度?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 08:20:30839浏览

How can I calculate cosine similarity between two sentences without using external libraries?

计算句子字符串的余弦相似度

余弦相似度是两个向量之间相关性的度量。在文本处理的背景下,它可以用来确定两个句子之间的相似度。要在没有外部库的情况下计算两个字符串的余弦相似度,请按照以下步骤操作:

  1. 对字符串进行标记: 将每个字符串分解为单独的单词,称为标记。
  2. 创建词向量:对于每个字符串,创建一个字典(向量),其中键是唯一单词,值是这些单词的频率。
  3. 计算点积: 通过对相应元素的乘积求和来计算两个向量的点积。
  4. 计算幅度: 通过对每个向量的所有元素求平方和求和来找到每个向量的幅度,然后取平方根。
  5. 归一化:将点积除以幅度的乘积以获得归一化余弦相似度。

一个简单的 Python 实现:

<code class="python">import math
import re
from collections import Counter

WORD = re.compile(r"\w+")

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])

    sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())])
    sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)

    if not denominator:
        return 0.0
    else:
        return float(numerator) / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)</code>

示例用法:

<code class="python">text1 = "This is a foo bar sentence ."
text2 = "This sentence is similar to a foo bar sentence ."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>

输出:

Cosine: 0.861640436855

请注意,此实现不包含 TF-IDF 加权,这可以提高较大数据集的余弦相似度。

以上是如何在不使用外部库的情况下计算两个句子之间的余弦相似度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn