1.什么是词嵌入?
词嵌入是将文本中的词语,映射为计算机能够理解的,固定长度的实数向量的过程。
为什么要这么做?
因为计算机不能直接理解"国王","皇后","男人"这些词的含义和关系。它只能处理数字
简单方法(不好):传统方法如"One-hot编码",把每个词变成一个很长的,只在某一维是1,其他都是0的向量,比如,假设词汇表有一万个词:
-
"国王" =
[0, 0, 0, ..., 1, ..., 0](第100位是1) -
"皇后" =
[0, 1, 0, ..., 0, ..., 0](第200位是1) -
这种表示法有两个致命缺点:
-
维度灾难:词汇表多大,向量就多长,效率极低。
-
无法表达语义 :所有向量互相正交,计算机无法从
[...,1,...]和[...,1,...]中看出"国王"和"皇后"有任何关系。
-
理想方法(词嵌入):我们希望将词映射到一个稠密,低维的向量空间(比如50维,300维)。在这个空间里:
-
语义相似的词,它们的向量在空间中的位置也接近(余弦相似度高)。
-
词与词之间的语义关系 ,可以通过向量的算术运算来体现。这就是Word2Vec的神奇之处。
2.Word2Vec是什么,它如何工作?
Word2Vec是Google在2013年提出的一种高效生成词嵌入的模型。
一个词真正的含义,可以由它周围的"上下文"词来体现。
基于这个思想,Word2Vec有两种主要的训练模式。
·跳字模型:
目标:用一个中心词,来预测它周围窗口内的上下文词。
例子:句子"The quick brown fox jumps over the lazy dog"
设中心词为"fox",窗口大小为2.
训练时,模型的任务是:给定输入"fox",让模型输出的概率尽可能大的是周围的词
"quick","brown","jumps","over"
通过大量文本这样训练后,具有相似上下文的词(如"狐狸","猫"都可能被"可爱的","宠物"围绕),就会得到相似的向量。
·连续词袋模型:
目标:用周围的上下文词,来预测中间的中间词。
例子:同样的句子和窗口
这次我们给模型输入上下文"quick","brown","jumps","over",让模型去预测中心的词是"fox"。
同样,用于预测中心词的上下文组合,会变得相似。
无论是那种训练模式,结束后我们都丢弃模型的预测部分,只保留从输入层到隐藏层到权重矩阵,这个矩阵的每一行,就对应词汇表中一个词的词向量。
3.Word2Vec的神奇成果:向量运算体现语义关系。
这是最令人惊叹的部分,训练好的Word2Vec词向量,可以进行"加减法"运算,其结果在语意上非常合理。
最著名的例子:
Vec("国王") - Vec("男人") + Vec("女人") ≈ Vec("皇后")
这个运算过程可以理解为:从"国王"这个概念中,去掉"男性"的属性,加上"女性"的属性,得到的就是"皇后"。这说明模型不仅学到了单词,更捕捉到了"性别"和"王室"这样的抽象语义关系。
其他例子:
-
Vec("巴黎") - Vec("法国") + Vec("德国") ≈ Vec("柏林")(首都与国家的关系) -
Vec("大的") - Vec("大") + Vec("小") ≈ Vec("小的")(比较级关系) -
Vec("跑步") - Vec("跑") + Vec("走") ≈ Vec("走路")(动词时态关系)
-
与数学的直接联系:
-
线性代数 :整个模型的核心就是矩阵乘法 和向量空间 的构建。我们正是在一个(例如)300维的欧几里得空间中,用余弦相似度(向量的内积运算)来衡量词的相似性。向量的加减运算更是直接体现了语义关系。
-
概率论 :Word2Vec的训练目标(尤其是Skip-gram)本质上是极大似然估计------我们希望找到一组词向量,使得给定中心词时,观察到其真实上下文词的概率最大。
-
高等数学 :训练神经网络(Word2Vec本身是一个浅层神经网络)用的反向传播 和梯度下降,核心就是微积分。我们需要计算损失函数对词向量矩阵的偏导数,来更新向量值。
-