自然语言处理问题中,一般以词作为基本单元,例如我们想要分析 “我去过华盛顿州” 这句话的情感,一般的做法是先将这句话进行分词,变成我,去过,华盛顿州,由于神经网络无法处理词,所以我们需要将这些词通过某些办法映射成词向量。词向量是用来表示词的向量,也可被认为是词的特征向量。把词映射为实数域向量的技术也叫词嵌入(word embedding)
为何不采用One-Hot编码
假设词典中不同词的数量为N ,每个词可以和从 0 到 N-1 的连续整数一一对应。假设一个词的相应整数表示为i ,为了得到该词的 one-hot 向量表示,我们创建一个全 0 的长为 i的向量,并将其第 i为设位 1
然而,使用 one-hot 词向量并不是一个好选择。一个主要的原因是,one-hot 词向量无法表达不同词之间的相似度,例如,任何一对词的 one-hot 向量的余弦相似度都为 0
word2vec
2013 年,Google 团队发表了 word2vec 工具。word2vec 工具主要包含两个模型:跳字模型(skip-gram)和连续词模型(continuous bag of words,简称 CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序 softmax(hierarchical softmax)。值得一提的是,word2vec 词向量可以较好地表达不同词之间的相似度和类比关系
Skip-Gram
在跳字模型中,我们用一个词来预测它在文本序列周围的词。例如,给定文本序列 “the”,“man”,“hit”,“his”,“son”。设背景窗口大小为 2, 跳字模型所关心的是,给定 “hit”,生成它邻近词 “the”,“man”.“his”,“son” 的概率(在这个例子中,“hit” 叫中心词,“the”,“man”,“his”,“son” 叫背景词),即
假设在给定中心词的情况下,背景词的生成是相互独立的,那么上式可以改写成
对于skip-gram模型,其公式表达为
CBOW模型
连续词袋模型与跳字模型类似。与跳字模型最大的不同是,连续词袋模型是用一个中心词在文本序列周围的词 来预测中心词。简单的说就是,跳字模型用中心词预测周围的词;连续词袋模型用周围的词预测中心词。例如,给定文本 “the”,“man”,“hit”,“his”,“son”,连续词袋模型所关心的是,邻近词 “the”,“man”,“his”,“son” 一起生成中心词 “hit” 的概率
近似训练法
可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典 V 的大小呈正相关。显然,当词典较大时,这种训练方法的计算开销会很大。所以使用上述训练方法在实际中是由难度的。我们可以使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样和层序 softmax
负采样
假设噪声词wk 在词典中的索引为i k,上式可改写为
因此,有关中心词 w c 生成背景词wo 的损失函数是
现在,训练中每一步的梯度计算开销不再与词典大小相关,而与K 线性相关。当 K取较小的常数时,负采样的每一步梯度计算开销也较小
在负采样中可以近似为
层次softmax
这里的二叉树 Huffman 树,权重是语料库中 word 出现的频率