乐于分享
好东西不私藏

Word2Vec、GloVe 是怎么训练出来的?一篇看懂AI"造字典"的全过程

Word2Vec、GloVe 是怎么训练出来的?一篇看懂AI"造字典"的全过程

上一篇我们讲了词向量是什么——把每个词变成一张高维地图上的坐标。

那么问题来了:这张地图,机器到底是怎么画出来的?

今天我们继续用大白话,把 Word2Vec、GloVe、FastText、BERT 这四个名字背后的故事讲明白。

放心,公式只在关键处出现,每个都会翻译成人话。


一、训练词向量的”灵魂一句话”

如果你只能记住一句话,就记这一句:

“判断一个词的意思,看它身边都跟谁混。”

这是语言学家 J. R. Firth 在 1957 年说的:”You shall know a word by the company it keeps.”

这句话之所以重要,是因为它把一个哲学问题(什么是意义)变成了一个统计问题(数一数词的邻居)。

所有词向量训练方法,都是在用各自的招式回答同一个问题——怎么用”邻居”来定义”自己”。


二、Word2Vec:让词去做”完形填空”

2013 年,Google 的研究员 Tomas Mikolov 提出了 Word2Vec。它的训练方式,简单得让人怀疑人生:

让机器做完形填空。

Skip-gram:用中心词猜邻居

随便抓一句话:

“猫在沙发上睡觉”

设一个”窗口大小”,比如 2。我们盯住中心词 “沙发”,问机器:

给你”沙发”,请你猜出它周围 2 个位置内会出现哪些词?

正确答案是:”猫”、”在”、”上”、”睡觉”。

机器一开始当然乱猜。但每次猜错,就把”沙发”的词向量微调一点点——往让正确答案概率变大的方向调。

读完几亿个句子,”沙发”的向量就被它的几亿个邻居反复打磨,最后稳定在一个能准确预测”客厅家具语境”的位置上。

用一个简化公式表达:

看着唬人,其实就一件事:让”沙发”的向量和”猫、睡觉”的向量算内积时数值大,和”火箭、量子”的向量算内积时数值小。 内积大 = 方向接近 = 意思接近。

CBOW:用邻居猜中心词

Skip-gram 反过来玩,就是 CBOW(Continuous Bag of Words):给你”猫”、”在”、”上”、”睡觉”,让你猜中间那个词是什么。

两种玩法殊途同归,最终都让”语境相似的词”在地图上靠拢。

为什么这么神?

最妙的地方在于:机器从头到尾都没人教它”沙发是家具”。 它只是在做完形填空,但做着做着,”沙发”自然就跑到了”椅子、桌子、床”附近。

意思,是从”猜邻居”这个游戏里涌现出来的。


三、GloVe:换个思路,直接看”账本”

Word2Vec 是逐句扫描、一边走一边学。2014 年,斯坦福的研究员觉得太慢,提出了另一个思路——GloVe(Global Vectors)。

GloVe 的想法是:

我先把整个语料里所有词的”共现次数”统计成一张大表,再让模型去拟合这张表。

什么叫”共现次数”?就是两个词一起出现的频率

比如统计完几十亿字的中文文本,你可能得到这样一张账本:

共现次数
沙发
椅子
火箭
客厅
8,234
5,102
12
发射
3
5
9,876
6,711
8,902
7

意思相近的词(沙发、椅子),它们的”共现习惯”也相似。

GloVe 让模型学的目标长这样:

翻译成人话:两个词向量的内积,应该接近它们共现次数的对数。

为什么是对数?因为”出现 1000 次”和”出现 1001 次”差别不大,但”出现 1 次”和”出现 10 次”差别巨大——对数刚好能压扁高频、放大低频。

Word2Vec vs GloVe,怎么选?

  • • Word2Vec:像背单词,一句一句读,记忆深刻但慢
  • • GloVe:像查字典,先列大表再优化,全局视野更好

实际效果两者旗鼓相当,工业界经常一起用。


四、致命短板:词典外的词怎么办?

Word2Vec 和 GloVe 看似完美,但有一个致命缺陷

它们只认识训练时见过的词。

举个例子:

  • • 训练时见过”跑步”、”跑者”、”跑道”
  • • 训练时没见过“跑酷”

那么”跑酷”这个词在模型眼里就是——一片空白。哪怕它和”跑步”明显有亲缘关系,模型也无能为力。

更要命的是中文里的网络新词、英文里的拼错单词(”tokenizationn” 多打了个 n),全都会让模型抓瞎。

