当前位置: 首页 > news >正文

【NLP】 3. Distributional Similarity in NLP(分布式相似性)

Distributional Similarity in NLP(分布式相似性)

分布式相似性(Distributional Similarity) 是自然语言处理(NLP)中的核心概念,基于“相似的单词出现在相似的上下文中”这一假设。它用于衡量单词之间的相似性,广泛应用于词向量、信息检索、文本分类等任务。

1. 分布式假设(Distributional Hypothesis)

分布式相似性基于以下假设:

“You shall know a word by the company it keeps.”
—— J. R. Firth (1957)

即,两个单词如果经常出现在相似的上下文中,那么它们的语义相似
例如:

  • “猫” 和 “狗” 经常出现在 “宠物”、“喜欢吃”、“可爱”等词的上下文中,因此它们的意义接近。
  • “汽车” 和 “自行车” 都出现在 “交通工具”、“驾驶”、“速度” 等上下文中,因此它们可能具有相似性。

2. 计算分布式相似性的方法

2.1 共现矩阵(Co-occurrence Matrix)

最基础的分布式相似性计算方法是共现矩阵

  • 统计一个词与不同词的共现次数,形成一个词-词矩阵。
  • 每个单词的向量由其共现次数构成。

示例:

汽车自行车可爱速度
5300100
350080
汽车0064010
自行车004609

问题:

  • 稀疏性:矩阵可能非常大,大量词对没有共现。
  • 维度灾难:单词的维度取决于整个词汇表大小,计算开销大。

2.2 词向量(Word Embeddings)

为了解决稀疏性问题,使用低维向量表示单词

  1. 基于共现矩阵的降维方法
    • PCA(主成分分析)
    • SVD(奇异值分解)
    • PPMI(正点互信息)
  2. 预测式方法(Neural-based Models)
    • Word2Vec(CBOW & Skip-Gram)
    • GloVe(基于矩阵分解)
    • FastText(子词信息)
    • BERT & Transformer Embeddings(上下文相关词向量)

示例:

from gensim.models import Word2Vec

# 训练 Word2Vec
sentences = [["猫", "喜欢", "鱼"], ["狗", "喜欢", "骨头"], ["汽车", "行驶", "速度", "快"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=0)

# 获取 "猫" 的词向量
vector = model.wv["猫"]
print(vector)

3. 计算词相似性的方法

3.1 余弦相似度(Cosine Similarity)

余弦相似度衡量两个词向量的夹角:

  • sim ( A , B ) = A ⋅ B ∥ A ∥ ∥ B ∥ \text{sim}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} sim(A,B)=A∥∥BAB

    结果范围:[][-1,1][−1,1]

  • 1 表示完全相似,0 表示不相关,-1 表示完全相反

3.2 欧几里得距离(Euclidean Distance)

d ( A , B ) = ∑ ( A i − B i ) 2 d(A, B) = \sqrt{\sum (A_i - B_i)^2} d(A,B)=(AiBi)2

  • 距离越小,词的相似度越高。
  • 适用于低维向量。

3.3 Jaccard 相似度

用于离散词袋模型

J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A, B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB

  • 适用于 n-gram、关键词提取。
http://www.dtcms.com/a/69753.html

相关文章:

  • AI数字人分身系统(Digital Human System)的源码开发、SaaS平台模型技术方案和开发步骤
  • 自由学习记录(44)
  • 2.4滑动窗口专题:将 x 减到 0 的最小操作数
  • GOC学习
  • LeetCode 3340.检查平衡字符串:模拟
  • C++模板特化与偏特化
  • 315周六复盘(118)本周回顾
  • Java中类和对象
  • R语言的移动应用开发
  • 对称加密算法及其在网页逆向分析中的应用
  • BT-Basic函数之首字母F
  • 六十天前端强化训练之第二十天React Router 基础详解
  • Redis学习
  • 栈区、堆区、静态区
  • STL之关联容器(map ,set)
  • 【AI 加持下的 Python 编程实战 2_03】第二章:Copilot 辅助编程入门——环境搭建、基本工作流程以及数据分析案例演示(含本地实测)
  • PAT甲级(Advanced Level) Practice 1021 Deepest Root
  • 通达信软件+条件选股+code
  • Atcoder ABC397-D 题解
  • L1-093 猜帽子游戏
  • 如何将一个项目推送到gitlab
  • 注意力机制:让AI拥有黄金七秒记忆的魔法--(自注意力)
  • 机器学习——正则化、欠拟合、过拟合、学习曲线
  • Webpack 前端性能优化全攻略
  • 【实用技巧】如何优雅的批量保存网页快照?
  • CTF题目《SSRFMe》(网鼎杯 2020 玄武组)WriteUp
  • Qlik Sense New Install with Restore
  • 【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力
  • Word 小黑第36套
  • 探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界