想象你搬进一座新城市,谁也不认识。但你很快会发现:总在同一家咖啡馆出现的人,多半住得近、爱好相似;总在公园一起遛狗的人,彼此也是朋友。你不需要背通讯录,只要观察“谁经常和谁一起出现”,就能大致画出这座城市的社交地图。 Word2Vec 干的就是这件事——但它画的不是人的地图,而是词语的语义地图。它把所有词语“安排”到一个多维空间里,每个词占据一个坐标点:意思相近的词(“苹果”与“香蕉”)靠得近;关系还能像向量一样加减——“王”减去“男”再加上“女”,得到的位置恰好接近“后”。这个把词语变成向量的过程,就叫词嵌入(Word Embedding)。 怎么学习呢?Word2Vec 有两种招式:CBOW 是“看朋友圈猜主角”——给你一群上下文词,猜中间缺的是谁;Skip-gram 反过来,“看主角猜朋友圈”——给一个中心词,猜它周围会跟哪些词。两个招式都靠神经网络反复练习,再配合负采样这一加速技巧(随机抓几个路人当陪练),就能在超大语料上快速学会词与词之间的语义关系。

岗位关联

对 AI 从业者而言,词嵌入是自然语言处理的基石。理解 Word2Vec 的训练机制与优化技巧,能帮你快速上手文本表示、语义检索,以及一切基于向量化的现代 NLP 任务。

目录
  1. 可视化演示
  2. 词嵌入:给词语办“社交坐标”
  3. 分布式表示:朋友圈决定你是谁
  4. CBOW:看朋友圈猜主角
  5. Skip-gram:看主角猜朋友圈
  6. 训练优化:不断校准坐标
  7. 负采样:随机抓路人陪练
  8. 语义应用:让AI用上词语地图
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示CBOW与Skip-gram两种架构的数据流向,以及词向量空间中的语义类比关系。

本节配有交互动效(进入视口后自动加载,约 3KB)。

CBOW与Skip-gram架构对比 CBOW:上下文词向量平均后预测中心词 Skip-gram:中心词分别预测窗口内每个上下文词 负采样将多分类转为二分类提升训练效率 CBOW: C(w-t..w+t) → w | SG: w → C(w-t..w+t) Skip-gram对低频词效果更好。

词嵌入:给词语办“社交坐标”

想象城市里每个人手中都有一张“社交坐标卡”——卡片上记录的不是家庭住址,而是这个人平时跟谁一起出现、活跃在哪种场合。Word2Vec 做的事,就是给每个词语办一张这样的坐标卡:把词表示成一组数字,例如 [0.82, -0.31, 1.14, ...],这组数字就是该词的词向量,而这张“卡”在数学上就是一个低维稠密向量。

为什么不用更简单的表示?最朴素的做法是独热编码:词典有多大,向量就有多长,只有当前词对应位置是 1,其余全是 0。这好比给词发“身份证号”——虽然能唯一区分每个词,但任何两个词的号码都毫无重叠,算法看不出“苹果”和“香蕉”有任何关系。而且词典动辄上百万词,身份证号长到无法计算。词向量则把语义压缩进几十到几百个维度里,每一个维度都在隐式地编码某种语义特征。

词向量好不好用,关键要看“距离”怎么算。余弦相似度是最常用的度量:

如果把词向量想成社交坐标,“苹果”与“香蕉”因为经常出现在相似场合(水果摊、餐桌),坐标方向自然对齐,余弦相似度就高。坐标越近,朋友圈越像——这正是词嵌入最迷人的地方。

