1 basic conception of BoW
Bow 原理十分简单,就是把一句话转换成计算机能看懂的向量形式,比如给定两句话
1:I love bag of words .
2: I have a bag of apples .
可以构建包含所有单词的词典向量vector =[I ,love ,a, bag, of , words, apples,have]
第一句话就可以用一个向量v1=[1,1,0,1,1,1,0,0]
第二句话的向量表示v2=[1,0,1,1,1,0,1,1]
向量的每一个维度表示词典向量中对应的单词在句子中出现的次数。那么bag of words 缺点是什么呢?
首先需要一个庞大的词典向量,这在动辄上万甚至百万词典的实际应用中,面临着巨大的维度灾难问题(The Curse of Dimensionality)。其次,因为每个单词向量点乘的结果都是1,也就是余弦夹角等于90度,即每个单独的词汇之间完全没有关系。但是我们希望两个单词间的余弦值可以表示两个词汇之间的相似度。第三,bag of words 表达的语句完全跟单词顺序无关,而实际情况中词续对于句子十分重要。
接下来的Word2vec完美的解决了上面3个问题。
2 Word2vec
这里只介绍skip-gram 模型,首先介绍两种不同的信息检索理论,它们都假设具有相似词向量分布的文本具有相似的语义信息,一种认为词频反映了语义信息,比如上文提到的Bag of words, 第二种认为上下文环境相似的词具有相似的语义信息。skip-gram 即基于第二种理论。
还是给定一个句子:I have a bag of apples .
然后预设一个滑窗,大小可以自己指定,比如3, 用这个大小为3的滑窗在句子上面滑动,每个滑窗有一个中心词,两个上下文信息词汇。
假定词表中的每一个word都对应着一个连续的特征向量;
假定一个连续平滑的概率模型,输入一个中心词向量,可以输出所有次表中的词对应的概率;
而学习到的词向量要满足最大化上下文信息的条件概率。