词袋模型(BOW,bagofwords)和词向量模型
(WordEmbedding)概念介绍
例句:
Jane wants to go to Shenzhen.Bob  wants to go to Shanghai.
⼀、词袋模型
将所有词语装进⼀个袋⼦⾥,不考虑其词法和语序的问题,即每个词语都是独⽴的。例如上⾯2个例句,就可以构成⼀个词袋,袋⼦⾥包括Jane、wants、to、go、Shenzhen、Bob、Shanghai。假设建⽴⼀个数组(或词典)⽤于映射匹配
1 [Jane, wants, to, go, Shenzhen, Bob, Shanghai]
那么上⾯两个例句就可以⽤以下两个向量表⽰,对应的下标与映射数组的下标相匹配,其值为该词语出现的次数
1 [1,1,2,1,1,0,0]2 [0,1,2,1,0,1,1]
这两个词频向量就是词袋模型,可以很明显的看到语序关系已经完全丢失。⼆、词向量模型
词向量模型是考虑词语位置关系的⼀种模型。通过⼤量语料的训练,将每⼀个词语映射到⾼维度(⼏千、⼏万维以上)的向量当中,通过求余弦的⽅式,可以判断两个词语之间的关系,例如例句中的Jane和Bob在词向量模型中,他们的余弦值可能就接近1,因为这两个都是⼈名,Shenzhen和Bob的余弦值可能就接近0,因为⼀个是⼈名⼀个是地名。
现在常⽤word2vec构成词向量模型,它的底层采⽤基于CBOW和Skip-Gram算法的神经⽹络模型。1. CBOW模型
CBOW模型的训练输⼊是某⼀个特征词的上下⽂相关的词对应的词向量,⽽输出就是这特定的⼀个词的词向量。⽐如上⾯的第⼀句话,将上下⽂⼤⼩取值为2,特定的这个词是\"go\",也就是我们需要的输出词向量,上下⽂对应的词有4个,前后各2个,这4个词是我们模型的输⼊。由于CBOW使⽤的是词袋模型,因此这4个词都是平等的,也就是不考虑他们和我们关注的词之间的距离⼤⼩,只要在我们上下⽂之内即可。
这样我们这个CBOW的例⼦⾥,我们的输⼊是4个词向量,输出是所有词的softmax概率(训练的⽬标是期望训练样本特定词对应的
softmax概率最⼤),对应的CBOW神经⽹络模型输⼊层有4个神经元,输出层有词汇表⼤⼩个神经元。隐藏层的神经元个数我们可以⾃⼰指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某4个词对应的最可能的输出中⼼词时,我们可以通过⼀次DNN前向传播算法并通过softmax激活函数找到概率最⼤的词对应的神经元即可。2.Skip-Gram模型
Skip-Gram模型和CBOW的思路是反着来的,即输⼊是特定的⼀个词的词向量,⽽输出是特定词对应的上下⽂词向量。还是上⾯的例⼦,我们的上下⽂⼤⼩取值为2, 特定的这个词\"go\"是我们的输⼊,⽽这4个上下⽂词是我们的输出。
这样我们这个Skip-Gram的例⼦⾥,我们的输⼊是特定词, 输出是softmax概率排前4的4个词,对应的Skip-Gram神经⽹络模型输⼊层有1个神经元,输出层有词汇表⼤⼩个神经元。隐藏层的神经元个数我们可以⾃⼰指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的4个上下⽂词时,我们可以通过⼀次DNN前向传播算法得到概率⼤⼩排前4的softmax概率对应的神经元所对应的词即可。词向量模型突出特点:
在词向量模型中,词向量与词向量之间有这⾮常特殊的特性。例如现在存在国王、男⽣、⼥⼈、皇后四个词向量,那么⼀个完善的词向量模型,就存在“国王-男⼈+⼥⼈=皇后”这样的关系。