Word2Vec 词向量
把每个词变成一串数字,相似的词数字也相近——"国王 − 男人 + 女人 ≈ 女王"
01 核心原理(大白话版)
计算机不懂"猫"和"狗"有什么关系,但如果你告诉它:把每个词变成一个坐标点,意思相近的词坐标相近——那计算机就能做"词语加减法"了。
Word2Vec 的思路:一个词的意思由它的邻居决定。同样出现在"吃___"后面的词(饭、面、肉)意思上应该相近,所以给它们相近的向量。
两种训练方式
CBOW(用上下文预测中心词)
给出"我 ___ 苹果",猜中间是"吃"。用周围的词来预测目标词,适合小数据集。
Skip-gram(用中心词预测上下文)
给出"吃",猜周围可能出现"我""苹果"。用目标词预测周围词,对低频词效果更好。
词表里每个词随机分配一个 100~300 维的向量(就是一串随机数字)。
在大量文本上用滑动窗口构造(中心词, 上下文词)训练对,让模型学"谁常和谁一起出现"。
预测对了不动,预测错了就把两个词的向量往更接近的方向推一点。反复训练后,意思相近的词自然聚在一起。
词向量是所有 NLP 的基础。LSTM、Transformer、BERT 的输入层本质都是 Embedding(词向量),Word2Vec 是理解这一切的起点。
一步步构建 Word2Vec
从语料到词向量,逐步搭建 Skip-gram。
把句子拆成词,建立词→索引的映射。
输入矩阵 W(中心词)和输出矩阵 CM(上下文词),随机初始化。
正样本(真实上下文词)拉近,负样本(随机词)推远。
遍历所有词和窗口,反复更新词向量直到语义关系浮现。
02 代码
03 学术性讲解
Skip-gram 目标函数
给定中心词 wₜ,最大化上下文词出现的概率:
其中 c 为窗口大小,T 为语料总词数。条件概率用 softmax 计算:
每个词有两套向量:作为中心词时用 v,作为上下文词时用 u,最终取两者均值或只用 v。
负采样(Negative Sampling)
全词表 softmax 计算量巨大(词表可达百万级)。负采样把多分类转化为二分类:对每个正样本(真实上下文词),随机采 k 个负样本(非上下文词),只更新这 k+1 个词的向量:
负样本按词频的 3/4 次方采样,低频词被适度提升采样概率。
GloVe 的对比
Word2Vec 基于局部上下文窗口(逐词预测)。GloVe 基于全局共现矩阵,直接分解词-词共现频率矩阵,目标函数为:
两者在下游任务上性能相近,Word2Vec 更适合增量更新,GloVe 在小语料上稍优。
词向量的几何性质
训练后的向量空间里存在线性关系:
这说明向量空间捕捉到了语义关系的方向性(性别轴、首都轴等)。相似度常用余弦相似度衡量:cos(θ) = (v₁·v₂)/(‖v₁‖‖v₂‖)。