Skip to content

MIT深度学习课程第六讲:Standalone Embeddings 与 GloVe

本节课继续 natural language processing 单元。

上一节课介绍了:

  • Bag of Words
  • one-hot encoding
  • TextVectorization
  • 基于歌词的 genre classification

本节课进入:

text
embeddings

更准确地说,本节讲的是:

text
standalone embeddings

也就是不随上下文变化的词向量。

老师说明,本节内容会为后面的:

text
contextual embeddings

做铺垫,而 contextual embeddings 正是 transformer 真正发挥作用的地方。

一、本节课目标

本节课要解决的问题是:

如何用更紧凑、可学习、并且包含语义信息的 vectors 表示 words?

课程主线包括:

  • 回顾 STIEone-hot vectors
  • 分析 one-hot vectors 的计算问题和语义问题。
  • 说明好的 word vectors 应该具备什么几何性质。
  • 引入 standalone embeddingscontextual embeddings 的区别。
  • co-occurrence matrix 解释 GloVe 如何学习 embeddings。
  • 说明 embedding dimensions、bias、loss、gradient descent 等训练细节。
  • Keras 中使用 TextVectorizationEmbedding layer。
  • 用预训练 GloVe、fine-tuned GloVe 和从零训练 embeddings 做歌词分类。

二、回顾 STIE 与 One-Hot Text Encoding

老师先回顾上一节课的文本处理流程。

对于一个输入 phrase,系统会执行:

text
S-T-I-E

即:

  1. standardization
  2. tokenization
  3. indexing
  4. encoding

具体过程是:

  1. 先对文本做 standardization。
  2. 再按 whitespace 切分成 individual words。
  3. 给每个 word 分配 integer。
  4. 把每个 integer 转换成对应的 one-hot vector。

三、Keras 默认 Standardization 的提醒

老师特别提醒,历史上 standardization 往往包括:

  • stripping punctuation
  • lowercasing
  • removing stop words
  • stemming

但现代实践中,很多人只做一部分。

Keras 中,默认 standardization 通常只做:

  • lowercasing
  • punctuation stripping

它默认不会做:

  • stemming
  • stop-word removal

因此,课堂示例 vocabulary 中仍然会出现 the 这样的 stop word,因为本例没有把 aandthe 这类词删除。

老师提到,这个细节可能对 homework 2 有帮助。

四、One-Hot 后可以做 Multi-Hot 或 Count Encoding

对于每个 word,one-hot vector 的长度等于 vocabulary size。

如果要把多个 words 聚合成一个文本级别的 vector,可以:

  • 把 one-hot vectors 相加,得到 count encoding
  • 对每一列做 OR,只关心是否出现过,得到 multi-hot encoding

这是上一节 Bag of Words 的基本表示。

老师指出,这种方法对简单问题很有效,但有严重局限。

五、One-Hot Vectors 的第一个问题:计算成本高

如果 vocabulary 很长,每个 token 的 one-hot vector 也会非常长。

例如,vocabulary 中有:

text
500,000 words

那么每个 word 都会变成长度:

text
500,000

的 vector。

这会带来几个问题:

  • 表示极其稀疏。
  • 计算资源浪费。
  • 模型第一层参数数量增加。
  • 需要更多 compute。
  • 需要更多 data。
  • 更容易过拟合。

可以通过只保留最常见 words 缓解,但并不能从根本上解决问题。

六、One-Hot Vectors 的第二个问题:没有语义距离

学生首先指出,one-hot encoding 无法表达相似词之间的关系。

例如:

text
this house is great
this house is awesome

greatawesome 意义相近,但 one-hot vector 会把它们表示成完全不同的位置。

老师总结,理想的词向量应当满足:

  • 意义相近的 words 对应 vectors 应该接近。
  • 意义差异大的 words 对应 vectors 应该远离。

one-hot vectors 不具备这个性质。

七、Movie 与 Film 的距离示例

老师用 moviefilm 举例。

假设 vocabulary size 是:

text
100,000

那么:

  • movie 的 one-hot vector 在 movie 对应位置为 1,其他位置为 0
  • film 的 one-hot vector 在 film 对应位置为 1,其他位置为 0

如果用 Euclidean distance 计算两者距离:

  1. 两个 1 不在同一位置。
  2. 相减后会出现两个差值为 1 的位置。
  3. 平方并求和得到 2
  4. 开根号得到:
text
sqrt(2)

因此,moviefilm 的 one-hot 距离是:

text
sqrt(2)

八、Good 与 Bad 的距离也是 sqrt(2)

老师接着问:

goodbad 意义相反,它们的 one-hot distance 是多少?

答案仍然是:

text
sqrt(2)

原因相同:

  • 两个 words 的 1 出现在不同位置。
  • 所有其他位置都是 0
  • Euclidean distance 仍然是 sqrt(2)

更一般地说:

vocabulary 中任意两个不同 words 的 one-hot distance 都是 sqrt(2)

这意味着 one-hot vectors 几乎没有真正的 semantic distance 概念。

九、One-Hot 的核心缺陷总结

老师总结 one-hot vectors 有两个主要问题:

  1. 计算问题:vocabulary 长时,vector 过长,参数、compute 和 data 需求都很高。
  2. 语义问题:vector 与 word meaning 没有联系,任意不同 words 的距离都一样。

因此,需要一种新表示:

让 vector geometry 与 word semantics 发生联系。

十、好的 Word Vectors 应该具备什么性质

老师提出理想情况:

  • moviefilm 这样的 synonyms 应该靠近。
  • applebanana 这类相关词也应靠近。
  • 意义差异很大的词应相距较远。

但老师强调,关系不仅是距离。

