一、词向量表示
首先回顾一些文本表示方式:
one-hot
bag of words
tf-idf
binary weighting
bi-gram && n-gram
以上的表示方式都存在一个问题,即这些word表示方式均无法度量word和word之间的相似度。
为解决这一问题,学者提出了几种word表示方式:
-
分布式表示: 用一个词附近的其他词来表示该词
-
共现矩阵: 生成词表,vector的维度=length of dictionary,对于某单词w的vector表示,其第i维的value为w与word_i同时出现的次数。具体示例如下所示:单词I的vector为下列矩阵中I所对应的行,生成该共现矩阵的corpus为下面的3句话:
利用共现矩阵形成的“词表示”,会随着词典的变大而变得越来越稀疏 且 维度变大,为了避免这一现象,可以用SVD对共现矩阵进行降维,从而降低“词表示”的稀疏性;
即:共现矩阵 + SVD,如下图所示:
但是,SVD 降维存在如下问题:
-
NNLM(Neural Network Language model): 该模型已经与word2vec非常接近了,其与word2vec(CBOW)最大的区别在于:NNLM采用的滑窗为“前向滑窗”,而在CBOW中,为“双向滑窗”;
-
word2vec
word2vec有2个模型:CBOW 和 Skip-gram;
CBOW结构如下:
CBOW模型存在一个问题,即其output length为length of dictionary,会造成学习压力,为了改善这一downside,学者提出了如下两种方法:
1)层次softmax
2)负例采样
Skip-gram结构如下:
word2vec虽然能够度量word和word之间的相似度,但是,其仍存在如下问题:
-
sense2vec: 可以通过词性标注,在一定程度缓解一词多义时,词表示单一的局限:
-
Glove 参考博文:
理解GloVe模型(+总结)
GloVe详解
二、词向量表示的应用
三、word2vec工具
- google word2vec
- gensim