1. 引言

在自然语言处理(NLP)领域,文本相似度是一个活跃的研究方向,也是众多实际应用的基础。本文将介绍文本相似度的基本定义、类型,重点讲解语义相似度的概念、方法与应用场景。

2. 文本相似度

文本相似度用于衡量两个词语、短语或文档之间的接近程度。这种接近可以是词汇层面的,也可以是语义层面的。

  • 语义相似度:强调含义的接近程度。
  • 词汇相似度:关注词汇集合的重合度。

举个例子:

  • “The dog bites the man”
  • “The man bites the dog”

从词汇角度看,这两个句子几乎相同,但从语义角度看,含义完全不同。

2.1 实现方式

计算文本相似度通常包括以下几个步骤:

  1. 将文本转化为特征向量
  2. 选择合适的表示方式(如 TF-IDF)
  3. 使用相似度算法计算向量之间的距离或夹角

2.2 常见方法

  • Jaccard 相似度
  • 余弦相似度
  • K-Means 聚类
  • 潜在语义索引(LSI)
  • 潜在狄利克雷分布(LDA)
  • 结合词向量(如 Word2Vec)的算法

3. 语义相似度

语义相似度衡量的是两个文本在意义上的接近程度。通常以 0 到 1 的分数表示,1 表示含义几乎一致,0 表示毫无关联。

来看一个 Google 搜索的例子:

  • 查询词:“The tourism industry is collapsing”
  • 返回结果中出现了:“Travel industry fears Covid-19 crisis will cause more holiday companies to collapse”

虽然两个句子词汇差异大,但语义非常接近:

Google 搜索示例

4. 语义相似度的类型

4.1 基于知识的相似度

通过本体图谱(Ontology)中的节点表示概念,节点之间的边数越少,语义越接近。这种方法也被称为拓扑方法。

例如下图中,“coin” 与 “money” 更接近,而与 “credit card” 关系较远:

知识图谱示例

4.2 基于统计的相似度

通过语料库学习特征向量来计算语义相似度。常用技术包括:

  • LSA(潜在语义分析)中的词频或 TF-IDF
  • ESA(显式语义分析)中的维基百科概念权重
  • PMI(点互信息)中的同义词关系
  • HAL(语言类比超空间)中的共现词

这些方法常结合词向量(如 Word2Vec、GloVe)使用,以增强语义捕捉能力。

4.3 基于字符串的相似度

虽然不能单独用于语义相似度,但可以与其他方法结合使用,用于衡量特征向量之间的距离:

  • 曼哈顿距离(Manhattan Distance)
  • 欧几里得距离(Euclidean Distance)

欧几里得距离公式如下:

$$ d(x, y) = \sqrt{\sum_{i=1}^{n} (y_{i} - x_{i})^{2}} $$

其中 $ n $ 是特征向量的维度。

  • 余弦相似度(Cosine Similarity)

余弦相似度公式如下:

$$ \text{Similarity}(A, B) = \frac{A \cdot B}{|A| \times |B|} = \frac{\sum_{i=1}^{n}A_{i} B_{i}}{\sqrt{\sum_{i=1}^{n}A_{i}^{2}}\sqrt{\sum_{i=1}^{n}B_{i}^{2}}} $$

4.4 基于语言模型的相似度

该方法于 2016 年提出,假设两个英文短语语法正确,主要步骤如下:

  1. 去除停用词
  2. 使用词性标注(POS)
  3. 构建解析树(parsing tree)
  4. 构建加权无向图
  5. 计算节点之间的最短路径作为相似度得分

5. 示例代码

目前已有多种成熟的库实现了上述算法,例如 Python 中的 Sematch,它基于知识图谱计算语义相似度。

以下代码展示了如何使用 sematch 计算“dog”和“cat”之间的语义相似度:

from sematch.semantic.similarity import WordNetSimilarity

wns = WordNetSimilarity()
similarity = wns.word_similarity('dog', 'cat', 'li')
print(similarity)  # 输出 0.5

6. 应用场景

语义相似度在多个领域都有广泛应用:

6.1 自然语言处理(NLP)

  • 情感分析
  • 机器翻译
  • 问答系统
  • 聊天机器人
  • 搜索引擎与信息检索

6.2 信息科学

  • 生物医学:构建基因本体(Gene Ontology)依赖语义相似度方法。
  • 地理信息:地理特征本体常使用拓扑与统计语义相似度方法。例如 OpenStreetMap 中使用的 OSM 语义网络,用于计算标签之间的语义相似度。

7. 小结

本文系统介绍了文本相似度的基本概念、分类与实现方法,重点讲解了语义相似度的定义、类型与典型应用场景。同时,我们也演示了如何使用 Python 中的 sematch 库进行语义相似度计算。

踩坑提示:语义相似度计算不是万能的,尤其在中文场景下,词向量与语义模型的质量直接影响结果准确性,建议结合实际业务进行调优。


原始标题:Semantic Similarity of Two Phrases