word2vec的缺陷:
- 没有考虑词序,因为它假设了词的上下文无关(把概率变为连乘)
- 没有考虑全局的统计信息
针对这两个方面,应该都有很多解决的方案,毕竟word2vec是很老的东西了。这里介绍了一个方法,改进全局的统计信息。
co-occurrence matrix
计算共现矩阵,作用于两个方面:
- 句子:捕捉语义和语法的相似性
- 文章:捕捉主题的相似性
基于窗口的共现矩阵
比如窗口半径为1,在如下句子上统计共现矩阵:
-
I like deep learning.
-
I like NLP.
-
I enjoy flying.
会得到:
这样会得到一个稀疏的向量空间,然后通过SVD的方法将它变成稠密矩阵。
用这个方法的缺点很明显,每次来新词都要重新全部SVD一次
改进
这个改进的方案,在任何需要用到词频的地方都会游泳
-
限制高频词的频次,或者干脆停用词
-
根据与中央词的距离衰减词频权重
-
用皮尔逊相关系数代替词频
优缺点
这些基于计数的方法在中小规模语料训练很快,有效地利用了统计信息。但用途受限于捕捉词语相似度,也无法拓展到大规模语料。
而NNLM, HLBL, RNN, Skip-gram/CBOW这类进行预测的模型必须遍历所有的窗口训练,也无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,其捕捉的不仅限于词语相似度。
Glove模型
从看了一些论文来说,好像这是一个套路,就是在别人的基础上往损失函数里面加东西,A有特性,则构造损失函数使B具有同样的特性,就将AB融合。
Glove模型就是这样提出一个损失函数:
J ( θ ) = 1 2 ∑ i , j = 1 W f ( P i j ) ( u i T v j − log P i j