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 的想法是:
我先把整个语料里所有词的”共现次数”统计成一张大表,再让模型去拟合这张表。
什么叫”共现次数”?就是两个词一起出现的频率。
比如统计完几十亿字的中文文本,你可能得到这样一张账本:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
意思相近的词(沙发、椅子),它们的”共现习惯”也相似。
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. BERT 用了 Transformer 这个架构,能同时看左边和右边的全部上下文 -
2. 它输出的不是一个固定向量,而是根据整句话动态计算出来的向量
所以在”苹果手机”这句话里,BERT 给”苹果”算出的向量会偏向科技语境;在”吃苹果”这句里,又会偏向水果语境。
同一个字,因语境而活。
BERT 还会做”句子配对”
除了完形填空,BERT 还训练了另一个任务:Next Sentence Prediction(下一句预测)——给它两个句子,让它判断是不是上下相连的。
这让 BERT 学会的不只是词义,还有句子之间的逻辑关系。
八、一张表,看懂四代词向量
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每一代都在补上一代的短板。这是一条非常漂亮的进化链。
九、写在最后:从词向量到大模型
回头看,这条路走得既清晰又惊艳:
-
• Word2Vec 让人们第一次意识到:意义可以是数字。 -
• GloVe 证明了:统计的力量同样强大。 -
• FastText 教会模型:拆开看,能学到更多。 -
• BERT 打开了新世界:意义不是固定的,而是流动的。
而你今天用的 ChatGPT、Claude、文心一言、通义千问,本质上都是 BERT 这条路上的孙辈——它们用更大的模型、更多的数据、更聪明的训练目标,把”动态词向量”这个思路推到了前所未有的高度。
下次再有人跟你聊”大模型”,你可以从容地告诉他:
“其实它的故事,要从 2013 年那个让机器做完形填空的小游戏说起。”
觉得有用就转发给那个学 AI 入门的朋友吧。
夜雨聆风