卷积神经网络 文本分类时,预训练word2vec的词向量

卷积神经网络 文本分类时,预训练word2vec的词向量,第1张

1P(A)=1/4,P(B|A)=1/3,P(A|B)=1/2,可得P(AB)=1/12,P(B)=1/6
P(X=0,Y=0)=P(A非B非)=1-P(A+B)=1-[P(A)+P(B)-P(AB)]=2/3
P(X=1,Y=0)=P(AB非)=P(A)-P(AB)=1/6
P(X=0,Y=1)=P(BA非)=P(B)-P(AB)=1/12
P(X=1,Y=1)=P(AB)=1/12 联合分布就可得出
2E(X)=1/4,E(Y)= 1/6,E(XY)=1/12,COV(X,Y)=E(XY)-E(X)E(Y)=1/24
D(X)=E(X2)-[E(X)]2=3/16,D(Y)=E(Y2)-[E(Y)]2=5/36
ρ=COV(X,Y)=COV(X,Y)/[√D(X)√D(Y)]=1/√15

刚用 gensim 完成训练。
中文的wiki语料,整理->简繁转换->分词 (这过程比较耗时)。
整理完,大概1g语料,训练的话,CBOW算法训练了半个小时不到。
训练后的模型大概是2g左右,加载起来也是比较慢,不过还能接受。

向量,顾名思义,就是使用向量来表达词。最常见的表达方式就是"one-hot",其向量维度为整个语料库中词的总数,每一维代表语料库中的一个词(出现为1,不出现为0)。假设语料库为:

那么该语料库的字符集为:{I, like, deep, learning, NLP, enjoy, flying},其对应的"one-hot"表达方式为:

“one-hot”表达方式的最大问题在于其只能表达词本身是否出现,而无法表达词与词之间的关系。为了解决此问题,便有了使用相邻词来表达词本身的方式。

基于窗口的共现矩阵是对词与词相邻关系的最直接表达。还是以上面的语料库为例,假设窗口大小为1(即以每一个词为中心,向左/右延伸长度为1),那对应的共现矩阵为:

由于共现是双向的,所以上述矩阵是对称的。随着语料库变大,该共现矩阵将会变的非常巨大,于是便需要通过SVD(Singular Value Decomposition)进行降维,相关理论在此不进行展开。但共现矩阵还是存在很多问题,如无法处理新词等。

另外一种基于词相邻关系的表达方式就是word2vec(Mikolov et al 2013),其主题思想是通过每一个词本身来预测其相邻的词。

回顾一下大部分机器学习模型的训练过程,先设定 Objective Function ,然后随机设定初始状态,再通过 Gradient Descent 进行迭代,逐步逼近最优解。 word2vec 模型本质上也一样,还是从 Objective Function 入手

第一个 Sigma 表示从头到尾过一遍语料库中的每一个词,第二个 Sigma 表示对于每一个词,过一遍其窗口内的所有词(除自己外)。最后一部分表示基于中心词预测其窗口内上下文的概率。如果基于本文开头的简短语料库,设定窗口大小为1,将 Objective Function 展开就会是这个样子

Objective Funection 的具体形式,可以看出 word2vec 与先前表达方式的本质区别,在这里引用一段英文资料的解释:

接下来,我们需要弄清楚 p 究竟是什么。首先,我们的目标是得到语料库中每一个词的向量表示方法,所以相应的变量应该是词向量;然后,在上述 Objective Function 中,语料库中每一个词既有可能做为中心词,也有可能做为上下文,为了区分这两种情况,我们会对每一个词分别维护两个向量。

继续,我们已经有了两个向量,那么最简单直接的想法就是 Cosine Similarity ,但它的结果区间是从-1到1,需要把它转化成0到1的概率区间,于是原论文中使用了 Softmax 函数。

至此,我们完成了最简单版本 word2vec 模型的 Objective Function 。接下来是迭代过程,迭代过程相对比较简单,分别两个向量进行求导,然后对语料库中每一个实例进行迭代

关于上述公式中的求导过程,感兴趣的同学可以看看 斯坦福的公开课 ,自己也在纸上演算了一遍:

上述 word2vec 推导只是原论文中最简单的模型,后续我会针对复杂模型单独进行整理分析。

上面,我们已经梳理了基于共现矩阵与 word2vec 的词向量表达方式。相比而言,基于共现矩阵的词向量表达方式训练速度快、充分利用了统计信息,主要用于计算词与词的相似度;而 word2vec 词向量表达方式训练速度相对较慢,并没有充分利用统计信息,但能表达出更加复杂的信息。 GloVe 模型结合了两者的优势,训练速度比 word2vec 更快,其效果与 word2vec 相当,甚至更好一些。其 Objective Function 为:

其中 P 为两个词在原语料库中的共现次数, f 为共现次数与权重的函数关系, Objective Function 的主体思想为:

基于上面的思想,便有了下述 f 函数形式:

这个 是斯坦福的官方链接,包含了论文以及实现,感兴趣的同学可以试试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10548633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存