网站建设的论坛,wordpress后台添加底部菜单,国际阿里巴巴官网首页,网络架构七层作用Jay Alammar 博客笔记#xff1a;拆解 Word2vec#xff0c;从直觉到负采样的逻辑演进#xff08;逻辑链#xff09;前言
本文核心内容基于 Jay Alammar 的经典神作 The Illustrated Word2vec#xff0c;并结合《Speech and Language Processing》相关章节进行了深度梳理。…Jay Alammar 博客笔记拆解 Word2vec从直觉到负采样的逻辑演进逻辑链前言本文核心内容基于 Jay Alammar 的经典神作The Illustrated Word2vec并结合《Speech and Language Processing》相关章节进行了深度梳理。很多同学都用过gensim也听过“国王 - 男人 女人 王后”的经典例子但 Word2vec 到底是怎么“炼”出来的为什么有了 Skip-gram 还需要负采样Negative Sampling如果不把这些逻辑串起来面试时很容易卡壳。这篇文章主打逻辑串联和直觉理解带你从零推导 Google 是如何把人类语言的规律压缩进向量空间的。1. 向量表示的直觉从“性格测试”说起我们先不谈 NLP先谈谈如何用数字描述一个人。这对于理解“嵌入Embedding”至关重要。1.1 逻辑链从 ID 到 向量逻辑链条问题 / 动机计算机只认数字如何表示“张三”、“李四”这样复杂的人朴素方案One-hot/ID给每个人发个身份证号张三1001李四1002。局限 / 失败点ID 是独立的符号。1001 和 1002 在数学上很近但在现实中张三和李四可能毫无共同点。我们无法通过 ID 计算“相似度”。改进思路Vector/Embedding用一组“属性分数”来表示一个人。1.2 直觉解释人格嵌入示例假设我们用 5 个维度来测评一个人范围 -1 到 1。就像心理学的大五人格测试外向性、神经质等维度我 (Jay)某人 A某人 B内向/外向-0.2 (偏内向)-0.80.9神经质0.60.7-0.1…………维度 50.10.2-0.5此刻“我”不再是一个 ID而是一个向量([-0.2, 0.6, \dots, 0.1])。一旦万物皆为向量我们就可以用几何学的方法来衡量关系。判断两个人像不像就是算两个向量夹角的余弦相似度 (Cosine Similarity)similaritycos(θ)A⋅B∥A∥∥B∥ \text{similarity} \cos(\theta) \frac{A \cdot B}{\|A\| \|B\|}similaritycos(θ)∥A∥∥B∥A⋅B完全同向值为 1性格完全一致。正交90度值为 0毫无关系。反向180度值为 -1性格截然相反。2. 词嵌入Word Embeddings语言的几何学现在把“人”换成“词”。2.1 词向量的可视化在 NLP 中我们无法预定义“外向性”这种明确的特征。我们让机器自己去学 50 维、300 维甚至更高维度的特征。如果我们把单词 “King” 的向量打印出来可能是一串看不懂的浮点数。但如果我们给数值上色红色为正蓝色为负就能看到条带状的纹理。观察发现“Woman” 和 “Girl” 的色带纹理非常相似“Man” 和 “Boy” 也很相似。神奇之处“Boy” 和 “Girl” 在某些特定维度上可能代表“青春/幼年”的隐形特征非常相似但在代表“性别”的维度上截然不同。2.2 著名的类比运算向量空间最迷人的特性是线性代数运算具有语义含义King⃗−Man⃗Woman⃗≈Queen⃗ \vec{King} - \vec{Man} \vec{Woman} \approx \vec{Queen}King−ManWoman≈Queen这说明模型不仅把词变成了数字还捕捉到了词与词之间平行的空间关系Gender 维度的迁移。3. 语言模型词向量的“训练场”只要有了词向量就能做很酷的事。但问题是这堆数字最初是怎么得到的答案是作为“预测下一个词”任务的副产品Side Effect。3.1 神经语言模型 (Neural Language Model)逻辑链条问题 / 动机我们需要一个能够预测下一个词的系统比如手机输入法的联想功能。早期架构 (Bengio 2003)输入单词的 ID。查表得到临时词向量。输入神经网络隐藏层。输出层做 Softmax预测整个词表中每个词的概率。关键点为了让预测更准模型会拼命调整第 2 步的“词向量矩阵”。训练完了预测模型可能不重要但这个矩阵就是我们想要的 Word Embeddings。4. Word2vec 的核心架构Skip-gram虽然 Bengio 的模型能学到向量但它太慢了因为它主要想做完美的语言模型。Google 的 Word2vec 团队想如果只为了得到向量能不能把任务简化4.1 从“预测未来”到“扫描上下文”逻辑链条朴素方案使用 CBOWContinuous Bag of Words根据周围词预测中心词。改进思路Skip-gram反其道而行之。给定一个中心词去预测它周围的上下文词。优势Skip-gram 在处理生僻词时往往表现更好因为每个词都被当做中心词单独训练过。滑动窗口 (Sliding Window)机制是其灵魂假设句子是The quick brown fox jumps over the lazy dog。窗口大小 2看前后各 2 个词。当窗口滑到“brown”时中心词 (Input):brown上下文 (Targets):The,quick,fox,jumps这就生成了 4 个训练样本对(brown,The)(brown,quick)(brown,fox)(brown,jumps)5. 效率革命负采样 (Negative Sampling)这是 Word2vec 最精彩、也最常被考到的地方。5.1 为什么传统的 Softmax 行不通逻辑链条问题 / 动机我们的词表 (|V|) 可能有 100 万个词。局限 / 失败点在标准神经网络中最后一层是 Softmax。为了计算brown预测fox的概率分母需要把这 100 万个词的得分全部算一遍来进行归一化。[ P(w_o|w_i) \frac{e{score}}{\sum_{j1}{1,000,000} e^{score_j}} ]后果每训练一个样本都要算 100 万次训练几年都练不完。改进思路SGNS将“多分类问题”转化为“二分类问题”。5.2 核心思想把“找邻居”变成“判断题”既然算 100 万个词太慢那我们就不算全局概率了。我们把问题修改为“输入词 A 和输出词 B是真正的邻居吗”(Yes/No 问题)为了训练这个二分类器我们需要正样本和负样本正样本 (Positive)从文本中真实滑动出来的。Input:brown, Context:fox, Label:1负样本 (Negative)从词表中随机抽取几个不相干的词。Input:brown, Context:taco(玉米卷), Label:0Input:brown, Context:apple(苹果), Label:05.3 极速训练过程与公式现在模型变成了一个简单的逻辑回归Logistic Regression。给定输入词向量 (v_c) 和上下文词向量 (u_o)点积Dot Product衡量相似度zvc⋅uo z v_c \cdot u_ozvc⋅uoSigmoid转换为概率σ(z)11e−z \sigma(z) \frac{1}{1 e^{-z}}σ(z)1e−z1计算误差与反向传播ErrorTarget−σ(z) \text{Error} \text{Target} - \sigma(z)ErrorTarget−σ(z)这一下把计算量从 100 万次降到了 k1 次k 通常是 5。这就是 Word2vec 能够在大规模语料上训练的原因。6. 工程实践与超参数 (面试必读)在实际炼丹训练时有几个细节决定了词向量的质量。6.1 窗口大小 (Window Size)小窗口 (2-5)模型只看极近的词。捕获的是功能性/句法性相似度。结果Hogwarts和Oxford会很像都是学校语法功能一样。Good和Bad也会很像可以互换。大窗口 (15-50)模型能看到更远的上下文。捕获的是主题性/语义性相似度。结果Hogwarts会和Harry Potter,Wizard更近。6.2 负样本数量 (Negative Samples, (k))小数据集建议 (k 5 \sim 20)。数据少需要多一点负样本来辅助学习。大数据集建议 (k 2 \sim 5)。数据多负样本给够压力就行。6.3 高频词降采 (Subsampling)像 “the”, “a”, “is” 这种词出现频率太高也没啥实际含义。Word2vec 会用一个概率公式扔掉这些词P(wi)1−tf(wi)P(w_i) 1 - \sqrt{\frac{t}{f(w_i)}}P(wi)1−f(wi)t其中 (f(w_i)) 是词频(t) 是阈值。这能让模型更关注“稀有但重要”的词。7. 总结Word2vec 的极简逻辑如果你在面试中被问到 Word2vec请按这个逻辑回答目标将词映射为稠密向量捕捉语义。架构采用Skip-gram利用中心词预测上下文利用海量文本自监督训练。优化因为 Softmax 计算量太大引入Negative Sampling。本质通过区分“真实邻居”和“随机噪音”强迫向量在空间中根据共现关系进行聚类。下章预告Word2vec 虽然经典但它有一个致命缺陷多义词问题Bank 是银行还是河岸。同一个词只能有一个向量。这直接催生了后来的ELMo和BERT。我们下一章见