这种问题叫 OOV(Out-Of-Vocabulary,词典外)问题


五、FastText:把词拆成”零件”再学

2016 年,Facebook 的 AI 团队(领头的还是那位 Tomas Mikolov,从 Google 跳槽过来了)提出了 FastText

它的解法又简单又聪明:

既然整词查不到,那就把词拆成”字符片段”,每个片段都给一个向量。

比如英文单词 apple,FastText 把它拆成:

<ap, app, ppl, ple, le>

<> 是词的起始/结束标记)

然后 apple 这个词的向量 = 这些零件向量的总和。

好处立刻就来了:

  • • 哪怕训练时没见过 apples(复数),FastText 也能拆出 <ap, app, ppl, ple, les, es>,靠零件凑出一个还不错的向量。
  • • 中文里没见过”区块链”?没关系,”区块”、”块链”这些零件之前都见过,拼起来就有意义了。
  • • 拼错的 aple?也能拆零件凑个差不多的向量出来。

FastText 的核心贡献是:让词向量从”整词单位”进化到了”子词单位”。 这个思想后来直接影响了所有大模型的分词方式(BPE、WordPiece、SentencePiece)。


六、转折点:词向量为什么”不够用”了?

到这里你可能觉得,词向量已经很完美了。

但仔细想想,Word2Vec、GloVe、FastText 都有一个共同的局限

每个词只有一个固定向量。

可是——

  • • “苹果手机真好用” 中的”苹果”
  • • “我吃了一个苹果” 中的”苹果”

是同一个意思吗?显然不是。前者是公司,后者是水果。

但在 Word2Vec 眼里,“苹果”永远只有一个向量,要么偏向科技、要么偏向水果,做不到根据上下文变化

这种”一词一向量”叫 静态词向量(Static Embedding)

要解决这个问题,需要一种全新的思路。


七、BERT:让每个词的向量”随上下文呼吸”

2018 年,Google 发布了 BERT(Bidirectional Encoder Representations from Transformers),词向量的玩法被彻底改写。

BERT 的核心理念:

同一个词在不同句子里,应该有不同的向量。

这叫 动态词向量(Contextual Embedding)

BERT 是怎么训练的?

BERT 也是在做完形填空,但玩法升级了——叫 Masked Language Model(掩码语言模型)

给它一个句子:

“我今天去

里买了点水果”

把中间随机一个词盖住,让 BERT 猜。和 Word2Vec 不同的是:

  1. 1. BERT 用了 Transformer 这个架构,能同时看左边和右边的全部上下文
  2. 2. 它输出的不是一个固定向量,而是根据整句话动态计算出来的向量

所以在”苹果手机”这句话里,BERT 给”苹果”算出的向量会偏向科技语境;在”吃苹果”这句里,又会偏向水果语境。

同一个字,因语境而活。

BERT 还会做”句子配对”

除了完形填空,BERT 还训练了另一个任务:Next Sentence Prediction(下一句预测)——给它两个句子,让它判断是不是上下相连的。

这让 BERT 学会的不只是词义,还有句子之间的逻辑关系


八、一张表,看懂四代词向量

模型
年份
核心思想
解决的问题
局限
Word2Vec
2013
完形填空(局部窗口)
让词有意义的坐标
一词一向量、OOV
GloVe
2014
拟合全局共现矩阵
全局信息更充分
一词一向量、OOV
FastText
2016
子词拆解,零件相加
OOV、形态丰富的语言
仍是一词一向量
BERT
2018
Transformer + 掩码
一词多义、上下文敏感
计算成本高

每一代都在补上一代的短板。这是一条非常漂亮的进化链。


九、写在最后:从词向量到大模型

回头看,这条路走得既清晰又惊艳:

  • • Word2Vec 让人们第一次意识到:意义可以是数字。
  • • GloVe 证明了:统计的力量同样强大。
  • • FastText 教会模型:拆开看,能学到更多。
  • • BERT 打开了新世界:意义不是固定的,而是流动的。

而你今天用的 ChatGPT、Claude、文心一言、通义千问,本质上都是 BERT 这条路上的孙辈——它们用更大的模型、更多的数据、更聪明的训练目标,把”动态词向量”这个思路推到了前所未有的高度。

下次再有人跟你聊”大模型”,你可以从容地告诉他:

“其实它的故事,要从 2013 年那个让机器做完形填空的小游戏说起。”


觉得有用就转发给那个学 AI 入门的朋友吧。