一、词向量
在自然语言处理中,需要把自然语言转化为计算机可以理解的形式,一般采用向量空间模型(VSM)进行表示,在这里就是词向量。
1、one-hot词向量
在中文处理中,将分词的结果经过降噪等预处理后,选择出来的特征在进行权重计算时,采用布尔权重,就能够得到one-hot词向量。
从表现形式上来看,向量的长度是词典的大小V,同时它的分量只有一个是1,其他全是0,1的位置对应词在词典中的索引。
但是这种词向量的长度是随着词典的大小增加而增加,同时数据非常稀疏。这样很容易受到维数灾难的困扰,而且由于是独立形式的词索引,无法体现出词与词之间的联系。
2、分布式词向量
分布式词向量被提出来解决one-hot向量的不足,它的基本思想是:通过某种训练将语料中的每一个词映射成一个固定长度的向量,所有的词向量组成一个向量空间,这样就可以把词向量对应成空间中的一个点。
分布式词向量的做法很好解决one-hot词向量的问题:词向量的长度可以自行确定,词与词直接的关系也可以由空间中点的距离进行衡量。机器学习中提到的word2vec或者深度学习中的word embedding都可以理解为训练分布式词向量的方法。
上面提到的训练词向量的方法,比较流行的都是使用语言模型。
二、语言模型
语言模型的作用实际上是确定字符串s作为一个句子出现的概率,词向量可以看成在训练语言模型的过程中出现的副产品。
统计语言模型的训练方式常见的有:n-gram模型、神经网络等方法,Word2vec是基于神经网络的方法来进行训练的,关于语言模型可以参考:语言模型。
三、Word2Vec
1、什么是word2vec?
word2vec的本质是一个神经网络语言模型,基于语言模型进行分布式词向量的训练。
与传统神经概率语言模型不同的是,作者提出了新的方法进行训练:CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gram Model)。同时为了加快训练速度,使用Hierarchical Softmax和Negative Sampling这两种tricks。
2、CBOW模型和Skip-gram模型
上面可以看到,连个模型都包含三层:输入层,投影层和输出层。
(1)CBOW模型
CBOW模型是是在已知当前词的上下文
,
,
,
的情况下,预测当前词
。
(2)Skip-gram模型
Skip-gram模型则是在已知当前词的情况下,预测其上下文
,
,
,
。
(3)模型其他知识
从形式上来看,这两种模型与n-gram模型的思想很相似。在统计语言模型中,n-gram通过引入马尔科夫假设,假设当前词只与在它之前出现的n个词有关。这实际上隐式的带入了一种思想,当前词可以在某种形式上由其上下文代替。而这种思想也是符合人的思维的,通过上下文猜测当前词(填空)、通过当前词猜测上下文(造句)。
word2vec用了一种称为window的说法,实现了类似的上下文范围划定功能。
3、基于Hierarchical Softmax的CBOW模型
上述模型包括三层:输入层、投影层和输出层。简单的来说:
* 输入层包含了中2c个词的词向量
,...,
。
* 投影层将输入层的2c个向量做求和累加,合并成向量。
* 输出层对应一颗huffman二叉树,将V分类转换成多次二分类,得到输出。
具体流程,下面通过gensim.models.Word2vec源码,进行说明。
(1)遍历语料,构造词典
代码详见Word2vec.scan_vocab(),如下:
for sentence_no, sentence in enumerate(sentences):
...
for word in sentence:
vocab[word] +