一句话定义:Word2Vec 是把词语转成数值向量的一类模型,Skip-gram 是它两种训练方式之一——用一个词去预测它周围的词。
原理:用邻居定义含义
计算机不认识"苹果",只认识数字。要让它理解语言,第一步就是把每个词变成一串数字(向量,vector),并且让意思相近的词,向量也靠得近。
Word2Vec 的巧思在于:它不去查字典,而是让模型玩一个"猜邻居"的游戏。背后的假设很朴素——一个词的意思,由常和它一起出现的词决定。
打个比方:你想知道一个陌生人是干什么的,不必看名片,只看他常和谁待在一起。总在杠铃、蛋白粉旁边出现的,大概率是健身教练。词也一样,"咖啡"旁边常有"喝""苦""提神",它的向量就会自动飘向"饮品"那片区域。
CBOW 与 Skip-gram 到底差在哪
Word2Vec 有两条训练路线,方向正好相反(CBOW 全称 Continuous Bag-of-Words,连续词袋):
| 对比项 | CBOW | Skip-gram |
|---|---|---|
| 输入 → 输出 | 上下文词 → 猜中心词 | 中心词 → 猜上下文词 |
| 类比 | 完形填空 | 给一个词写联想 |
| 训练速度 | 通常更快 | 通常更慢 |
| 低频词表现 | 一般 | 通常更好 |
一句话记:CBOW 是"看周围猜中间",Skip-gram 是"给中间猜周围"。Skip-gram 对冷门词更友好,因为每个词都会单独和它的每个邻居配一次对,出现机会更多。
两者都要靠负采样(AI 词典:Negative Sampling">Negative Sampling)之类的技巧把计算量压下来,否则每一步都要对整个词表做归一化,代价太大。
和后来那些模型的分界
Word2Vec 产出的是静态词向量:一个词永远只有一个向量。"吃苹果"和"苹果手机"里的"苹果"长得一模一样,模型分不出差别。这是它最大的局限,也直接催生了上下文相关表示(contextualized embedding),比如 ELMo、BERT 这条路——同一个词在不同句子里会有不同的向量。
对从业者和普通人的意义
- 它是 embedding 思想的开山之作。推荐系统里的 item2vec、图上的 node2vec,都是"用邻居定义含义"这套思路换个对象再来一遍。
- 工程上,词向量常作为文本分类、聚类、搜索召回的起点特征,快、便宜、够用。
- 经典演示是向量算术:king − man + woman 的结果离 queen 很近,语义关系变成了向量方向上的平移。
对普通人来说:输入法能猜出你下一个词、搜"手机壳"能返回"保护套"的商品,背后都是这类向量在算距离。词有了坐标,语言才终于能被机器"量"出来。
具体实现参数与最新进展,以官方文档和论文页面为准。