cos⁡(u,v)=u⋅v∥u∥ ∥v∥\displaystyle \cos(\mathbf{u},\mathbf{v})=\frac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\ \|\mathbf{v}\|}
这个公式衡量两个向量的“方向一致程度”,值越接近 1,说明两个词的语义坐标方向越一致。
  1. 点积打分分子计算两个向量逐位相乘再求和,衡量它们同向的程度。两个坐标卡越“志同道合”,得分越高。
    u⋅v=∑i=1nuivi\displaystyle \mathbf{u}\cdot\mathbf{v}=\sum_{i=1}^{n}u_i v_i
  2. 向量长度分母分别计算两个向量的长度,也就是从原点到坐标点之间的距离。
    ∥u∥=∑i=1nui2\displaystyle \|\mathbf{u}\|=\sqrt{\sum_{i=1}^{n}u_i^2}
  3. 归一化比值用点积除以两个长度,将结果限制在 $[-1,1]$ 之间,消除向量自身长度的影响。
    cos⁡θ=u⋅v∥u∥ ∥v∥\displaystyle \cos\theta=\frac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\ \|\mathbf{v}\|}

分布式表示:朋友圈决定你是谁

你很难三言两语定义“程序员”是什么,但你可以说:程序员常和“代码、电脑、加班”一起出现。小孩子学词也是这样——在无数句“妈妈讲故事”“爸爸上班”里,慢慢悟出“妈妈”“爸爸”这些词的含义。语言学家 Firth 有句名言:“由词的伙伴,可知其词义。” 这就是分布式假说:一个词的意义,由它反复出现的上下文决定。

基于这个想法,我们可以用“共现概率”来量化一个词和哪些词走得近。固定一个中心词,划定一个小窗口(比如前后各 2 个词),统计窗口内其他词与它共同出现的次数:

需要特别说明:Word2Vec 并不会真的去统计全量共现矩阵(那是 GloVe 的做法)。它更聪明——用一个神经网络“预测游戏”来隐式学习这套共现规律。但“朋友圈决定你是谁”的直觉贯穿始终:先有这个分布式的世界观,才有后面的 CBOW 和 Skip-gram 两种训练玩法。

P(wc∣wo)=count(wc, wo)count(wo)\displaystyle P(w_c\mid w_o)=\frac{\text{count}(w_c,\ w_o)}{\text{count}(w_o)}
这个条件概率表达的是:当中心词 $w_o$ 出现时,窗口里的 $w_c$ 跟着出现的可能性有多大。
  1. 共现次数分子统计中心词 $w_o$ 与词 $w_c$ 在同一个固定大小窗口内共同出现的次数。
    count(wc, wo)\displaystyle \text{count}(w_c,\ w_o)
  2. 中心词频次分母统计 $w_o$ 在全部语料中出现的总次数,作为归一化的基准。
    count(wo)\displaystyle \text{count}(w_o)
  3. 条件概率两者相除,得到“看到 $w_o$ 时遇到 $w_c$”的经验概率,这就是窗口共现规律。
    P(wc∣wo)=count(wc, wo)count(wo)\displaystyle P(w_c\mid w_o)=\frac{\text{count}(w_c,\ w_o)}{\text{count}(w_o)}

CBOW:看朋友圈猜主角

有个单元楼里的住户总在一起聚餐。某天你看到一张合影,照片里的人你都认识,唯独中间那个背影被裁掉了——你盯着这群人猜:“中间那个是谁?”CBOW(Continuous Bag-of-Words,连续词袋模型)就是干这个的:它看到窗口内的上下文词(合影里的朋友),去猜中心词(被裁掉的背影)。

具体做法是:把窗口内所有上下文词的向量取平均,得到一个“群体印象”向量 $h$,再用这个群体印象去预测中心词。假如窗口里有“喜欢”“吃”“鱼”,模型就要猜出中间最可能是“猫”:

训练时,模型会一遍遍看“合影”,如果猜错了就调整所有相关词的坐标。猜的次数多了,“猫”的坐标自然会被推到“喜欢”“吃”“鱼”这些朋友附近。因为每次要预测的目标只有一个,CBOW 训练速度较快,适合超大规模语料。

