利用Tensorflow进行自然语言处理系列之一Word2Vec

本文将要讨论NLP的一个重要话题:Word2Vec,它是一种学习词嵌入或分布式数字特征表示(即向量)的技术。其实,在开展自然语言处理任务时,一个比较重要的基础工作就是有关词表示层面的学习,因为良好的特征表示所对应的词,能够使得上下午语义内容得以很好地保留和整体串起来。

图1-1一个利用t-SNE进行学习词嵌入可视化例子关于t-SNE(也就是t-DistributedStochasticNeighborEmbedding)的内容,可以参考另外一篇文章《从SNE到t-SNE再到LargeVis》,里面作者写挺好的,感兴趣的网友可以详细看下。

举例说明,下面有两个文档直接套用公式计算:

显然,“cats”这个词是带有有用信息的词,而“this”却不符合要求。在衡量词汇重要性或者说是特征选择时,TF-IDF方法是很重要的。4、共生矩阵(共现矩阵不像独热编码对上下文语境下的单词进行编码,但却需要V×V的矩阵。举例说明,下面有两句话:通过共现矩阵的方法,我们得到如下矩阵(因为矩阵是对称的,所以只显示矩阵的一个三角形状)。

显然,不难看出,随着词汇规模的增加矩阵也随之迅速膨胀,维持共现矩阵需要的成本也随之急速扩大。此外,进行合并上下文窗口以便得到大于1的结果,也是比较困难的。如果进行加权计数,单词的权重也会随着相关词的距离增加而减少。所有这些不足促使我们探索更具原则性、鲁棒性和可伸缩性的学习方式和推断词的意义(即表示)。

为了得到等式右边部分,我们需要假定给定目标词(Wi)且上下文中词间是相互独立的(例如,Wi-1和Wi-2是独立的)。虽然不完全正确,但这种近似的取舍更加符合实际问题的解决。1、Isqueen=king-he+she?

图4-1同样,我们继续下面单词元组间的梳理:kingrich,he我们已经建立了‘king'和’rich‘间的关系,但相关工作还没有完成;我们看到的关系越多,这两个词就越接近。下一步先调整’king‘的矢量,使之更接近于’rich‘:king[0,0.8]接下来,我们把单词’he‘添加到图示中,’he‘应该更接近’king‘,这就是目前为关于右边‘he’单词的所有信息。

图4-2继续下面两个元组:shequeen,was现在,我们用对英语的先验知识来进一步研究。

图4-3截止目前,显然方程的右边和左边是相等的:右边=king–he+she=[0,0.8]–[0.5,0.8]+[0.5,0.6]=[0,0.6]左边=[0,0.6]即queen=king-he+she。

接着定义一个神经网络代价(损失)函数

这里需要对

最大化,所以上式函数需要加上负号。下面我们将方程转换为日志空间,前后的一致性和数值稳定性会更佳,如下:

上面这个公式就是众所周知的负对数似然。现在我们得到了一个代价函数,就可以使用神经网络来优化这个代价函数,这样会使得词向量或词嵌入根据词的意思更好地组合自身。

图4-4Skip-Gram模型的搭建包括两个部分:一是建立模型,二是通过模型获取嵌入词向量。Skip-Gram建模思想与自编码器(auto-encoder)很相似,都是先基于训练数据建立一个神经网络,当这个模型训练好以后,我们得到该模型训练过程中所学到的参数,常见的有隐藏层的权重矩阵等,显然这只是我们实现目标过程中必要的铺垫工作,所以,有文章也称基于训练数据建模的过程为“FakeTask”。

图4-5这里的模型将会从每对单词出现的次数中习得统计结果。例如,神经网络可能会得到更多类似(“Chinese“,”China“)这样的训练样本对,而对于(”Chinese“,”watermelon“)这样的组合却看到的很少。因此,当模型完成训练后,给定一个单词”Chinese“作为输入,输出的结果中”Chinese“或者”Confucius“要比”watermelon“被赋予更高的概率。

图4-6在隐藏层没有使用任何激活函数,但是在输出层使用了sotfmax函数。通过成对的单词来对神经网络进行训练,训练样本是(inputword,outputword)这样的词对,inputword和outputword都是one-hot编码的向量。最终模型的输出是一个概率分布。3.4隐藏层单词的编码和训练样本选取之后,下面说下隐层。

图4-7综合来看,这里的目标是学习这个隐层的权重矩阵。现在继续通过模型的定义来训练这个模型。上面我们提到,通过one-hotencoded对inputword和outputword编码。进一步查看可知,最初的输入被one-hot编码以后,除了一个位置为1其余维度全部是0,所以这个向量相当稀疏,会产生很多没必要的计算成本,多数计算是无效的。

图4-8上图中的矩阵运算,左边分别是1x5和5x3的矩阵,结果应该是1x3的矩阵,按照矩阵乘法的规则,结果的第一行第一列元素为0x17+0x23+0x4+1x10+0x11=10,同理可得其余两个元素为12,19。如果10000个维度的矩阵采用这样的计算方式是十分低效的。

图4-93.6利用Tensorflow来开展Skip-gram模型这里分别给出Skip-gram模型的概念和实施层面的大致思路图。图4-10相关说明、图4-11是概念框架、图4-12是实施框架明,

图4-10

图4-11Skip-gram概念模型

图4-12Skip-gram实施模型3.6.1数据集这里采用由几个维基百科文章组成的数据集,下载地址Data。限于篇幅,这里给出关键代码部分。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810A1FZA400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券