更好的要求是:

word vectors 之间的 geometric relationship 应该反映 words 之间的 semantic relationship。

这里的 geometric relationship 包括:

  • distance
  • direction

十一、二维可视化直觉:词义簇

老师用一个二维 cartoon 说明。

假设有一组已经具有语义信息的 vectors,并取前两个 dimensions 做 scatter plot。

图中会出现一些 cluster:

  • factoryhomebuilding 聚在一起,表示 building 相关概念。
  • bicycletruckcar 聚在一起,表示 transportation 或 automobile 相关概念。
  • fruit 相关 words 聚在一起。
  • sports balls 相关 words 聚在一起。

如果要放入 apple,它应该落在 fruit cluster 中。

这个例子说明,好的 embeddings 应该能把相关概念放在相近区域。

十二、语义关系不仅是距离:Puppy、Dog、Calf、Cow

老师接着用:

  • puppy
  • dog
  • calf
  • cow

说明 direction 的意义。

课堂中先有学生选择了图中的 C 位置,随后另一位学生解释,calf 是幼年动物,cow 是成年动物;类似地,puppydog 也是从幼年到成年。

因此,可以把这个关系理解成:

text
puppy : dog = calf : cow

在几何上:

  • 一个方向表示从 baby animal 到 grown-up animal。
  • 另一个方向可能表示不同 animal species 之间的变化。

老师强调:

semantic relationship 对应的不只是距离,也包括方向。

十三、Word Embeddings 的目标

word embeddings 是为了满足这些要求而设计的 word vectors。

它们希望解决:

  1. one-hot vectors 过长且稀疏的问题。
  2. one-hot vectors 无法表达 word meaning 的问题。

与 one-hot vectors 相比,embeddings 通常是:

  • dense
  • low-dimensional
  • learned from data
  • 与词义关系有一定几何对应

十四、Standalone Embeddings 仍然不能解决 Context 问题

老师随后问:

如果 embeddings 已经能表达词义,是否就解决了所有问题?

学生回答:

text
context

老师确认这是关键问题。

许多 words 有多个 meanings,必须根据 surrounding context 判断。

十五、Bank 的多义性

老师用 bank 举例。

bank 可以表示:

  • financial institution
  • river bank
  • airplane banking in one direction
  • banking on something,表示指望某事

如果没有上下文,很难判断具体含义。

standalone word embedding 只能给出某种平均意义。

对于只表示一种含义的 words,这可能还可以;但对 polysemous words,就会变得不够好。

十六、Contextual Embeddings 与 Transformers

要解决上下文问题,需要:

让 word embeddings contextual。

也就是在计算某个 word 的 vector 时,考虑 sentence 中其他 words。

老师指出:

  • contextual word embeddings 能同时表达 semantic geometry 和 context。
  • 计算 contextual word embeddings 的关键机制是 transformer
  • 这也是 transformers 重要且出名的原因。

本节课只讲:

text
standalone / uncontextual word embeddings

从下一讲开始,会用 transformers 将这些 embeddings 变成 contextual embeddings。

十七、为什么不手工设计 Embeddings

老师提出一个朴素想法:

人工收集 synonyms、antonyms、related words,然后手工分配 embedding vectors。

但这会是:

  • very long
  • painful
  • never quite complete

因此,作为 machine learning practitioners,更合理的问题是:

能否从 data 中学习 embeddings?

十八、John Firth 的核心洞见

老师引用 linguist John Firth 的一句话:

text
You shall know a word by the company it keeps.

核心意思是:

可以通过一个词经常与哪些词处在同一上下文中,推断这个词的含义。

这句话是 standalone embeddings 的重要直觉来源。

十九、填空示例:The acting in the ___ was superb

老师用句子:

text
the acting in the ___ was superb

让学生判断哪些 words 可能填入空格。

合理候选包括:

  • play
  • movie
  • show
  • musical
  • film

不合理候选可以有很多。

老师特别举了:

text
the acting of the banana was superb

来说明 banana 在这里不合适。

老师也提到自己喜欢 tensor 这个词,所以也把它作为不合适的候选之一。

二十、Context 的基本直觉

如果两个 words 经常出现在相同或相似 context 中,它们很可能相关。

也就是说:

related words appear in related contexts。

即使不直接知道某个 word 的定义,也可以通过它“住在什么语境里”推断它与哪些词相似。

老师强调,这是一个非常巧妙的想法。

二十一、本节课中 Context 的定义

context 可以有很多定义。

本节课采用一个简单定义:

如果两个 words 经常出现在同一句 sentence 中,就认为它们共享 context。

因此,本节的 context 是:

text
sentence

这个定义不要求两个 words 相邻。

老师强调,即使一个 word 在句子末尾,句首的 word 也可能影响它的含义,因此本节直接以整句作为 context。

二十二、Co-Occurrence Matrix

老师接着定义:

text
co-occurrence matrix

构造方式是:

  1. 取一个很大的 corpus,例如 all of Wikipedia。
  2. 将文本拆成 sentences。
  3. 找出 corpus 中所有 distinct words。
  4. 对每个 word pair,统计它们出现在同一句 sentence 中的次数。

如果 deeplearning 在 Wikipedia 中有:

text
3025

个 sentences 同时出现,就在对应 cell 中写入:

text
3025

这个矩阵的每个 cell 表示:

row word 和 column word 在同一句 sentence 中共同出现的次数。

二十三、Co-Occurrence Matrix 的规模

如果 Wikipedia 中有:

text
500,000 distinct words

那么 co-occurrence matrix 的规模是:

text
500,000 x 500,000

rows 和 columns 都是 words。

许多 word pairs 不太可能共同出现在同一句中,因此矩阵中很多 entries 是:

text
0

老师指出,这个矩阵以紧凑、优雅的方式体现了可以使用的 context information。

二十四、GloVe 与 Word2Vec

老师说明,本节课描述的 standalone embeddings 计算方法叫:

text
GloVe

早期 NLP deep learning 中,standalone embeddings 主要有两条路线:

  • word2vec
  • GloVe

它们机制略有不同,但效果相近。

本节课选择讲 GloVe,因为它更容易解释,并且同样有效。

二十五、GloVe 的核心目标

GloVe 的目标是:

学到一组 embedding vectors,使它们能够近似重建 co-occurrence matrix。

如果 embeddings 能够很好地重建真实 co-occurrence matrix,就说明这些 embeddings 捕捉到了 words 的上下文结构。

老师举例:

  • 如果真实矩阵中 deeplearning 的值是 3000
  • extremelearning 的值是 50
  • embedding model 预测出 300248

那么这些 predictions 与真实值接近,说明 embeddings 可能确实捕捉了 meaningful structure。

二十六、如何判断 Embeddings 好不好

一种简单但不系统的方法是:

  • moviefilm 是否靠近。
  • movietensor 是否远离。

但这种人工检查无法穷尽所有 word pairs。

更系统的方法是:

用 embeddings 尝试重建 co-occurrence matrix,并检查重建结果是否接近真实矩阵。

如果能接近,就说明 embeddings 学到了原矩阵中的 context patterns。

二十七、把 Embeddings 看作 Regression Weights

老师把 GloVe 解释成一种接近 linear regression 的模型。

可以认为:

  • co-occurrence matrix 是 data。
  • embedding vectors 是要学习的 weights。
  • 模型要用这些 weights 近似 co-occurrence counts。

老师强调,哪怕已经学过更复杂的 machine learning,linear regression 的思想仍然有用。

二十八、Notation:Xij、wi 与 bi

老师引入符号:

text
Xij

表示 word i 和 word j 的 co-occurrence count。

它是:

text
data

不是要学习的变量。

对每个 word,还要学习:

text
wi

其中 wi 是 word i 的 embedding vector。

此外,每个 word 还有一个 bias:

text
bi

用来表示该 word 的 inherent popularity 或 natural frequency。

例如:

  • the 自然会出现得很多。
  • movieflick 出现频率可能不同。
  • thetensor 出现频率差异也很大。

二十九、为什么需要 Bias

co-occurrence count 不只取决于两个 words 是否语义相关,也取决于它们各自是否常见。

因此,老师希望 embeddings 捕捉:

co-occurrence patterns independent of natural word frequency。

为此,模型为每个 word 添加一个 bias term。

可以直观理解为:

text
co-occurrence = word i popularity + word j popularity + relationship between i and j

其中 relationship 由两个 embedding vectors 的 dot product 表示。

三十、GloVe 模型的直觉公式

老师用自然语言描述了模型:

  1. 取 word i 的 bias。
  2. 取 word j 的 bias。
  3. 取 word i 与 word j 的 embedding vectors。
  4. 对两个 vectors 做 dot product。
  5. 将这些量相加,预测 co-occurrence count。

核心形式可以理解为:

text
prediction = bi + bj + dot(wi, wj)

但实际模型会对 count 做 logarithmic transformation。

三十一、为什么对 Count 取 Log

co-occurrence counts 是非负数,且可能范围很大。

老师用 net worth 建模类比:

  • 大多数人集中在较低区间。
  • 少数如 Elon、Jeff 等人的 net worth 形成很长的 right tail。
  • 对这种长尾变量取 logarithm,可以压缩范围,让 regression 更 well-behaved。

co-occurrence counts 也类似:

  • 大量 entries 是 0
  • 少数 counts 可能非常高。

因此,对 counts 取 log 可以让模型更稳定。

三十二、Log(0) 的处理

由于:

text
log(0)

没有定义,而 co-occurrence matrix 中有很多 0,所以可以给 counts 加 1

概念上就是:

text
log(Xij + 1)

这样可以避免技术性的 arithmetic problem。

三十三、Loss:Mean Squared Error

给定模型和数据后,要找到最好的 bw

学生指出,“最好”意味着:

lowest error。

老师说明,可以使用最简单的:

text
mean squared error

也就是:

  1. 取真实值。
  2. 取预测值。
  3. 二者相减。
  4. 平方。
  5. 对所有 word pairs 求和或平均。
  6. 最小化这个误差。

如果模型能完全预测 co-occurrence matrix,每个误差项都会接近 0

三十四、Context 如何进入 Co-Occurrence Matrix

学生问:如果同一个词在不同 context 中含义不同,例如 banana 可以是 fruit,也可以出现在 going bananas 中,模型如何区分?

老师解释,co-occurrence matrix 中每一行不是只看某一个 pair,而是看一个 word 与所有 vocabulary words 的共同出现模式。

例如:

  • apple 对所有 words 有一整行 co-occurrence counts。
  • banana 也有一整行 co-occurrence counts。

如果 applebanana 在很多 context 中可互换,它们的 row vectors 会非常相似。

因此:

context 通过整行 co-occurrence pattern 进入模型。

words which are similar will “zig and zag together” through the co-occurrence matrix。

三十五、Co-Occurrence Matrix 的对角线

学生问:

co-occurrence matrix 的 diagonal 是什么?例如 apple 出现两次怎么办?

老师回答:

通常可以忽略 diagonal。

因为主要信息在 off-diagonal entries 中。

三十六、相关词、无关词与反义词的 Row Patterns