h=1C∑c=1Cvwc,P(wo∣h)=exp⁡(h⊤uwo)∑j∈Vexp⁡(h⊤uwj)\displaystyle \mathbf{h}=\frac{1}{C}\sum_{c=1}^{C}\mathbf{v}_{w_c},\qquad P(w_o\mid \mathbf{h})=\frac{\exp(\mathbf{h}^{\top}\mathbf{u}_{w_o})}{\sum_{j\in V}\exp(\mathbf{h}^{\top}\mathbf{u}_{w_j})}
第一个式子把朋友圈的向量“平均”成群体印象;第二个式子把群体印象与每个候选中心词打分,再用 softmax 变成概率。
  1. 上下文平均把窗口内 $C$ 个上下文词的向量 $\mathbf{v}_{w_c}$ 逐维相加再除以 $C$,得到群体印象 $\mathbf{h}$。
    h=1C∑c=1Cvwc\displaystyle \mathbf{h}=\frac{1}{C}\sum_{c=1}^{C}\mathbf{v}_{w_c}
  2. 候选词打分用群体印象 $\mathbf{h}$ 与词典中每个候选词 $w_o$ 的输出向量 $\mathbf{u}_{w_o}$ 做点积,点积越大表示越匹配。
    score(wo)=h⊤uwo\displaystyle \text{score}(w_o)=\mathbf{h}^{\top}\mathbf{u}_{w_o}
  3. softmax 归一化对全词典所有打分取指数后归一化,得到每个候选词作为中心词的概率。
    P(wo∣h)=escore(wo)∑j∈Vescore(wj)\displaystyle P(w_o\mid \mathbf{h})=\frac{e^{\text{score}(w_o)}}{\sum_{j\in V}e^{\text{score}(w_j)}}

Skip-gram:看主角猜朋友圈

现在换个玩法:你认识一位新朋友小张,还没见过他的朋友圈。你试着猜:他平时会和什么样的人一起玩?Skip-gram 就是“看主角猜朋友圈”——给一个中心词,预测它窗口内每个上下文词。如果说 CBOW 是“由众推一”,Skip-gram 就是“由一推众”。

用一个例子理解:给定中心词“猫”,模型要分别预测窗口内的“喜欢”“吃”“鱼”。窗口里有几个词,就有几个独立的预测任务,最后把每个任务的结果合并起来作为损失:

从“主角猜朋友圈”的视角看,每个低频词只要出现一次,就能同时带动窗口内多个词一起更新,因此 Skip-gram 对低频词更友好。代价是每步要预测多次,训练稍慢。实践中,小数据集或生僻词较多的语料,通常会优先选 Skip-gram。

E=−∑c=1Clog⁡P(wc∣wi),P(wc∣wi)=exp⁡(vwi⊤uwc)∑j∈Vexp⁡(vwi⊤uwj)\displaystyle E=-\sum_{c=1}^{C}\log P(w_c\mid w_i),\qquad P(w_c\mid w_i)=\frac{\exp(\mathbf{v}_{w_i}^{\top}\mathbf{u}_{w_c})}{\sum_{j\in V}\exp(\mathbf{v}_{w_i}^{\top}\mathbf{u}_{w_j})}
Skip-gram 对每个窗口词对都单独计算一次 softmax 概率,再把它们加起来作为总损失。每看一个中心词,就要做 $C$ 次预测。
  1. 单词对概率中心词向量 $\mathbf{v}_{w_i}$ 与候选上下文词输出向量 $\mathbf{u}_{w_c}$ 点积后做 softmax,得到预测概率。
    P(wc∣wi)=exp⁡(vwi⊤uwc)∑j∈Vexp⁡(vwi⊤uwj)\displaystyle P(w_c\mid w_i)=\frac{\exp(\mathbf{v}_{w_i}^{\top}\mathbf{u}_{w_c})}{\sum_{j\in V}\exp(\mathbf{v}_{w_i}^{\top}\mathbf{u}_{w_j})}
  2. 窗口内连乘假设窗口内各上下文词相互独立,联合概率等于每个词对概率的乘积。
    P(w1,…,wC∣wi)=∏c=1CP(wc∣wi)\displaystyle P(w_1,\dots,w_C\mid w_i)=\prod_{c=1}^{C}P(w_c\mid w_i)
  3. 负对数损失取负对数把连乘变成连加,这样最小化损失等价于最大化联合概率。
    E=−∑c=1Clog⁡P(wc∣wi)\displaystyle E=-\sum_{c=1}^{C}\log P(w_c\mid w_i)

