余弦相似度-2.文本相似度计算原理

0 阅读3分钟

问AI: 文本相似度上使用余弦相似度计算的原理是什么

下面从原理、步骤和直观理解三个方面详细说明:


一、基本原理

1. 文本 → 向量

计算机无法直接处理文字,因此需要将文本转换为数值向量。常用方法包括:

  • 词袋模型(Bag of Words, BoW)
  • TF-IDF(Term Frequency–Inverse Document Frequency)
  • 词嵌入(Word Embedding) :如 Word2Vec、GloVe
  • 句/文档嵌入(Sentence/Document Embedding) :如 BERT、Sentence-BERT、OpenAI Embedding

无论哪种方法,最终目标都是把一段文本映射到一个高维空间中的向量

2. 向量方向 ≈ 语义方向

  • 如果两段文本讨论的主题、用词、语义相近,它们的向量在高维空间中会指向相似的方向
  • 余弦相似度正好衡量的是两个向量方向的接近程度,而不受文本长度(即向量模长)影响。

例如:“我喜欢苹果” 和 “我爱吃苹果” 内容相似,但字数不同。余弦相似度能忽略长度差异,聚焦语义一致性。


二、计算步骤(以 TF-IDF 为例)

假设我们有两段文本:

  • 文本 A: “猫 喜欢 吃 鱼”
  • 文本 B: “狗 喜欢 吃 骨头”

步骤 1:构建词汇表(Vocabulary)

所有唯一词:{猫, 喜欢, 吃, 鱼, 狗, 骨头} → 共6维

步骤 2:将文本转为 TF-IDF 向量

(简化起见,这里用词频代替 TF-IDF)

  • A 向量 = [1, 1, 1, 1, 0, 0]
  • B 向量 = [0, 1, 1, 0, 1, 1]

步骤 3:计算余弦相似度

image.png

→ 相似度为 0.5,说明有一定重合(“喜欢”“吃”),但主题不同(猫 vs 狗,鱼 vs 骨头)。

三、为什么余弦相似度适合文本?

✅ 优势:

  1. 对文本长度不敏感

    • 长文档和短文档只要用词分布相似,就能得到高相似度。
    • 欧式距离会因长度差异而失真。
  2. 适用于高维稀疏向量

    • 文本向量通常维度高(成千上万个词)、大部分为0(稀疏)。
    • 余弦计算只关注非零维度的重叠,效率高。
  3. 与语义直觉一致

    • 共享关键词越多、权重越匹配 → 方向越接近 → 余弦值越高。

📌 补充:现代嵌入模型中的使用

在 BERT 或 Sentence-BERT 中:

  • 每个句子被编码为一个稠密向量(如 768 维)。
  • 这些向量已经蕴含了上下文语义。
  • 直接计算两个句子向量的余弦相似度,即可判断语义是否相近。

例如:“如何煮咖啡?” 和 “怎样冲泡咖啡?” 的 BERT 向量余弦相似度可能高达 0.9+。


四、总结一句话

文本余弦相似度的本质,是将语言问题转化为几何问题——用向量方向的夹角来量化语义的接近程度。

这种方法简洁、高效,且在实践中被广泛验证有效,是自然语言处理中最基础也最重要的相似度度量手段之一。