老师进一步说明:

  • 相关 words 的 row vectors 会有相似 patterns。
  • 无关 words 的 row vectors 相关性可能接近 0
  • 某些 never show up in the same place 的 antonyms 可能呈现较强负相关,接近 -1

如果 embeddings 能重建这些 row patterns,就说明它们捕捉了 underlying word-word correlational structure。

三十七、Polysemy 的限制

学生继续追问,banana 在 fruit 意义和 going bananas 意义下如何处理。

老师回答,这属于:

text
polysemy

即同一个 word form 可以有多种含义。

standalone embedding 会把多种用法压成某种 average representation。

老师强调,对这个 average 表示并不满意,后面会用 contextual embeddings 解决。

三十八、Embeddings 是要学习的 Coefficients

有学生问,mean squared error 中的 embeddings 从哪里来。

老师解释:

  • embeddings 还没有被计算出来。
  • 它们就像 regression 中的 beta coefficients。
  • Xij 是 data。
  • wiwj 和 biases 是要通过优化求出来的 coefficients。

可以先随机初始化这些 weights,再不断调整以降低 error。

三十九、Pseudo-Random Numbers

学生问,随机初始化中的 random 是谁产生的,既然 computer 是 deterministic,随机是否真的随机。

老师回答,这是一个很深的问题。

计算机中的随机数通常是:

text
pseudorandom numbers

它们来自 deterministic processes,但有专门的数学领域研究如何让这些数字“足够随机”。

在实际机器学习中,系统内置 random number generators,通常直接使用。

四十、Gradient Descent 再次登场

老师问学生,什么算法可以从 random starting point 出发,不断降低 error。

学生回答:

text
gradient descent

老师确认,并进一步说可以使用:

text
stochastic gradient descent

重要点是:

gradient descent 不要求模型一定是 neural network。

只要函数 differentiable,并且能计算 good gradients,就可以使用 gradient descent。

在这里,GloVe 不是一个 neural network per se,但仍然可以用 gradient descent 训练。

训练完成后:

  • embeddings 会被保留。
  • biases 可以丢弃。

因为最终关心的是 embeddings 之间的关系。

四十一、是否在预测 Co-Occurrence Matrix

学生问:

regression 是否在预测 co-occurrence matrix?

老师回答:

text
Exactly.

模型通过 embeddings 和 biases 预测每个 Xij 的 transformed count。

四十二、Deep Learning 的数值例子

老师用 deep learning 举一个手算例子。

假设:

  • word 1 是 deep
  • word 2 是 learning
  • embedding vector 只有 2 dimensions。
  • 需要学习 b1b2
  • co-occurrence count 是:
text
104

模型把:

text
log(104)

作为 actual value。

prediction 由:

  • b1
  • b2
  • 两个 2D embedding vectors 的 dot product

共同组成。

然后对:

text
actual - prediction

求平方。

对所有 word pairs 都做同样计算,再用 gradient descent minimize。

四十三、Embedding Dimension 是人为选择的

老师说明,前面使用 2 dimensions 只是为了手算方便。

一般情况下,embedding vector 的长度由建模者选择。

embedding dimension 越长:

  • 模型越灵活。
  • 越能重建复杂 co-occurrence structure。
  • 参数越多。
  • 过拟合风险也越高。

因此,embedding dimension 是一个需要选择的 hyperparameter。

四十四、数据量与参数量问题

学生问:是否会出现 parameters 比 data points 更多的问题?

老师用简单例子说明,在 co-occurrence matrix 场景下不一定如此。

假设:

  • 10 个 words。
  • 每个 word 有 2 维 embedding。

参数包括:

  • 10 * 2 = 20 个 embedding parameters。
  • 10 个 biases。
  • 总计约 30 个 parameters。

但 co-occurrence matrix 有:

text
10 x 10 = 100

个 entries。

因此在这个例子中,data entries 比 parameters 多。

老师补充,在其他 neural network 场景中,传统 data/parameter/overfitting 假设有时会被挑战。如果感兴趣,可以搜索:

text
double descent

四十五、Embeddings 与 One-Hot 的对比

one-hot vectors:

  • 长度等于 vocabulary size。
  • 大部分位置是 0
  • 只有一个位置是 1
  • 不能表达语义关系。

word embeddings:

  • dense。
  • low-dimensional。
  • numbers 是从 data 中学习的。
  • 每个 dimension 不一定可解释。

老师举例,某个 dimension 可能混合了:

  • brightness
  • speed
  • animalness

但人类通常不知道具体含义。

只要它能重建 co-occurrence matrix,就说明它学到了某种结构。

四十六、t-SNE 可视化

训练出 embeddings 后,可以将它们可视化。

老师说明,图中不是直接取前两个 dimensions,而是使用:

text
t-SNE

t-SNE 可以把长 vectors 投影到 2D space 以便 visualization。

在可视化中,可以看到一些概念聚集:

  • brother
  • nephew
  • uncle
  • sister
  • niece
  • aunt
  • man
  • woman
  • sir
  • madam
  • heiress
  • heir
  • duke
  • emperor
  • king

相似概念聚在相近空间区域,这说明 embeddings 捕捉到了一些语义结构。

四十七、Word Vector Algebra

老师强调,embedding 的方向也有意义。

例如,从 manbrother 的 arrow 可能表示:

text
person → sibling

如果把同样的 arrow 从 woman 出发,期望得到:

text
sister

这类关系叫:

text
word vector algebra

或:

text
embedding algebra

老师给出的典型关系是:

text
brother - man + woman = sister

这不是人工告诉模型的,而是从 co-occurrence patterns 中自然学出来的。

四十八、Synonyms 不是因为直接同句出现

学生问:synonyms 不是通常不会在同一句中互相替换出现吗?模型如何通过 context 找到它们?