训练优化:不断校准坐标

想象你连续参加了几十场“猜朋友”聚会游戏。一开始总猜错,但每次猜错后你都会暗想:“原来小张不是技术圈的人,他跟运动圈更熟。”于是你对每个人的社交坐标就修正一点。训练优化就是这套“猜错→修正→再猜”的循环,只不过主角换成了神经网络。

模型先做前向传播:把输入词向量经过计算得到预测概率,然后用交叉熵损失衡量“猜得有多离谱”——预测分布与真实标签差异越大,损失越大。接着做反向传播:算损失对每个参数的梯度,也就是“该往哪个方向调整坐标、调整多少”。最后用梯度下降更新参数:

除了梯度和学习率,训练轮数(epochs)也很关键:每一轮都让模型把整个语料重新“猜”一遍。猜得太多,模型会过度记住训练语料里的偶然共现,反而让低频词向量变得不稳定。到这一步,词坐标就在一次次猜错与修正中越摆越准,最终形成我们想要的语义地图。

v(t+1)=v(t)−η∂E∂v(t)\displaystyle \mathbf{v}^{(t+1)}=\mathbf{v}^{(t)}-\eta\frac{\partial E}{\partial \mathbf{v}^{(t)}}
梯度下降的直觉:算出的偏导是损失上升最快的方向,我们反着走就能让损失下降,让预测越来越准。
  1. 计算梯度对损失 $E$ 求词向量 $\mathbf{v}^{(t)}$ 的偏导数,得到当前坐标该调整的方向与幅度。
    ∂E∂v(t)\displaystyle \frac{\partial E}{\partial \mathbf{v}^{(t)}}
  2. 学习率步长学习率 $\eta$ 控制每步走多远。太大容易在最优坐标附近来回震荡,太小则收敛极慢。
    η∂E∂v(t)\displaystyle \eta\frac{\partial E}{\partial \mathbf{v}^{(t)}}
  3. 反向更新用原向量减去步长,得到下一步的新坐标。这就是“猜错之后把坐标往正确方向挪一点”。
    v(t+1)=v(t)−η∂E∂v(t)\displaystyle \mathbf{v}^{(t+1)}=\mathbf{v}^{(t)}-\eta\frac{\partial E}{\partial \mathbf{v}^{(t)}}

负采样:随机抓路人陪练

训练时最贵的动作是算 softmax——它要求模型对词典里每一个词都打一次分。词典如果有 100 万个词,每学一个词对就要算 100 万次指数运算,实在太慢了。这就好比你想确认“小张和小李是不是朋友”,不必把全城的人都问一遍——随机抓几个路人问“你认识小张吗”,路人说不认识,反而更说明小张和小李的关系很特别。

负采样(Negative Sampling)正是这个思路:把“从 100 万词里猜目标词”的多分类问题,简化成“判断这个词对是不是真的共现”的二分类问题。对于真实出现在窗口里的词对(正样本),我们配 $k$ 个随机采样的词对(负样本),让模型学会给正样本打高分、给负样本打低分:

负采样把每次更新的计算量从“整个词典”降到“正样本 1 个 + 负样本 $k$ 个”(通常 $k$ 取 5~20),训练速度提升几十倍。更重要的是,这种“抓路人陪练”的思路还能顺带改善低频词的向量质量——高频词被频繁采样作负例,反而为低频词的坐标提供了清晰对比。

