从计数到预测:深入浅出词向量 (Word Vectors) ------ Stanford CS224n 作业实战记录
标签:NLP, CS224n, Word Embeddings, Python, 深度学习
前言:计算机如何"理解"语言?
作为人类,当我们看到"苹果"这个词,脑海中会浮现出一种红色的、甜脆的水果。但对于计算机来说,"苹果"只是一串 ASCII 码,或者更底层的 0 和 1。
为了让计算机能够处理自然语言(NLP),我们需要一种方法将单词转换为向量 (Vectors) ------ 即一串数字。这串数字需要能够捕捉单词的语义:相似的词,它们的向量距离应该很近。
最近我在学习斯坦福的神课 CS224n: Natural Language Processing with Deep Learning ,在 Assignment 1 中,我亲手实现了两种经典的词向量构建方法。这篇文章将带你回顾从基于统计的共现矩阵 到基于预测的 GloVe 模型的演变过程,并探讨其中隐含的伦理问题。
第一部分:基于计数的方法 (Count-Based Methods)
1. 核心理念:物以类聚,人以群分
语言学界有一句名言:
"You shall know a word by the company it keeps." (Firth, 1957)
也就是说,通过一个词周围的"邻居",我们就能推断出这个词的含义。
2. 共现矩阵 (Co-Occurrence Matrix)
在实验中,我使用路透社 (Reuters) 的粮食类新闻语料库。
我们定义一个固定大小的窗口(例如 window size = 4),然后遍历整个语料库,统计每个单词与其周围单词同时出现的次数。
举个简单的例子,如果语料库是 "I like deep learning" :
- 当中心词是 "like" 时,它的上下文是 "I" 和 "deep" 。
- 我们就在矩阵中
[like, I]和[like, deep]的位置 +1。
最终,我们得到了一个巨大的对称矩阵。矩阵的每一行,就是一个单词的原始向量。
3. SVD 降维:从高维稀疏到低维稠密
原始的共现矩阵有两个大问题:
- 维度太高:词汇表有多大,向量就有多长(例如 10,000 维)。
- 太稀疏:大部分位置都是 0(因为大部分词一辈子也不会碰面)。
为了解决这个问题,我使用了 SVD (奇异值分解) 技术,将高维矩阵压缩到了 2维。这不仅节省了空间,还提取了数据中的"主成分"。
可视化结果:
当把降维后的向量画在二维坐标系上时,神奇的事情发生了:
corn(玉米),wheat(小麦),barley(大麦) 等农作物紧紧聚在一起。gold,silver,copper等贵金属聚在另一个角落。
这证明了:简单的统计共现,确实能捕捉到单词的语义类别。
第二部分:基于预测的方法 (GloVe)
虽然 SVD 很有效,但计算复杂度太高( <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( N 3 ) O(N^3) </math>O(N3))。现代 NLP 更多使用基于预测的方法,比如 Word2Vec 和 GloVe。
在实验的第二部分,我加载了斯坦福预训练好的 GloVe (Global Vectors) 模型(基于 Wikipedia 和 Gigaword 训练,40万词汇,200维)。
1. 见证奇迹:向量的线性结构
GloVe 向量最迷人的地方在于它包含线性结构。我们可以通过向量加减法来推理语义。
经典的"国王与王后"实验:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V e c t o r ( K i n g ) − V e c t o r ( M a n ) + V e c t o r ( W o m a n ) ≈ ? Vector(King) - Vector(Man) + Vector(Woman) \approx ? </math>Vector(King)−Vector(Man)+Vector(Woman)≈?
在代码中运行这段逻辑,结果惊人地接近:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ≈ V e c t o r ( Q u e e n ) \approx Vector(Queen) </math>≈Vector(Queen)
这说明,向量空间中存在着表示"性别"(Man -> Woman)和"地位"(King -> Queen / Man -> King)的特定方向。
2. 距离的奥秘
通过计算余弦相似度 (Cosine Similarity) ,我发现:
- 同义词 (如
happy和joyful)距离很近。 - 反义词 (如
happy和sad)距离也比较近! - 无关词 (如
happy和tiger)距离很远。
Insight :反义词之所以距离近,是因为它们共享相似的上下文(我们常说 "I am happy" 也常说 "I am sad"),在词向量看来,它们在语法功能上是高度相似的。
第三部分:AI 的阴暗面 ------ 偏见 (Bias)
词向量不仅学到了语义,也学到了人类社会的偏见。这是本次实验中最让我深思的部分。
1. 性别偏见的发现
当我尝试用向量进行类比推理时,发现了令人不安的结果:
- 输入 :
Man:Programmer::Woman:? - GloVe 输出 :
Homemaker(家庭主妇) - 输入 :
Boy:Toy::Girl:? - GloVe 输出 :
Doll,Dress
与男性关联的词多是"程序员、工程师、枪、卡车",而与女性关联的多是"护士、家庭主妇、洋娃娃"。
2. 偏见从何而来?
模型本身并非"邪恶"。它只是一面镜子,忠实地反映了训练数据(互联网文本)中的统计规律。如果我们人类在维基百科和新闻中更多地将男性与科技联系在一起,将女性与家庭联系在一起,模型就会如实地"学会"这种关联。
这提醒我们:在将 NLP 模型应用到简历筛选、贷款审批等敏感领域时,必须进行去偏见处理,否则 AI 将会放大社会的不公。
总结
通过这次 Assignment 1 的实战,我对 NLP 的基础有了更直观的认识:
- Count-Based (SVD) :利用全局统计信息,直观但计算昂贵,适合小语料。
- Prediction-Based (GloVe) :利用局部上下文窗口,生成稠密向量,擅长捕捉复杂的线性关系(类比推理)。
- Data Ethics:数据决定模型。由于数据来源于人类,词向量不可避免地带有社会偏见,这是我们在工程实践中必须警惕的。
词向量是现代 NLP(包括现在的 LLM 大模型)的基石。理解了它,就拿到了通往自然语言处理殿堂的钥匙。
本文基于 Stanford CS224n Assignment 1 实验笔记整理。