老师回答,关键不在于 synonyms 是否互相出现在同一句中。

关键是:

它们与其他 words 的 co-occurrence patterns 相似。

即使两个词不直接共现,只要它们在相似 contexts 中与相似的其他词共现,它们的 row patterns 就会相似。

四十九、二维图只是 Visualization

学生问,如何在 2D matrix 中捕捉多种方向和关系。

老师解释:

图只是 visualization。

真实 GloVe embeddings 可以有很多 dimensions,例如 100 维。

图中只是把高维 embeddings 投影到 2D space 以观察结构。

五十、Bias in Embeddings

学生问:如果 co-occurrence matrix 的 input data 有 bias,模型是否会 amplify bias?

老师回答:

text
Yes.

任何从 internet scrape 的 data 都会带有生产这些数据时的社会和文化 bias。

模型会 faithfully learn those biases。

如果不小心,它还会 perpetuate them。

老师指出,这是非常重要的话题,但课程因为时间限制不会展开。

五十一、Embedding Dimension 如何选择

学生问如何思考 embedding dimensionality。

老师回答:

把它当作 hyperparameter。

选择方式类似 hidden layer units:

  1. start small。
  2. 如果能解决任务,就保持简单。
  3. 如果不够,再增加 dimension。
  4. 当表现开始 flatten 或出现 overfitting,就停止。

五十二、Regularization 与 Penalized Regression

学生问,是否可以用 penalized regression 或类似方法,让 embeddings 更 sparse 或降低 magnitude。

老师回答,可以。

在估计这些 numbers 的过程中,可以使用很多 regularization 技术。

本节课只是使用最简单版本。

五十三、为什么 Embedding 也要担心 Overfitting

学生问:如果 embedding 不是为了 out-of-sample prediction,为什么还担心 overfitting?是否应该高维度捕捉所有 unique relationships?

老师回答,即使不直接做 out-of-sample prediction,也希望模型捕捉:

text
signal

而不是:

text
noise

如果 embeddings 学到了 noise,那么基于 embeddings 得到的 insights 也可能有问题。

因此,overfitting 仍然需要关注。

五十四、何时使用 Pre-Trained GloVe Embeddings

老师总结 GloVe 等 pre-trained embeddings 的优点。

如果没有足够数据学习 task-specific embeddings,可以使用预训练 embeddings。

理由是:

language 中很多基础规律是通用的。

例如 English 的基本语义和词义关系,不必让每个小任务都从头学习。

可以:

  1. 在大规模语料上学习通用 embeddings。
  2. 在具体 use case 中 piggyback on them。
  3. 根据任务 fine tune 或 adapt。

这种做法在任务数据较少时尤其有用。

五十五、Pre-Trained Embeddings 的缺点

预训练 embeddings 的缺点是:

它们不一定适合你的 data。

例如:

  • medical use case 有大量 medical jargon。
  • legal use case 有大量 legal jargon。

如果 embeddings 是在 Wikipedia 上训练的,它们可能无法准确捕捉这些 domain-specific terms。

此时可以:

  • 先使用 pre-trained embeddings。
  • 再用 domain-specific dataset fine tune。
  • 或者直接从 scratch 学习 embeddings。

本节 Colab 会展示这些选项。

五十六、Keras 中 STIE 的职责划分

Keras 中使用 embeddings 时,老师重新划分了 STIE

此前:

  • TextVectorization 直接输出 multi-hot 或其他 encoding。

现在:

  • TextVectorization 只做 STI
  • Embedding layer 负责 E,也就是从 integer 到 vector。

因此,TextVectorization 的输出不再是 multi-hot vector,而是 integer sequence。

五十七、TextVectorization 输出 int

TextVectorization 中设置:

text
output_mode = "int"

含义是:

做完 standardization、tokenization 和 indexing 后,直接返回 integers。

这样就停止在 STI 阶段,把 encoding 留给 Embedding layer。

五十八、Padding 与 Truncation

输入 sentences 长度不同,但 neural network 需要统一长度。

做法是设定:

text
max length

如果 sentence 正好等于 max length,就直接使用。

老师举例:

text
cat sat on the mat

如果 max length 是 5,这句话刚好适配。

如果 sentence 更短,例如:

text
I love you

只有 3 个 tokens,就用:

text
pad token

补齐。

如果 sentence 更长,就 truncate,只保留前 max length 个 tokens。

五十九、PAD 与 UNK

老师说明,在 Keras 中 padding 通常使用:

text
0

作为 pad token 的 index。

后面在 Colab 中会看到:

  • index 0pad
  • index 1unk

这与上一节 multi-hot 场景不同。

上一节中 UNK 是 index 0;本节因为需要 padding,所以 pad 占据 index 0UNK 变成 index 1

六十、Embedding Layer 的本质

Embedding layer 本质上是一张 lookup table。

如果 vocabulary 有:

text
5000 tokens

并且 embedding dimension 是:

text
d

那么 embedding layer 可以看成:

text
5000 x d

的矩阵。

每一行对应一个 token 的 embedding vector。

Keras 中可以使用:

text
keras.layers.Embedding

并指定:

  • max_tokens:vocabulary size,也就是行数。
  • embedding dimension:每个 vector 的长度,也就是列数。

六十一、Embedding Lookup Flow

当一个 input sentence 到来时:

  1. TextVectorization 执行 STI
  2. 句子被 padding 或 truncation 到固定长度。
  3. 得到一串 token integers。
  4. Embedding layer 根据 integers 查表。
  5. 每个 integer 被替换成对应 embedding vector。

例如,如果 max length 是 5,某句话被表示成:

text
23, 9, 5, 0, 0