E=−log⁡σ(h⊤uwo)−∑j=1klog⁡σ(−h⊤uwj)\displaystyle E=-\log\sigma(\mathbf{h}^{\top}\mathbf{u}_{w_o})-\sum_{j=1}^{k}\log\sigma(-\mathbf{h}^{\top}\mathbf{u}_{w_j})
前半部分鼓励“真实朋友”点积尽量大,后半部分惩罚“随机路人”点积尽量大。用少数几个路人,就近似替代了全词典的对比。
  1. 正样本项取真实上下文词对的点积 $\mathbf{h}^{\top}\mathbf{u}_{w_o}$ 通过 sigmoid 函数 $\sigma$,让它的概率尽量接近 1。
    −log⁡σ(h⊤uwo)\displaystyle -\log\sigma(\mathbf{h}^{\top}\mathbf{u}_{w_o})
  2. 负样本项随机挑 $k$ 个负样本词 $w_j$,让它们与 $\mathbf{h}$ 的点积尽量为负,从而使 $\sigma$ 接近 0。
    −∑j=1klog⁡σ(−h⊤uwj)\displaystyle -\sum_{j=1}^{k}\log\sigma(-\mathbf{h}^{\top}\mathbf{u}_{w_j})
  3. 负样本采样概率负样本不是均匀随机抽,而是按词频的 $3/4$ 次幂加权分布抽取,用来压低“的、了、是”等高频词的统治力。
    Pneg(w)=cnt(w)3/4∑j∈Vcnt(wj)3/4\displaystyle P_{neg}(w)=\frac{\text{cnt}(w)^{3/4}}{\sum_{j\in V}\text{cnt}(w_j)^{3/4}}

语义应用:让AI用上词语地图

语义地图画好之后,最激动人心的部分来了:它直接能当工具用。查距离——计算两词向量的余弦相似度,就能做近义词召回:用户搜“怎么退款”,系统能召回“退款流程”“申请退款”等表达不同的问法。找路线——词向量之间可以加减:经典实验里,“王−男+女”得到的位置最接近“后”,像在城市地图上做几何位移。

如果需要表示一整句话或一篇文章,简单的做法是把词向量取平均,得到一个“文本向量”:

词向量还能迁移到各种下游任务:文本分类拿它当输入特征,搜索引擎拿它做语义召回,推荐系统拿它计算物品相似度。它就像一张画好的城市地图——本身已经很有价值,但真正厉害的是任何“导航”任务都能拿它来指路。

vdoc=1N∑i=1Nvwi\displaystyle \mathbf{v}_{doc}=\frac{1}{N}\sum_{i=1}^{N}\mathbf{v}_{w_i}
平均词向量是文本表示中最朴素也最常用的一种,把变长的句子压成一个固定维度的向量,方便下游模型使用。
  1. 累加词向量把句子中 $N$ 个词的向量逐维相加,得到一个总向量 $\mathbf{S}$。
    S=∑i=1Nvwi\displaystyle \mathbf{S}=\sum_{i=1}^{N}\mathbf{v}_{w_i}
  2. 取平均除以词数 $N$,消除句子长度差异,得到代表整句语义的向量。
    vdoc=1N∑i=1Nvwi\displaystyle \mathbf{v}_{doc}=\frac{1}{N}\sum_{i=1}^{N}\mathbf{v}_{w_i}
  3. 下游使用这个文本向量可以直接用于分类、聚类、检索,或作为更复杂模型(如 LSTM、Transformer)的输入特征。
    y^=Classifier(vdoc)\displaystyle \hat{y}=\text{Classifier}(\mathbf{v}_{doc})

AI 应用场景

客服FAQ语义匹配

阶段:文本表示与语义检索

解决的问题:传统客服机器人靠关键词匹配,用户问“怎么退款”时,如果知识库只存了“退款流程”,关键词对不上就答非所问。用 Word2Vec 把用户问题和知识库问题都转成词向量,再算余弦相似度,即使表达方式不同也能召回正确答案。

具体案例:某电商平台把 2 万条 FAQ 问题和用户历史对话训练成 128 维词向量。新用户提问“申请退款要多久?”,系统将该句平均词向量与 FAQ 向量比对,命中最相似的“退款到账时间”条目,成功将客服转人工率降低 35%。

