快速了解word2vec模型
你有没有想过,当我们在电脑上输入 “猫” 这个词时,它是怎么知道 “猫” 和 “狗” 都是宠物,而不是和 “汽车”“云朵” 归为一类的?在 Word2Vec 出现之前,电脑对词语的理解其实很 “笨拙”—— 比如用 “one-hot 编码” 把 “猫” 变成一个只有某一位是 1、其他全是 0 的向量,但这种方式完全忽略了词与词之间的语义关联。而 Word2Vec 的出现,彻底解决了这个问题,让词语有了 “语义灵魂”。
一、先搞懂:为什么需要 Word2Vec?
在聊 Word2Vec 之前,我们先吐槽下传统的词表示方法 ——one-hot 编码:
比如词典里有 “猫、狗、汽车、云朵”4 个词,那么:
- 猫 = [1, 0, 0, 0]
- 狗 = [0, 1, 0, 0]
- 汽车 = [0, 0, 1, 0]
这种方式的问题很明显:
- 维度爆炸:如果词典有 10 万个词,每个词的向量就有 10 万维,计算量巨大;
- 无语义关联:“猫” 和 “狗” 的向量相似度为 0,电脑完全不知道它们都是 “宠物”。
而 Word2Vec 的核心作用,就是把每个词变成一个低维实数向量(比如 50-300 维),且向量之间的 “距离” 能反映语义关联 —— 比如 “猫” 的向量和 “狗” 的向量很接近,和 “汽车” 的向量很远。
二、Word2Vec 的核心思想:词随境迁
Word2Vec 的灵感来自一句朴素的话:“物以类聚,词以群分”(即分布式假设:上下文相似的词,语义也相似)。
比如下面两句话:
- 我家的【猫】喜欢吃小鱼干;
- 邻居家的【狗】喜欢吃小鱼干。
“猫” 和 “狗” 的上下文(“喜欢吃小鱼干”)很像,所以 Word2Vec 会认为它们的语义相近,对应的向量也会更接近。
本质上,Word2Vec 是通过 **“预测上下文”** 来学习词向量的 —— 它不直接定义 “语义”,而是通过 “一个词周围的词是什么” 来反向推断这个词的含义。
三、两种核心模型:CBOW vs Skip-gram
Word2Vec 包含两种简单但高效的模型,核心区别在于 “谁预测谁”。
1. CBOW(连续词袋模型):用上下文预测中心词
简单说:把中心词周围的词(上下文)作为输入,预测中间的中心词。
比如句子 “我 爱 中 国”,如果取 “上下文窗口大小 = 2”(即中心词前后各 2 个词):
- 当中心词是 “中” 时,上下文是 “爱、国”;
- CBOW 的任务就是:输入 “爱” 和 “国” 的向量,预测出中心词是 “中”。
CBOW 的特点是速度快、对高频词友好—— 因为高频词的上下文更稳定,预测准确率更高。
2. Skip-gram(跳字模型):用中心词预测上下文
和 CBOW 相反:把中心词作为输入,预测它周围的上下文词。
还是以 “我 爱 中 国” 为例,中心词是 “中” 时:
- Skip-gram 的任务是:输入 “中” 的向量,预测出它的上下文是 “爱” 和 “国”。
Skip-gram 的特点是对低频词更友好—— 即使是 “独角兽企业” 这种低频词,只要出现过几次,它也能通过 “预测上下文” 学到相对准确的向量(因为低频词的上下文往往更独特)。
两者的对比可以简单记为:
模型 | 输入 | 输出 | 优势场景 |
---|---|---|---|
CBOW | 上下文词 | 中心词 | 高频词、速度优先 |
Skip-gram | 中心词 | 上下文词 | 低频词、精度优先 |
四、训练的 “小技巧”:解决计算难题
如果直接训练上述模型,会遇到一个大问题:Softmax 计算量太大。
比如词典有 10 万个词,每次预测都要计算 10 万个词的概率(“是不是中心词 / 上下文词”),这显然不现实。Word2Vec 用了两个技巧来解决这个问题:
1. 负采样(Negative Sampling):只关注 “少数词”
核心思路:每次训练时,只更新 “正确词”(正样本)和 “少数错误词”(负样本)的向量,不用更新所有词。
比如预测 “猫” 的上下文是 “狗”(正样本)时,我们再随机选几个无关的词(比如 “汽车”“天空”“手机”)作为负样本,只计算这几个词的概率,大大减少计算量。
2. 层次 Softmax(Hierarchical Softmax):把 “遍历” 变成 “走树”
核心思路:把所有词按概率建成一棵二叉树,每个词都是树的叶子节点。预测时不用遍历所有词,而是从根节点走到目标词的叶子节点,每一步只做 “是 / 否” 的二分类,计算量从 “O (V)”(V 是词典大小)变成 “O (logV)”。
比如词典有 8 个词,二叉树只有 3 层,走 3 步就能找到目标词,效率大幅提升。
五、Word2Vec 的实际应用:不止是 “懂词”
学会词向量后,Word2Vec 能做很多实用的事:
- 语义相似度计算:比如判断 “医生” 和 “护士” 的相似度高于 “医生” 和 “厨师”,可用于同义词推荐;
- 文本分类 / 情感分析:把句子中所有词的向量平均,得到句子向量,再输入分类模型(比如判断 “这部电影太烂了” 是负面情感);
- 推荐系统:比如用户输入 “喜欢科幻小说”,系统通过 “科幻” 的词向量,推荐相关的书籍或电影;
- 有趣的语义推理:比如 “国王 - 男人 + 女人 = 女王”,因为 Word2Vec 的向量能捕捉到 “性别”“身份” 这类抽象语义。
六、小结:回顾重点
- 核心目标:把词变成低维向量,让向量距离反映语义关联,解决 one-hot 的痛点;
- 核心思想:通过 “预测上下文” 学习词向量(上下文相似→语义相似);
- 两种模型:CBOW(上下文→中心词,快)、Skip-gram(中心词→上下文,准);
- 关键技巧:负采样、层次 Softmax,解决计算量大的问题;
- 价值:为 NLP 任务(分类、推荐、推理)提供 “语义基础”。