1. 语义相似度计算的技术演进全景
语义相似度计算作为自然语言处理(NLP)的基础任务,其发展历程映射了整个NLP领域的技术变迁。让我们从技术演进的视角,重新梳理这个领域的关键突破与实现细节。
1.1 知识驱动时代:WordNet与语义网络
WordNet作为早期语义表示的开创性工作,构建了英语词汇的语义网络。其核心是将名词、动词、形容词和副词组织为同义词集合(Synset),并通过多种语义关系连接。在实际应用中,我们通常使用NLTK库进行WordNet操作:
python复制from nltk.corpus import wordnet as wn
# 获取单词的所有义项
dog_synsets = wn.synsets('dog')
print(f"'dog'的义项数量:{len(dog_synsets)}")
# 查看第一个义项的详细定义
dog_n1 = dog_synsets[0]
print(f"定义:{dog_n1.definition()}")
print(f"例句:{dog_n1.examples()}")
WordNet相似度计算的核心在于利用这个语义网络的拓扑结构。以Wu-Palmer相似度为例,其计算公式为:
$$
sim_{WUP}(c_1, c_2) = \frac{2 \times depth(LCS(c_1, c_2))}{depth(c_1) + depth(c_2)}
$$
其中LCS表示最低公共包含节点。这个公式的巧妙之处在于:
- 分子部分强调两个概念的共同特性
- 分母部分平衡了概念在层次结构中的深度差异
- 结果自动归一化到[0,1]区间
1.2 统计学习革命:从分布假说到词嵌入
分布假说的数学实现经历了几个关键阶段:
-
词-文档矩阵:构建m×n矩阵(m为词数,n为文档数),元素通常采用TF-IDF权重:
$$
tfidf(t,d) = tf(t,d) \times \log(\frac{N}{df(t)})
$$ -
词-上下文矩阵:使用固定窗口(通常5-10个词)统计共现,采用PPMI(正的点互信息)加权:
$$
PPMI(w,c) = \max(0, \log\frac{P(w,c)}{P(w)
