Word2Vec:模型的详解以及改进措施

预备知识: 

         词的表示方法:

         独热表示(one-hot):如:(0,1,….0) 缺点-词越多,维数越多,无法表示词与词之间的关系

         共现矩阵:同样也存在维数过高的问题

         SVD分解矩阵:降维,压缩,用前r个非零奇异值对应的奇异向量表示矩阵的主要特征,这样只需要存三个比较小的矩阵即可,这样就达到了压缩的作用。

Distributed Representation:分布式表示/稠密表示,通过训练,将每个词都映射到一个低维的向量空间中,同时可以采用统计学的方法对词向量进行处理,从而反映词之间的关系

         语言模型:计算一个句子是正常句子的概率的模型

         统计语言模型:通过概率计算来刻画语言模型

                   P(S)=P(w1,w2,w3….wn)=P(w1)P(w2|w1)P(w3|w1w2)…..P(wn|w1w2,….wn)

                   转化为词概率或词条件概率的乘积

         有一些词或词组在语料中没有出现过,但这并不代表他不可能存在句子中,我们要进行平滑操作,给那些没有出现过的词或词组一个小概率, 但这样也有问题,也会存在参数空间过大,数据稀疏严重的问题。

因此,提出了马尔科夫假设,下一个词的出现仅依赖前面一个或几个词,word2Vec便是基于这个假设。

具体模型:

        Skip-gram 使用中心词预测周围词:     

Cbow:使用周围词预测中心

核心:因为内积的本质实际上就是相似度,如果中心词和背景词在窗口中同时出现,则他们隐含的语义就越接近,相乘的内积就越大        

skip-gram的训练过程:

从图中,我们可以非常明了的理解其中的训练过程,输入index,得到one-hot表示,进行与中心词矩阵相乘,得到中心词向量,然后和周围词矩阵相乘(中心词和每个周围词都要进行内积,算出与每个周围词的相似程度),最后得到每个词的概率(这也是训练结果的比对关键),然后应用交叉熵损失函数计算loss,更新参数。 下图为,softmax计算概率的公式和损失函数的公式。

CBOW训练过程(Continuous bag of word)

      核心:与skip-gram相似,都是通过词与词之间的共现,同时,我们还需要注意到,skip-gram和CBOW都是忽略了词之间的顺序,并没有考虑词之间的距离问题以及词性语法问题,这一点有利有弊,在后面处理图数据时,可能更相符合。

下面是CBOW的训练过程:

过程描述还是比较清晰的,CBOW采用周围词预测中心词的方式来训练,在合并多个周围词向量时,可以采用SUM或AVG的方式。

 

Skip-gram和CBOW的比较与总结:

1、两种方法训练的目的都是为了使测试数据尽量得到one-hot的概率表示,这样才能表明训练效果较好

2、训练的结果是得到两个V*D的矩阵,分别为中心词矩阵和周围词矩阵,这两个矩阵也就是我们的词向量矩阵,我们可以任取一个作为结果,也可以求平均。

3、Skip-gram和CBOW进行比较,我们可以看出Skip-gram的训练数据多,因此训练较慢,但效果会更好,适用于一些数据比较稀疏的情况。相反CBOW的训练迭代较快,但训练次数过少。

改进措施:

         Hierarchical Softmax:

 

通过这个softmax计算公式,我们可以看出,每次计算概率的时候,需要对每个词向量与矩阵做乘法,训练复杂度为O(V),训练速度很慢,因此,我们提出层次softmax的方法。

层次softmax的思想就是将softmax->sigmod计算

个人理解:其实就是整体求概率太费事,将求概率的过程变成查找树的过程,那这样求的概率有参考价值吗?实际上是有的,因为树的查找过程,需要经过与节点参数的乘积,这些参数是可学习的,同时,我们经由sigmod函数,将结果稳定在(0,1),从而达到目的。

 

如图所示,我们通过树来求概率,那么树的不同形式决定了查找的效率,我们以词频为根据,构造Huffman树,出现频率高的查找次数多,而路径较短,这里的节点中的向量便可以认为是原先模型中的周围词向量。

Negative Sampling

         我们不再计算所有的预测误差,而是只计算一部分误差并更新,同时,为了使更新的效果更好,我们进行负采样,具体的损失函数为:

 

其中Vw0为输出单词的词向量(正样本),h为上下文词向量,同时右边为负样本(负样本不止一个)。

这里还有一个问题便是如何采样?

我们采用重采样方法,即更多的训练低频的词汇,这样可以加速训练,得到更好的词向量。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值