那么 embedding layer 会查出 index 239500 对应的 vectors。

输出是:

text
5 embedding vectors

也就是一张 table。

六十二、Embedding Table 如何变成一个 Vector

例如:

text
I love you

经过 embedding lookup 后,会得到一个 table,而不是单个 vector。

但普通 dense neural network 需要 vector input。

可以有几种处理方式:

  • concatenate 所有 embeddings,形成一个长 vector。
  • sum embeddings。
  • average embeddings。

本节课采用最简单的:

text
average

六十三、GlobalAveragePooling1D

Keras 中,平均 embedding table 可以使用:

text
GlobalAveragePooling1D

它会对每个 dimension 分别求平均。

例如:

  • 对第 1 个 embedding dimension 求平均。
  • 对第 2 个 embedding dimension 求平均。
  • 依此类推。

结果是一个 fixed-length vector,可以送入后续 hidden layers。

六十四、Embedding Model 的整体 Flow

本节模型 flow 可以概括为:

  1. phrase 输入。
  2. TextVectorizationSTI
  3. 对 sequence 做 padding 或 truncation。
  4. Embedding layer lookup embedding vectors。
  5. GlobalAveragePooling1D 将 table 平均成 vector。
  6. 将 vector 送入 dense layers。
  7. 输出 classification result。

老师说明,Colab 会完全对应这个流程。

六十五、Colab 数据与准备

进入 Colab 后,老师做常规准备:

  • import required packages。
  • 引入前面 Colabs 中绘制 loss 和 accuracy curves 的 functions。
  • 使用上一节课同一个 songs dataset。
  • 数据中约有:
text
49,000 examples
  • labels 会做 one-hot encoding。

六十六、下载并查看 GloVe Vectors

老师使用了已经下载好的 GloVe vectors。

这些 vectors 来自一个 URL,下载需要几分钟,老师课前已经下载并解压。

老师后面提到,这些 GloVe weights 是别人投入大量成本训练出来的,并特别提到 Stanford

本节使用的是:

text
100-dimensional GloVe vectors

数据规模是:

text
400,000 word vectors

每个 vector 长度是:

text
100

这些 vectors 是用前面讲的模型和 gradient descent 从 Wikipedia 计算出来的。

老师展示了 movie 的 vector,并说明虽然不知道每个 dimension 具体含义,但这些 numbers 中显然捕捉到了某种结构。

六十七、Max Length = 300

老师设置 songs/lyrics 的 max sequence length 为:

text
300

原因是数据中约:

text
90%

的 songs 长度小于或等于 300 words。

如果取最大长度,可能会有极少数 songs 达到 3000 words。

为了这些少数长文本而把所有 inputs 都 padding 到 3000 会浪费大量 capacity。

因此,老师选择 300 是一个 pragmatic choice。

六十八、Vocabulary Size = 5000

和上一节类似,老师让 Keras 只使用训练语料中最常见的:

text
5000 words

也就是:

text
max_tokens = 5000

同时设置:

text
output_mode = "int"

这样 TextVectorization 会返回整数序列,而不是 multi-hot vector。

六十九、Adapt 后的 PAD 与 UNK

老师用所有 lyrics 对 TextVectorization layer 做 adapt

随后查看 vocabulary 前几项时强调:

  • index 0 是 padding / empty string。
  • index 1UNK

这和上一节不同。

老师测试:

text
HODL you're the best

HODL 不在 vocabulary 或 GloVe vectors 中,因此显示为 unknown,对应 index:

text
1

后面直到长度 300 的剩余位置都会用:

text
0

padding。

七十、Embedding Matrix 为什么是 5000 x 100

虽然下载了:

text
400,000

GloVe vectors,但本模型的 embedding matrix 只有:

text
5000 x 100

原因是:

  • TextVectorization 只保留 lyrics corpus 中最常见的 5000 个 tokens。
  • 模型只需要这 5000 个 tokens 的 embeddings。
  • 每个 GloVe vector 长度是 100

因此,只抽取这 5000 个 tokens 对应的 GloVe vectors,构成 embedding matrix。

前两行是 zeros,因为:

  • row 0pad
  • row 1unk

GloVe 本身没有这两个 token 的语义向量。

七十一、用 GloVe 初始化 Embedding Layer

构建 Embedding layer 时:

  • 行数是 max_tokens,即 5000
  • embedding dimension 是 100
  • weights 使用前面构造的 GloVe embedding matrix。

也就是告诉 Keras

直接用下载好的 GloVe vectors 作为 embedding layer 的 weights。

七十二、Frozen GloVe

老师首先设置:

text
trainable = False

含义是:

backpropagation 时不要更新 GloVe embeddings。

老师解释,GloVe embeddings 是别人花了大量成本训练出来的,因此先把它们 freeze,只按原样使用。

他还提到 mask_zero,但说会稍后再回到这个细节,本节此处先不展开。

七十三、Frozen GloVe 模型结构

模型结构是:

  1. Keras Input
  2. input length:300
  3. Embedding layer
  4. embedding output:300 x 100
  5. GlobalAveragePooling1D
  6. pooled vector:100
  7. dense layer:8ReLU neurons
  8. output layer:3-way softmax

输出类别仍然是:

  • hip hop
  • rock
  • pop

七十四、Frozen GloVe 的参数数量

model summary 显示:

text
total parameters = 500,835

但 trainable parameters 只有:

text
835

原因是:

  • 5000 x 100 = 500,000 个 embedding parameters 来自 GloVe。
  • 这些 embedding weights 被 freeze。
  • 只有后面新增的 dense/output layers 可训练。

七十五、Global Average Pooling 是否会丢失意义

