Word2Vec 理解总结
统计语言模型
提到Worde2vec,就不得不从统计语言模型开始讲起。什么是统计语言模型,《数学之美》中给出了很好的答案。看一个句子是否通顺,读者是通过句子语法来了解。而计算机则是通过概率来得到。即本句子各词出现这样排列的可能性的大小决定了词句子是否合理。什么是统计语言模型,《数学之美》中给出了很好的答案。看一个句子是否通顺,读者是通过句子语法来了解。而计算机则是通过概率来得到。即本句子各词出现这样排列的可能性的大小决定了词句子是否合理。
如何计算这个句子出现的概率呢,这个概率的计算需要用到一系列的参数,而计算这些参数的方法主要有n-gram和神经网络两种方式。所谓n-gram,是指当前出现词汇只与当前词之前的n个词有关。但此方法存在需要进行平滑化的问题。而神经网络方式却很好的克服了平滑问题。在神经网络的方式中,输入为当前词的前n个词的词向量。假设词向量维度为m,语料中分词为N,则输入为(n-1)*m个神经元。输出为softmax层N个神经元。为了使输出表示概率,还需要对softmax层进行归一化处理。
在神经网络中所需参数,除了网络中的权重偏置就是词向量。下面的Word2Vec将对词向量的建立进行详细阐述。
Word2Vec
Word2Vec,就是指词向量化。即用向量表示语料中的词。最简单的方式当属one-hot的方式。即设词库中有M个词,则每个词的词向量需要有M维,且除了当前词的位置为1以外,其他位置均为0。这样的方式存在矩阵稀疏的问题,且隔断了词与词之间的关联性。因此不建议使用。
另一种方式则是Distributed Representation的方式。这种方式使词向量的不再稀疏,且两个词的意思越相近,词向量之间的距离也就越小。以下针对Word2Vec的两个重要的模型CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model)为例
基于Hierarchical Softmax的模型
CBOW
此模型总的目的是输入前后文词向量,对当前词进行预测。
模型结构
设每个词向量有m维,取上下文共n个词
输入层:将n个m维的向量输入
映射层:将从输入层得到的n个m维的的向量进行叠加。
输出层:以语料库中词为叶节点,以词出现的次数为权重的huffman树
更新迭代过程
其中3.3为计算每个结点对投影层X的更新累加值,3.4为每个结点的参数值更新。注意必须先求得投影层X的更新累加值后再对结点参数值进行更新。最后当更新完所有结点参数值后再将得到的最终累加值加到X向量上,也就是最终的词向量。
Skip-gram
此模型为输入当前词预测前后文
模型结构
设每个词向量有m维,取上下文共n个词
输入层:将当前词m维的向量输入
映射层:恒等映射输入层。
输出层:以语料库中词为叶节点,以词出现的次数为权重的huffman树
更新迭代过程
每针对输出的一个词做一次调整就要更新一次输入的w值。
基于Negative Sampling 的模型
与基于Hierarchical Softmax的模型相比,该模型具有训练速度快、词向量质量更好的特点。
CBOW
基于Negative Sampling 的模型是将Huffman进行了替换。将从投影层输出的向量认为为一个二分类。认为给上下文向量Context(w)对应w为正样本,其他词为负样本。最终试图最大化以下式子。
g
(
w
)
=
∏
u
∈
{
w
}
∪
N
E
G
(
w
)
p
(
u
∣
C
o
n
t
e
x
t
(
w
)
)
g(w)=\prod_{u\in \left \{ w \right \}\cup NEG\left ( w \right )}^{}p\left ( u|Context\left ( w \right ) \right )
g(w)=∏u∈{w}∪NEG(w)p(u∣Context(w))
迭代过程
与上面只有优化公式g有了一点变化改为
g
=
η
(
L
w
(
u
)
−
q
)
\mathit{g}=\eta \left ( \mathbf{L}^{w}\left ( u \right )-\mathbf{q} \right )
g=η(Lw(u)−q)