舆情话题聚类

阶段:特征工程与无监督分析

解决的问题:公关公司需要从海量社交评论中发现热点话题,但评论用词五花八门(“牛”“给力”“赞”都表达正面情绪)。靠人工维护同义词表永远看不完;用词向量把每条评论表示成向量再聚类,语义相近的评论自然归为一类。

具体案例:某舆情系统用 Word2Vec 将一周 50 万条微博评论转为 100 维向量,再做 K-Means 聚类。系统自动发现“电费涨价”“高温天气”等热点簇,比传统关键词统计提前 6 小时预警话题发酵趋势。

Item2Vec 推荐系统物品表示

阶段:物品向量化与相似推荐

解决的问题:电商推荐里“看了又看”需要知道商品之间的相似度,但商品没有天然文本。借鉴 Word2Vec 的 Skip-gram 思想,把用户点击序列当作“句子”、商品当作“词”,就能用完全相同的框架训练出商品向量。

具体案例:某视频平台用 Item2Vec 将用户一周观看序列做成训练语料,学习 30 万部影片的向量。用户看了一部悬疑片,系统通过向量最近邻在首页推荐风格相似的影片,点击率提升 18%。

Python 演示

python29 行
"""用 gensim 训练 Word2Vec: 把词语变成向量并做类比推理"""from gensim.models import Word2Vec # 1) 准备语料: 每条文本预先分词, 得到词的列表sentences = [    ["苹果", "香蕉", "都是", "水果"],    ["我", "喜欢", "吃", "苹果"],    ["猫", "喜欢", "吃", "鱼"],    ["狗", "喜欢", "追", "猫"],    ["王", "是", "男", "性"],    ["后", "是", "女", "性"],    ["国王", "统治", "国家"],    ["王后", "陪伴", "国王"],] # 2) 训练模型: sg=1 用 Skip-gram, window=2 窗口半径, negative=5 负采样model = Word2Vec(sentences, vector_size=64, window=2,                 min_count=1, sg=1, negative=5, epochs=20, seed=42) # 3) 查看词向量维度vec = model.wv["苹果"]print("「苹果」向量维度:", vec.shape) # 4) 找最相似的词print("与「水果」最相似的词:", model.wv.most_similar("水果", topn=3)) # 5) 类比推理: 王 - 男 + 女 = ?print("王 - 男 + 女 最接近:", model.wv.most_similar(    positive=["王", "女"], negative=["男"], topn=1))
目的:用 gensim 一行 API 完成 Word2Vec 训练,验证词向量的相似度计算与类比推理能力。运行前请先 pip install gensim。
  1. from gensim.models import Word2Vec导入 gensim 的 Word2Vec 实现,这是 NLP 领域最常用的词嵌入工具库。
  2. sentences = [...]准备训练语料:每条是已分词的词列表。真实项目中这里通常是从数据库或文件读入的千万级句子。
  3. Word2Vec(..., sg=1, ...)sg=1 表示使用 Skip-gram 架构;sg=0(默认)则使用 CBOW。
  4. window=2上下文窗口半径,即中心词前后各取 2 个词作为预测范围。
  5. negative=5开启负采样,每个正样本配 5 个负样本,大幅加速训练。
  6. model.wv.most_similar("水果", topn=3)在词向量空间中找出与“水果”余弦相似度最高的 3 个词。
  7. most_similar(positive=["王","女"], negative=["男"])实现类比推理:计算 王 - 男 + 女 的向量,返回最近邻词。

常见误区

误区“维度设高点肯定更准,反正模型能学,直接上 1000 维。”

正解维度越大,可容纳的语义细节越多,但参数量也越大,小语料下极易过拟合,训练出的向量在低频词上表现极差且占用大量内存。维度选择要看语料规模:几十万词的小语料用 50~100 维足够,大规模语料常用 200~300 维。这就像问路时只需“哪条街哪个门牌”,给你一份 1000 页的地图反而添乱。

