word2vec模型背后的基本思想是对出现在上下文环境里的词进行预测。对于每一条输入文本,我们选取一个上下文窗口和一个中心词,并基于这个中心词去预测窗口里其他词出现的概率。因此,word2vec模型可以方便地从新增语料中学习到新增词的向量表达,是一种高效的在线学习算法(online learning)
先来看一下官网的介绍:Using large amounts of unannotated plain text, word2vec learns relationships between words automatically. The output are vectors, one vector per word, with remarkable linear relationships that allow us to do things like:
-
vec(“king”) - vec(“man”) + vec(“woman”) =~ vec(“queen”)
-
vec(“Montreal Canadiens”) – vec(“Montreal”) + vec(“Toronto”) =~ vec(“Toronto Maple Leafs”).
即wordtowec输出是矢量,每一个矢量对应一个词,这些矢量具有明显的线性关系,如king-men+women输出的结果是queen
当然,wordtowec是相对于之前的wordbag提升了很多,先从原理来看:
以官网给出的例子
-
John likes to watch movies. Mary likes movies too.
John also likes to watch football games. Mary hates football.
所输出的词向量:
-
[1, 2, 1, 1, 2, 1, 1, 0, 0, 0, 0]
-
[1, 1, 1, 1, 0, 1, 0, 1, 2, 1, 1]
其中每一个向量有十个元素,每一个元素是计算特定词出现在文档中的次数,当然,元素的顺序是随机的。上面每一个元素对应的单词如下
["John", "likes", "to", "watch", "movies", "Mary", "too", "also", "football", "games", "hates"]
.
word-of-bag模型也有其缺点
1 失去了所有关与顺序的信息,如“John likes Mary” 和 “Mary likes John” 顺序不同意思也不同,给出的解决方案:word-of-bag模型将长度为n的单词短语作为固定长度的向量表示文档,以获取局部词序,但存在数据稀疏性和高维性问题。
2 其次,该模型并不尝试学习底层单词的含义,因此,向量之间的距离并不总是反映意义上的差异。Word2Vec模型解决了第二个问题