Word2vec

Word2Vec

背景

自然语言处理问题中,一般以词作为基本单元,例如我们想要分析 “我去过华盛顿州” 这句话的情感,一般的做法是先将这句话进行分词,变成去过华盛顿州,由于神经网络无法处理词,所以我们需要将这些词通过某些办法映射成词向量。词向量是用来表示词的向量,也可被认为是词的特征向量。把词映射为实数域向量的技术也叫词嵌入(word embedding)

为何不采用 one-hot 向量

假设词典中不同词的数量为N,每个词可以和从 0 到 N−1 的连续整数一一对应。假设一个词的相应整数表示为 i,为了得到该词的 one-hot 向量表示,我们创建一个全 0 的长为 N 的向量,并将其第 i 为设位 1

然而,使用 one-hot 词向量并不是一个好选择。一个主要的原因是,one-hot 词向量无法表达不同词之间的相似度,例如,任何一对词的 one-hot 向量的余弦相似度都为 0

Word2vec_第1张图片

word2vec

2013 年,Google 团队发表了 word2vec 工具。word2vec 工具主要包含两个模型:跳字模型(skip-gram)连续词模型(continuous bag of words,简称 CBOW),以及两种高效训练的方法:负采样(negative sampling)层序 softmax(hierarchical softmax)

值得一提的是,word2vec 词向量可以较好地表达不同词之间的相似度和类比关系

skip-gram

Word2vec_第2张图片

目标就是:跳字模型-------------------需要最大化给定任一中心词生成背景词的概率:

学习参数:词典中所有词的两种词向量。(中心词和背景词)

Word2vec_第3张图片

Word2vec_第4张图片

Word2vec_第5张图片

Word2vec_第6张图片

通过上面计算得到梯度后,我们可以使用随机梯度下降来不断迭代模型参数 v c v_c vc。其它模型参数 u o u_o uo 的迭代方式同理可得。最终,对于词典中任一索引为 i i i 的词,我们均得到该词作为中心词和背景词的两组词向量 v i v_i vi u i u_i ui

连续词袋模型

连续词袋模型与跳字模型类似。与跳字模型最大的不同是,连续词袋模型是用一个中心词在文本序列周围的词 来预测中心词。简单的说就是,跳字模型用中心词预测周围的词;连续词袋模型用周围的词预测中心词。例如,给定文本 “the”,“man”,“hit”,“his”,“son”,连续词袋模型所关心的是,邻近词 “the”,“man”,“his”,“son” 一起生成中心词 “hit” 的概率

连续词袋模型需要最大化由背景词生成任一中心词的概率

Word2vec_第7张图片

Word2vec_第8张图片

近似训练法

可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典 V 的大小呈正相关。显然,当词典较大时,这种训练方法的计算开销会很大。所以使用上述训练方法在实际中是由难度的。我们可以使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样层序 softmax

负采样

  • 为什么使用负采样:以 s k i p − g r a m skip-gram skipgram为例,因为在计算损失函数的时候,出现了词典大小的数据,也就是说,每次参数更新需要计算词典中所有的单词。是因为中心词 W c W_c Wc生成背景词的概率 P ( w o ∣ w c ) P(w_o|w_c) P(wowc)使用了softmax,而且softmax考虑了背景词可能是词典中任意一个单词,并且体现在了分母上边。
  • 具体形式:一种概率采样的方式,可以根据词频进行随机抽样,倾向于选择词频较大的负样本;

Word2vec_第9张图片

Word2vec_第10张图片

Word2vec_第11张图片

Word2vec_第12张图片

层序 softmax

层序 softmax 利用了二叉树。树的每个叶子节点代表着词典 V V V 中的每个词。每个词 w i w_i wi 对应的词向量为 v i v_i vi。我们以下图为例,来描述层序 softmax 的工作机制

Word2vec_第13张图片

Word2vec_第14张图片

Word2vec_第15张图片

代码

skip-gram

你可能感兴趣的:(语言算法,word2vec,自然语言处理,机器学习)