从计数到预测:深入浅出词向量 (Word Vectors) —— Stanford CS224n 作业实战记录

从计数到预测:深入浅出词向量 (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 降维:从高维稀疏到低维稠密

原始的共现矩阵有两个大问题:

  1. 维度太高:词汇表有多大,向量就有多长(例如 10,000 维)。
  2. 太稀疏:大部分位置都是 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) ,我发现:

  • 同义词 (如 happyjoyful)距离很近。
  • 反义词 (如 happysad)距离也比较近!
  • 无关词 (如 happytiger)距离很远。

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 的基础有了更直观的认识:

  1. Count-Based (SVD) :利用全局统计信息,直观但计算昂贵,适合小语料。
  2. Prediction-Based (GloVe) :利用局部上下文窗口,生成稠密向量,擅长捕捉复杂的线性关系(类比推理)。
  3. Data Ethics:数据决定模型。由于数据来源于人类,词向量不可避免地带有社会偏见,这是我们在工程实践中必须警惕的。

词向量是现代 NLP(包括现在的 LLM 大模型)的基石。理解了它,就拿到了通往自然语言处理殿堂的钥匙。


本文基于 Stanford CS224n Assignment 1 实验笔记整理。

相关推荐
JarryStudy1 小时前
自动调优在Triton-on-Ascend中的应用:从参数优化到性能极致挖掘
人工智能·算法·昇腾·cann·ascend c
CoderYanger1 小时前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:13.子集
java·算法·leetcode·机器学习·剪枝·1024程序员节
黑客思维者1 小时前
底层冗余性原理探秘模型剪枝(Pruning)为何能“无损”压缩模型?
算法·机器学习·剪枝
疯疯癫癫才自由1 小时前
爬取Leetcode Hot 100 题单
算法·leetcode
WolfGang0073211 小时前
代码随想录算法训练营Day33 | 322.零钱兑换、279.完全平方数、139.单词拆分、背包总结
算法
CoderYanger1 小时前
递归、搜索与回溯-综合练习:28.不同路径Ⅲ
java·算法·leetcode·深度优先·1024程序员节
我发在否1 小时前
Rust > 牛客OJ在线编程常见输入输出练习场
算法·rust
忆湫淮1 小时前
ENVI 5.6 利用现场标准校准板计算地表反射率具体步骤
大数据·人工智能·算法
Ayanami_Reii1 小时前
基础数据结构应用-一个简单的整数问题
数据结构·算法·树状数组·fenwick tree