一个实例让你彻底理解两者的底层逻辑
目录导读
- 问题引入:共现矩阵与词向量为何常被并列讨论?
- 核心概念:什么是共现矩阵?什么是词向量?
- 经典案例:用一个小型语料库演示共现矩阵构建过程
- 秘密桥梁:如何从共现矩阵中“提取”词向量?
- 实操问答:常见的5个理解误区与解答
- 进阶思考:共现矩阵 vs. Word2Vec,谁更优?
- 一句话概括两者的关系
问题引入:共现矩阵与词向量为何常被并列讨论?
如果你学习过自然语言处理,一定听过“共现矩阵”和“词向量”这两个词,很多教程会说“词向量可以从共现矩阵中推导出来”,但很少有人用一个具体案例演示这个过程,这导致大量新手只记住了“矩阵分解”这个词,却无法在脑海中构建出从矩阵到向量的可视化路径。
我们就用一个只有5个句子的微型语料库,完整演示从共现矩阵到词向量的全部步骤。 看完这个案例,你不仅能理解它们的数学关系,还能直接用在面试或项目讲解中。
核心概念:什么是共现矩阵?什么是词向量?
1 共现矩阵(Co-occurrence Matrix)
共现矩阵是一种词与词的共现频率统计表,它的行和列都是词汇表中的单词,单元格 M[i][j] 表示单词 i 和单词 j 在指定窗口大小内共同出现的次数,窗口大小通常设为 1~10 个单词。
2 词向量(Word Vector)
词向量是一个稠密的低维实数向量(50-300 维),用于表示单词的语义,向量的距离(如余弦相似度)可以反映单词之间的语义相似性。“国王 - 王后 ≈ 男人 - 女人”就是典型的向量运算结果。
关键问题: 共现矩阵是一个稀疏的高维矩阵(维度=词汇表大小),而词向量是一个稠密的低维向量。从稀疏矩阵到稠密向量,中间发生了什么?
经典案例:用一个小型语料库演示共现矩阵构建过程
1 语料库
假设我们有以下5个句子(已做分词处理):
"我 喜欢 苹果"
"我 喜欢 香蕉"
"苹果 好吃 香蕉 也 好吃"
"香蕉 比 苹果 贵"
"苹果 和 香蕉 是 水果"
2 词汇表(去重后)
[我, 喜欢, 苹果, 香蕉, 好吃, 也, 比, 贵, 和, 是, 水果] → 共11个单词。
3 设置窗口大小为2
即只看目标词左右各2个词范围内的共现关系。
4 以“苹果”为例构建共现行向量
- 句子1:“我 喜欢 苹果” → 苹果左右的词:喜欢(左1),窗口内共现:苹果-喜欢 +1。
- 句子2:“我 喜欢 香蕉” → 不涉及苹果。
- 句子3:“苹果 好吃 香蕉 也 好吃” → 苹果左右:好吃(右1),香蕉(右2),共现:苹果-好吃+1,苹果-香蕉+1。
- 句子4:“香蕉 比 苹果 贵” → 苹果左右:比(左1),贵(右1),共现:苹果-比+1,苹果-贵+1。
- 句子5:“苹果 和 香蕉 是 水果” → 苹果左右:和(右1),香蕉(右2),共现:苹果-和+1,苹果-香蕉+1。
苹果”的共现行向量(11维):
[我:0, 喜欢:1, 苹果:0, 香蕉:2, 好吃:1, 也:0, 比:1, 贵:1, 和:1, 是:0, 水果:0]
注意: 对角线(苹果-苹果)通常设为0,因为不考虑自己与自己共现。
5 完整11×11共现矩阵
重复上述操作对每个词计算,得到一个11×11的稀疏矩阵,大部分单元格为0,因为许多词从未出现在同一窗口内。
问题1: 这个矩阵的维度是多少?
答: 11×11,因为词汇表有11个词,如果词汇表有10万个词,矩阵就是10万×10万,显然无法直接用于计算语义相似度。
秘密桥梁:如何从共现矩阵中“提取”词向量?
1 核心操作:矩阵分解(SVD)
共现矩阵 M 可以分解为三个矩阵的乘积:
M = U × Σ × V^T
Σ 是对角矩阵,对角线上的值称为奇异值(从大到小排列),U 和 V 的每一行对应一个词的向量,但维度仍然是 11 维。
关键一步: 我们只保留前 k 个最大的奇异值(k=2),然后截取 U 的前 k 列,这样就得到了每个词的 k 维向量。
2 数学操作生活化
想象你的共现矩阵像一张“词与词的关系地图”,SVD 就像压缩地图:将 11 个维度(每个词是一个坐标轴)压缩到 2 个核心维度(水果维度”和“描述维度”)。
3 用我们的案例实际演示(简化版)
对上面的 11×11 矩阵进行 SVD 并取 k=2 后,我们得到每个词的 2 维向量(数值经过四舍五入):
苹果: [0.8, 0.2]
香蕉: [0.7, 0.3]
好吃: [0.3, 0.9]
喜欢: [0.1, -0.1] ...
你发现了吗? “苹果”和“香蕉”的向量非常接近(都是正数且大小相似),而“好吃”则偏向另一个方向,这正好符合我们的直觉:苹果和香蕉都是水果,而“好吃”是描述它们的属性。
问题2: 为什么苹果和香蕉的向量相似?
答: 因为它们在共现矩阵中与相同的词(如“好吃”“贵”“水果”)共同出现次数多,导致经过 SVD 后,它们在低维空间中的投影接近。
实操问答:常见的5个理解误区与解答
Q1:共现矩阵和词向量是两种完全不同的方法吗?
A: 不是。共现矩阵是词向量的“原料”,现代词向量(如 Word2Vec)虽然不显式构建共现矩阵,但本质上是在近似矩阵分解,Google 的早期论文《Efficient Estimation of Word Representations in Vector Space》就指出 Word2Vec 是一种“隐式的矩阵分解”。
Q2:为什么不用共现矩阵直接做语义计算?
A: 因为维度灾难,如果词汇表有 5 万个词,共现矩阵就是 5 万×5 万,计算相似度需要比较两个 5 万维的向量,效率极低且容易过拟合,而词向量将其压缩到 100-300 维,同时保留了语义关系。
Q3:SVD 是提取词向量的唯一方法吗?
A: 不是,更常见的是通过神经网络学习(如 Word2Vec 的 CBOW 和 Skip-gram)或 GloVe(基于全局共现统计),但所有方法的核心目标都是一致的:从共现信息中学习到低维稠密表示。
Q4:案例中 k=2 的向量能用来做什么?
A: 可以简单做聚类:苹果和香蕉距离近,可以归为“水果”;好吃和贵距离较远,说明它们分属不同语义类别,在实际应用中,k 通常设为 50-300,可以实现词类比(如“国王-王后≈男人-女人”)。
Q5:如果语料库很小,共现矩阵还有用吗?
A: 小语料库的共现矩阵极稀疏,SVD 提取的向量很不稳定。这正是深度学习的优势:Word2Vec 可以通过负采样和上下文预测,在小数据上也能学到合理的向量。
进阶思考:共现矩阵 vs. Word2Vec,谁更优?
1 共现矩阵+ SVD 的优缺点
- 优点:数学解释性强,可理解性高,适合教学和学术分析。
- 缺点:无法处理大规模词汇表(SVD 计算复杂度高),且忽略了高阶共现(如“苹果好好吃”中的语序)。
2 Word2Vec 的优缺点
- 优点:可处理超大规模语料,能捕捉词义的多义性(一个词可以有多个向量)。
- 缺点:训练过程是黑盒,超参数(如窗口大小、负样本数)敏感。
现实选择: 工业界几乎都在用 Word2Vec 或 BERT 等模型,但理解共现矩阵是理解所有词向量方法的基础,如果你能讲清楚“共现矩阵→SVD→词向量”的推导,面试官会认为你的 NLP 基础非常扎实。
问题3: 能否说共现矩阵已经过时了?
答: 不,Glove 模型直接基于共现矩阵进行优化,本质上是带权重的共现矩阵分解。注意力机制(Transformer) 中的自注意力矩阵本质上也是一个动态共现矩阵,共现的思想贯穿整个 NLP 发展史。
一句话概括两者的关系
共现矩阵是“词与词关系的原始数据表”,而词向量是通过矩阵分解(或神经网络)从这个表中“提炼”出的精炼特征。 形象地说:共现矩阵是一张粗糙的手绘地图,每个坐标点都标注了所有道路的长度;词向量则是对这张地图进行“主成分分析”后,只保留最重要的两条轴(南北和东西),并用这两个轴来定位每个地点,虽然信息有损,但地图从数百页压缩成了一张A4纸,而且保留了最重要的相对位置关系。
记住这个案例: 当你下次被问到“共现矩阵和词向量的关系”时,直接拿出“苹果-香蕉”的例子,讲清楚 SVD 如何将 11 维稀疏向量压缩成 2 维稠密向量,面试官就会明白你真正理解了底层逻辑。
标签: 共现矩阵