学生问:对 applelearning 等不同 words 的 embeddings 做 average,会不会丢失 embedding 已经捕捉到的意义?

老师回答:

会丢失很多 nuance。

任何 averaging 都会丢失细节。

关键问题是:

尽管丢失细节,它是否足够好?

很多时候它确实够用。

但 contextual embeddings 会提供更好的方式,只是需要更大的模型和更强的计算能力。

七十六、为什么不一起优化 Embeddings

学生问:既然整体优化通常更好,为什么不让 embeddings 也参与训练?

老师回答:

可以,而且下一步就会这样做。

先 freeze embeddings 的原因是:

  • 更快。
  • 先展示不训练 embeddings 也可以使用。
  • 再比较 trainable embeddings 是否更好。

老师还说,后面也会展示从 scratch 训练自己的 embeddings;如果时间不够,会放到 Monday。

七十七、model.layers 检查 Weights

老师提到一个 Keras 小技巧:

text
model.layers

会返回模型中所有 layers 的 list。

可以取出任意 layer,并查看它的 weights。

老师用它查看 embedding layer 的前几行,看到前两行是 zeros,对应 padunk

七十八、Frozen GloVe 的训练设置

编译和训练设置与前面类似:

  • optimizer:Adam
  • loss:cross-entropy
  • metric:accuracy

然后调用 fit

老师预告,在这个具体任务中,pre-trained embeddings 不会帮太多。

可能原因包括:

  • GlobalAveragePooling1D 平均了很多 embeddings,损失信息。
  • GloVe 在 Wikipedia 等 corpus 上训练,而 song lyrics 的语言分布不同。
  • 当前任务有约 50,000 examples,数据量并不小。

七十九、为什么小数据更适合 Pre-Trained Models

老师总结经验:

当 data 很小时,应优先尝试 pre-trained model。

因为可以 piggyback on 大语料或大模型已经学到的东西。

他类比上一节 handbags vs shoes:

  • 只有约 100 个 handbags 和 shoes examples。
  • 使用 ResNet 后达到 100% accuracy。

同样逻辑也适用于 text embeddings。

八十、Frozen GloVe 的结果

训练曲线表现比较 well-behaved。

loss 曲线没有 massive overfitting,training 和 validation 大致同步。

但最终 accuracy 约为:

text
63%

老师指出,这不如上一节用全部约 50,000 examples 从 scratch 训练的简单模型。

原因是当前数据量较大,pre-trained embeddings 的优势不明显。

八十一、Fine-Tuning GloVe

接下来老师按照学生提出的思路,让 embeddings 也参与训练。

关键变化是:

text
trainable = True

其他结构基本不变。

这样 backpropagation 会更新 GloVe embedding weights。

老师提醒:

  • 不确定一定会更好。
  • 可能会 overfit。
  • 必须 empirically check。

八十二、训练更久是否还有提升

学生观察第一张曲线中 training accuracy 仍在上升,问是否可以继续训练。

老师回答:

  • training accuracy 通常会随着训练继续提高。
  • 关键是 validation 是否也继续提高。
  • 如果 validation 继续提高,说明还有提升空间。
  • 如果 validation flatten,甚至下降,就应该停止或回退。

八十三、100 维 GloVe 向量是什么意思

学生问:

max_tokens = 5000 限制了 vocabulary,那么 embedding width 100 是什么?

老师回答:

text
100

GloVe vector 的长度。

它不表示只能关联 100 个其他 words。

它表示:

每个 word 的 intrinsic meaning 被表示为一个 100-dimensional vector。

每个 dimension 可能代表某种 latent factor,但人类不知道具体含义。

老师举例:

  • dimension 1 可能与 color 有关。
  • dimension 2 可能与 location 有关。
  • dimension 3 可能与 time of year 有关。

但这只是直觉,人类并不知道真实含义。

甚至创建 GloVe 的人也不知道每个 dimension 的具体语义。

他们只知道这些 100-long vectors 能较好地重建 co-occurrence matrix,并在 man/woman/sister/brother 等可视化中呈现合理结构。

八十四、Embedding Dimensions 与 CNN Filters 的类比

学生问,embedding dimension 是否类似 CNN 中 filter/kernel 数量。

老师认为这是一个很好的类比。

在 CNN 中:

  • 可以决定有多少 filters。
  • filters 越多,能学习的 patterns 越多。

在 embeddings 中:

  • 可以决定 embedding dimension 有多长。
  • dimension 越多,能容纳的 latent factors 越多。

但两者都不能无限增加。

如果太大,可能开始学习 noise。

八十五、为什么不用 Co-Occurrence Matrix Rows 直接表示 Words

学生问:

为什么不用 co-occurrence / correlation matrix 的 row vector 直接表示 word,而要学习 embeddings?

老师给出两个直接原因。

85.1 Row 太长

如果 vocabulary 有:

text
500,000

个 words,那么每一行就是长度:

text
500,000

的 vector。

这太长。

embeddings 提供更 compact、dense 的表示。

85.2 原始 counts 不可直接比较

co-occurrence rows 受 Wikipedia corpus 的 raw counts 影响。

需要 normalization,否则不同 rows 的 dot product 可能不可比较。

老师说,这些问题理论上可以处理;过去也有人常这样做。

但实践中,现代 embedding learning 方法通常更有效。

八十六、Embeddings 是关系的紧凑表示

学生总结:

这个过程创建了一个 n-dimensional、难以解释的 matrix,本质上捕捉了这些关系的 summarized version。

老师确认:

它是 relationships 的 compact representation,而且不受 vocabulary size 直接支配。

老师还举例,新词如 selfie 出现后,corpus 会变化;compact embeddings 通常有更长的 shelf life。

