1、为啥不采用one-hot向量
\space \space \space \space \space \space \space
假设词典中不同词的数量(词典大小)为N,每个词可以和从0到N-1的连续整数一 一对应。这些与词对应的整数叫做词的索引。假设一个词的索引为i,为了得到该词的one-hot向量表示,我们创建一个全0的长为N的向量,并将其第i位设成1。这样一来,每个词就表示成一个长度为N的向量,可以直接被神经网络使用。
\space \space \space \space \space \space \space
虽然one-hot词向量构造起来很容易,但通常并不是一个好选择。一个主要的原因是one-hot词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。对于向量
x
,
y
∈
R
d
x,y\in R^d
x,y∈Rd,它们的余弦相似度是它们之间夹角的余弦值。余弦相似度使用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近,就表明夹角越接近0度,也就是两个向量越相似,这就叫余弦相似度。其计算公式为:
x
T
y
∣
∣
x
∣
∣
∣
∣
y
∣
∣
∈
[
−
1
,
1
]
\frac {x^Ty}{||x||\space||y||}\in[-1,1]
∣∣x∣∣ ∣∣y∣∣xTy∈[−1,1]其推导过程如下:
a
⃗
⋅
b
⃗
=
∣
∣
a
⃗
∣
∣
∣
∣
b
⃗
∣
∣
c
o
s
θ
\vec{a}\cdot \vec{b}=||\vec{a}||\space||\vec{b}||cos\theta
a⋅b=∣∣a∣∣ ∣∣b∣∣cosθ
c
o
s
θ
=
a
⃗
⋅
b
⃗
∣
∣
a
⃗
∣
∣
∣
∣
b
⃗
∣
∣
cos\theta=\frac{\vec{a}\cdot \vec{b}}{||\vec{a}||\space||\vec{b}||}
cosθ=∣∣a∣∣ ∣∣b∣∣a⋅b
\space \space \space \space \space \space \space
虽然任何两个不同词的one-hot向量的余弦相似度都为0,多个不同词之间的相似度难以通过one-hot向量准确地体现出来。
\space \space \space \space \space \space \space
Word2vec工具的提出正式为了解决上面这个问题,它将每个词表示成一个定长的向量,并使得这些向量能够较好地表达不同词之间的相似和类比关系。word2vec工具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continues bag of words,CBOW)。