为何常见:人们容易把“更复杂”等同于“更好”。实际上词向量的信息效率很高,关键在语料质量和训练配置。

误区“CBOW 是用中心词预测上下文,Skip-gram 是用上下文预测中心词,反正都是预测。”

正解恰好相反——CBOW 是“看朋友圈猜主角”,输入上下文、输出中心词;Skip-gram 是“看主角猜朋友圈”,输入中心词、输出上下文。记法上可以联想:CBOW 的 O 代表 Output(输出的是中心词 One center word),Skip-gram 的 S 代表 Surroundings(输出的是周围词)。

为何常见:两个名字看起来对称,训练目标又都是“预测词”,初学者容易混淆方向,尤其在面试紧张时更容易说反。

误区“负采样就是故意多造一些错误数据,让模型见过更多错误,相当于数据增强。”

正解负采样不是构造训练样本,而是一种加速 softmax 的近似技巧。原始的 softmax 要对整个词典(可能上百万词)做归一化,代价极高;负采样把它改成二分类:正样本判断“这对词是否真的共现”,负样本随机抽 $k$ 个词对做“对比组”。它能用极少计算量近似完整 softmax 的效果,属于训练优化手段而非数据扩充。

为何常见:名字里有“采样”和“负样本”,容易让人联想到过采样、欠采样等数据增强手段,忽略了它解决的计算瓶颈问题。

误区“Word2Vec 和 GloVe 一样,都要先统计整个语料库的词共现矩阵再分解。”

正解GloVe 确实显式构建全局共现矩阵,但 Word2Vec 是预测式模型——它不统计全局矩阵,而是用局部滑窗 + 神经网络训练,在迭代预测任务中隐式学出共现规律。打个比方:GloVe 是“把全城监控视频统计成报告再研究”,Word2Vec 是“亲自去街上走一圈,见人打招呼,边交朋友边修正判断”。

为何常见:两者都是词嵌入方法,且论文里都讲共现现象,初学者很容易把它们归为一类。实际上它们的建模方式和优化目标有本质区别。

误区“既然 王−男+女≈后,那词向量就能像算术一样精确计算所有语义关系。”

正解类比推理只是词向量空间的一个近似性质,不是严格保证的语义逻辑。训练语料有限、多义词混在一起、向量维度压掉了大量信息,都会让类比结果偏斜。比如“苹果”既能是水果也能是手机品牌,它的向量会落在两个语义的折中位置。类比运算适合用来快速探索语义,但不能当成精确的推理工具。

为何常见:经典“国王−男人+女人≈女王”实验广为流传,给人留下“语义算术”的深刻印象。但这是统计规律,不是铁律。

面试题

Q1. Word2Vec 词嵌入的最终产物是什么?

单选题 · easy

  • A.词语出现频率表
  • B.低维稠密词向量← 正确答案
  • C.句法分析树
  • D.主题分类标签

答案:B。Word2Vec 通过训练把每个词映射为一个低维稠密向量,这个向量就是词嵌入。选 A 混淆了词频统计与语义表示,C 是句法分析任务的产品,D 是文本分类的结果,都与词嵌入无关。

Q2. CBOW 模型的预测任务是?

单选题 · easy

  • A.用中心词预测上下文
  • B.用上下文预测中心词← 正确答案
  • C.用上文预测下一个词
  • D.用全文预测中心主题

答案:B。CBOW(连续词袋模型)是“看朋友圈猜主角”,输入窗口内的上下文词,输出中心词的概率分布。A 描述的是 Skip-gram 或语言模型任务,C 是典型语言模型做法,D 是主题建模任务。

Q3. 与 CBOW 相比,Skip-gram 的主要特点是?

单选题 · mid

  • A.训练速度一定更快
  • B.更适合高频词学习
  • C.对低频词更友好← 正确答案
  • D.不需要设置窗口大小