八十七、Fine-Tuned GloVe 的结果

fine-tuning GloVe 后,模型效果从约:

text
63%

提升到接近:

text
68% - 69%

老师指出:

训练 GloVe embeddings 本身确实有帮助。

这引出下一步:

如果 fine-tuning 有帮助,是否可以完全不用 GloVe,从 scratch 训练自己的 embeddings?

八十八、从零训练 Task-Specific Embeddings

老师接着构建从 scratch 训练的 embedding model。

这一次不使用 GloVe

原因是当前任务有明确 objective:

text
predict song genre

GloVe 没有 genre prediction 这类下游任务目标;它通过重建 co-occurrence structure 学到通用 embeddings。

对于当前任务,可能更需要:

text
task-specific embeddings

八十九、从零训练时的 Embedding Dimension

从零训练时,老师任意选择 embedding dimension 为:

text
64

而不是 GloVe100

原因之一是:

64 维会跑得更快。

模型结构仍然类似:

  • Embedding layer
  • GlobalAveragePooling1D
  • dense layer
  • 3-way softmax

九十、Pre-Trained GloVe 有哪些维度版本

学生问,使用 GloVe 时是否可以重新定义 embedding 长度,例如改成 10100

老师回答:

GloVe 文件本身已经预先打包成固定长度。

本节使用的是 100 维版本。

老师记得 GloVe 也可能有:

  • 200
  • 300

等版本。

用户可以从可用版本中选择,但不能任意把一个已训练好的 100 维 GloVe vector 直接“重定义”为 10 维。

九十一、是否应通过训练 Embeddings 获得真正性能变化

学生将 embeddings 与 CNN filters 类比,问:

如果想要 genuine performance improvement,是否应进入 retraining embeddings 的层面?

老师回答,当前实验看到:

  • 使用 frozen GloVe:可以,但效果一般。
  • 使用 GloVe 并让它 trainable:帮助明显。
  • 放弃 GloVe,从 scratch 训练 task-specific embeddings:值得尝试。

老师总结:

GloVe 是 general-purpose tool。数据少时,它是很好的 starting point;数据多时,应尝试训练自己的 task-specific embeddings,看是否更好。

九十二、从零训练 Embeddings 的结果

从 scratch 训练 embeddings 后,模型最终达到约:

text
72%

老师指出,因为有约 50,000 examples,可以训练自己的 embeddings,并得到更好的结果。

这个结果与上一节 simple Bag of Words 模型的结果相近,也优于 frozen GloVe 和 fine-tuned GloVe 的本节示例。

九十三、本节课三种 Embedding 使用方式对比

本节 Colab 展示了三种方式:

  1. 使用 frozen pre-trained GloVe embeddings。
  2. 使用 pre-trained GloVe initialization,但设置 trainable=True 进行 fine-tuning。
  3. 不使用 GloVe,从 scratch 学习 task-specific embeddings。

结果大致为:

  • frozen GloVe:约 63% accuracy。
  • fine-tuned GloVe:约 68%69% accuracy。
  • scratch task-specific embeddings:约 72% accuracy。

老师强调,这不是普遍结论,而是本数据集上的结果。

选择哪种方式要看:

  • 数据量大小。
  • 预训练 corpus 与任务 corpus 是否匹配。
  • 是否容易 overfit。
  • 是否需要 domain-specific semantics。

九十四、本节课核心总结

本节课的知识链条可以概括为:

  • one-hot vectors 简单有效,但 vector 长度等于 vocabulary size,计算成本高。
  • 任意两个不同 one-hot vectors 的 Euclidean distance 都是 sqrt(2),无法表达 word meaning。
  • 好的 word vectors 应该让 semantic relationship 对应 geometric relationship。
  • word embeddings 是 dense、low-dimensional、learned vectors。
  • standalone embeddings 可以表达平均词义,但不能处理强上下文依赖。
  • bankbanana 等多义词说明 context 是必要的。
  • contextual embeddings 会在后续通过 transformers 计算。
  • John Firth 的思想是:通过一个词所处的 context 理解这个词。
  • 本节把 context 简化定义为 same sentence。
  • co-occurrence matrix 统计 word pairs 在同一句中共同出现的次数。
  • GloVe 通过学习 embeddings 来近似重建 co-occurrence matrix。
  • Xij 是 co-occurrence data,wi 是 word embedding,bi 是 word bias。
  • 对 counts 取 log 可以缓解长尾分布问题,log(0) 可通过加 1 避免。
  • 使用 mean squared error 和 gradient descent 可以学习 embeddings。
  • embedding dimension 是 hyperparameter,越大越灵活,也越可能 overfit。
  • t-SNE 可用于将高维 embeddings 投影到 2D 进行 visualization。
  • word vector algebra 显示 direction 也有语义,例如 brother - man + woman = sister
  • 互联网数据 bias 会被 embeddings 学到并可能延续。
  • Keras TextVectorization 在 embedding pipeline 中只做 STIEmbedding layer 负责 E
  • output_mode="int" 返回 integer sequence。
  • padding 使用 index 0UNK 使用 index 1
  • GlobalAveragePooling1D 可以把 embedding table 平均成一个 vector。
  • 预训练 GloVe 在小数据任务上可能很有用;数据较多时,fine-tuning 或从零训练 task-specific embeddings 可能更好。

最核心的思想是:

Embeddings 将 words 从稀疏、无语义距离的 one-hot indicators,变成可学习的 dense vectors;这些 vectors 通过 co-occurrence patterns 获得语义结构,但 standalone embeddings 仍然只是平均意义,真正处理上下文需要后续的 transformers。

最后更新于: