当前位置: 代码迷 >> 综合 >> word2vec-GLOVE模型 cs224n
  详细解决方案

word2vec-GLOVE模型 cs224n

热度:123   发布时间:2023-10-12 10:01:57.0

word2vec的缺陷

  • 没有考虑词序,因为它假设了词的上下文无关(把概率变为连乘)
  • 没有考虑全局的统计信息

针对这两个方面,应该都有很多解决的方案,毕竟word2vec是很老的东西了。这里介绍了一个方法,改进全局的统计信息。

co-occurrence matrix

计算共现矩阵,作用于两个方面:

  • 句子:捕捉语义和语法的相似性
  • 文章:捕捉主题的相似性

基于窗口的共现矩阵
比如窗口半径为1,在如下句子上统计共现矩阵:

  • I like deep learning.

  • I like NLP.

  • I enjoy flying.

会得到:
word2vec-GLOVE模型 cs224n

这样会得到一个稀疏的向量空间,然后通过SVD的方法将它变成稠密矩阵。
用这个方法的缺点很明显,每次来新词都要重新全部SVD一次
改进
这个改进的方案,在任何需要用到词频的地方都会游泳

  • 限制高频词的频次,或者干脆停用词

  • 根据与中央词的距离衰减词频权重

  • 用皮尔逊相关系数代替词频
    优缺点
    这些基于计数的方法在中小规模语料训练很快,有效地利用了统计信息。但用途受限于捕捉词语相似度,也无法拓展到大规模语料。

而NNLM, HLBL, RNN, Skip-gram/CBOW这类进行预测的模型必须遍历所有的窗口训练,也无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,其捕捉的不仅限于词语相似度。

Glove模型

从看了一些论文来说,好像这是一个套路,就是在别人的基础上往损失函数里面加东西,A有特性,则构造损失函数使B具有同样的特性,就将AB融合。
Glove模型就是这样提出一个损失函数:
J(θ)=12∑i,j=1Wf(Pij)(uiTvj?log?Pij)2J(\theta)=\frac{1}{2}\sum_{i,j=1}^W f(P_{ij})\left(u_i^Tv_j-\log P_{ij}\right)^2J(θ)=21?i,j=1W?f(Pij?)(uiT?vj??logPij?)2
源码剖析:
https://blog.csdn.net/weixin_36711901/article/details/78508798
公式推导:
https://blog.csdn.net/u014665013/article/details/79642083

优缺点

既然glove提出了考虑了共现矩阵,那么它就一定要比word2vec要好吗?谷歌一下,这是一个挺有趣的回答

存在的问题

我看不懂ui,vju_i,v_jui?,vj?是什么,是原始的向量吗?应该不是吧。
但是这句话怎么理解呢?
明眼人会发现这里面有两个向量u和v,它们都捕捉了共现信息,怎么处理呢?试验证明,最佳方案是简单地加起来:

Xfinal=U+VX_final=U+VXf?inal=U+V