答案:C。Skip-gram 每次用一个中心词预测窗口内多个上下文词,低频词只要出现一次就能带动多个词的更新,因此对低频词更友好。它每步要做多次预测,训练通常更慢而非更快,A 错误;B 说反了,CBOW 才更适合高频词;D 错误,窗口大小是必须设置的超参数。

Q4. 下列属于 Word2Vec 两种架构的有?

多选题 · mid

  • A.CBOW 连续词袋模型← 正确答案
  • B.LSTM 长短时记忆网络
  • C.Skip-gram 跳字模型← 正确答案
  • D.Attention 注意力机制

答案:AC。Word2Vec 只有两种架构:CBOW(连续词袋模型)和 Skip-gram(跳字模型)。LSTM 是循环神经网络变体,Attention 是 Transformer 的核心机制,两者都是更晚提出的深度学习组件,不属于 Word2Vec。

Q5. 负采样在 Word2Vec 训练中的作用是?

单选题 · mid

  • A.增加训练语料数量
  • B.加速输出层计算← 正确答案
  • C.消除低频词影响
  • D.提升词向量维度

答案:B。原始 softmax 需要对整个词典求指数再归一化,词典百万级时计算量巨大。负采样把多分类改成二分类,通过少量负样本近似,让输出层计算量从“全词典”降到“k+1 个词对”,本质是加速近似技巧。

Q6. 负采样概率公式中的 3/4 次幂主要作用是?

单选题 · hard

  • A.降低高频词的被采样概率← 正确答案
  • B.让所有词被等概率采样
  • C.完全去掉停用词噪声
  • D.提升词向量的输出维度

答案:A。词频取 3/4 次幂后,高频词的概率被压缩、低频词的概率被抬升,使得负样本分布不再被“的、了、是”这类高频词主导,同时保留了词频的分布信息。它不会让概率完全均匀(B 错),也不可能“完全去掉”停用词(C 错),与向量维度无关(D 错)。

Q7. 衡量两个词向量语义相似度的常用方法有?

多选题 · mid

  • A.计算余弦相似度← 正确答案
  • B.使用文本编辑距离
  • C.计算点积近似相似度← 正确答案
  • D.统计字符出现频率

答案:AC。词向量相似度常用余弦相似度,未归一化的点积也常作为近似相似度使用(相当于模长相同情况下的余弦)。编辑距离作用在字符串上,不作用于向量;统计字符频率是词袋模型的做法,与词向量相似度无关。

Q8. 经典类比推理“王 − 男 + 女”的结果向量最接近哪个词?

单选题 · hard

  • A.后(王后)← 正确答案
  • B.妃(皇妃)
  • C.君(君主)
  • D.皇(皇帝)

答案:A。“王”减去“男”得到“王族身份”的位移,再加上“女”,结果应落在“女性王室成员”的位置,即“后(王后)”。B 的“妃”地位低于王后且语义偏移不同,C、D 都是男性君主含义,方向不对。

Q9. 独热编码(one-hot)表示词的主要缺陷是?

单选题 · easy

  • A.向量维度过高且无语义← 正确答案
  • B.向量维度太低无法扩展
  • C.需要人工标注大量数据
  • D.无法用于神经网络模型

答案:A。独热编码的维度等于词典大小,词典百万词时向量极长,且任意两个词的向量正交,完全看不出语义关系。它维度高而非低(B 错),无需人工标注(C 错),也能输入神经网络(D 错),只是效果不好。

Q10. 关于 Word2Vec 训练,下列说法正确的有?

多选题 · hard

  • A.窗口大小影响上下文范围← 正确答案
  • B.训练轮数越多效果一定越好
  • C.负采样可替代完整 softmax← 正确答案
  • D.词向量无法用于下游任务

答案:AC。窗口大小直接决定“朋友圈”范围,是重要超参数(A 对)。负采样正是作为完整 softmax 的加速替代被提出的(C 对)。训练轮数过多会导致过拟合,低频词向量质量下降,“一定越好”过于绝对(B 错)。词向量广泛应用于分类、检索、推荐等下游任务(D 错)。