写在最前:本篇学习笔记是我在DUTIR情感计算组组会准备主讲过程的一些记录,通过阅读了一些博客以及论文,整理的学习笔记。初出茅庐,如有错误还请多多指教。
一、前言
为了完成自然语言处理的任务我们需要将词进行向量化,即将文字数字化。最简单的词表示方法是One hot Representation,其实质就是构造一个维度是词表大小的向量,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。One hot的词表示方法很容易理解,可以将文字数字化,但是却不能很好的表达词语的含义,而且NLP任务的语料通常很大,one hot的表示方法就会形成一个特别长的向量,不利于计算。
Word embedding[1]就是融合了语言模型和NLP特征学习技术的一种低维分布式词表示。区别于one hot的词表示方法,word embedding可以避免大量词汇的数据稀疏性,同时对数据进行降维,以及在句子级上的表示融入了词与词之间的相互关系。现有的最常用、最流行的生成语言模型及词向量的方法就是Word2Vec和Glove。下面就简单介绍一下Word2Vec和Glove的原理,以及一篇用ELM方法生成词向量的论文。
二、Word2Vec
在介绍Word2Vec之前,简单介绍一下神经概率语言模型。该模型是Bengio等人[2]在2003年提出的。图1是神经概率语言模型的架构图。
从图中可以看出,该模型主要包括输入层,投影层,隐藏层以及输出层。在隐藏层使用双曲正切函数tanh作为激活函数,在输出层进行softmax归一化运算。了解了神经概率语言模型的基本架构,我们就可以将Word2Vec中使用的网络结构与之进行对比了。Word2Vec包含两种模型CBOW和Skip-gram,包含两种架构Hierarchical Softmax和Negative Sampling。
CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model)都是三层的网络结构[3],包括输入层、投影层和输出层。CBOW的训练目标是通过上下文预测目标词,与之相反,Skip-gram的训练目标则是输入目标词,输出目标词上下文的词向量。由图2、3可以直观地看出这两个模型的结构。CBOW模型输入的是context中2c个词的词向量,对于从输入层到投影层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和的方法,这也是与神经概率语言模型不一样的地方之一。对于Skip-gram模型,输入层到投影层的过程则是一个恒等的映射。
2.1基于Hierarchical Softmax的CBOW和Skip-gram
首先我们要明确上述两个模型基于Hierarchical Softmax的训练目标,CBOW的目标函数与神经概率语言模型的一致:
而Skip-gram的目标函数则是:
我们的主要工作就是求解出上述公式中的两个概率值。
为了避免要计算所有词的softmax概率,Word2Vec采用了哈夫曼树来代替从投影层到输出层的映射。Word2Vec有自己的构造哈夫曼树的规则:1.这棵哈夫曼树构造的基础是在语料中每个词的词频;2.与常规不同,Word2Vec中规定,词频大的为左孩子,词频小的为右孩子;3.哈夫曼编码时将0看做正类,1看做负类。例如一个语料中有“他”、“十分”、“喜欢”、“喝”、“雪碧”这5个词,他们在语料中对应的词频分别为“15”、“8”、“6”、“3”、“2”。我们可以构造如图4的哈夫曼树。
我们现在想要输出词w =“雪碧”的情况,从根节点开始向下寻找这个词,把每个分支看成一个二分类,每次分类都会产生一个概率,我们将正类的概率记为p,那么是负类的概率就是1-p,把各分支上的概率乘起来就是w =“雪碧”的概率值。也因为这种一层一层向下寻找的机制,所以这种树形的输出被称为层级式softmax。具体的梯度计算过程本文就不在介绍了。
2.2基于 Negative Sampling 的CBOW和Skip-gram
如果遇到了一个生僻词,由于它在语料中的词频特别低,我们就需要在哈夫曼树中走很久,为了解决这个问题,引入了Negative Sampling。其原理就是中心词w和context(w),存在唯一正例,我们通过唯一正例和neg个负例,进行二元逻辑回归,最终得到每个词的词向量。我们首先将语料中的每个词按照词频映射到一条长度为1的线段上:
三、Glove
Word2Vec主要利用了局部上下文的关系,GloVe模型就是既使用了语料库的全局统计特征,也使用了局部的上下文特征,以此引入了词对的共现矩阵(记为X)。词对共现矩阵X中的元素Xij表示语料库中词j出现在词i上下文中的次数,那么Xi就表示语料库中所有词出现在词i上下文中的总次数。由此我们可以得出词j出现在词i上下文的概率Pij:
Glove的作者以目标词语ice和steam为例,讨论他们的共现概率。
作者在这里引入了Ratio这个值,通过观察发现了Ratio这个值的一些规律,Glove模型就是利用的Ratio值的规律:
GloVe模型的训练目标就是得到每一个词的向量表示。假设现在已知词i,j,k的词向量wi,wj,wk。作者认为,这三个向量通过某种函数的作用后所呈现出来的规律和Ratio=Pik/Pjk具有一致性,即相等,也就可以认为词向量中包含了共现概率矩阵中的信息。所以这里的问题就是寻找一个函数F使得下式成立:
这个函数的构造过程可以看出作者的胆大心细。感兴趣的可以自行阅读GloVe模型 - Weirping - 博客园。
四、论文
《Generating Word Embeddings from an Extreme Learning Machine for Sentiment Analysis and Sequence Labeling Tasks》是发表在Cognitive Computation2018上的论文。
4.1模型介绍
这篇论文使用了极限学习机(ELM)与自动编码器结合来生成词向量。对ELM感兴趣的可以参阅极限学习机(ELM)的使用 - CSDN博客。
ELM的工作原理十分简单,已知输入X和期望T的输出,可以求得隐藏层的输出H。由已知的H和T,就可以求解出隐藏层到输出层的权重值β。自动编码器是一种神经网络,通过压缩隐藏层中的输入特征向量,然后将其解压缩到输出层,实现特征提取和降维。将ELM模型与自动编码器相结合,即让期望输出近似等于输入,计算得到的权重β作为最终的词向量。
在设置词对共现矩阵权重的时候,作者参考了文献[6]的思想,认为上下文单词在单词-上下文矩阵中越接近目标单词,单词对就越重要,因此应该给出更高的权重,然后随着距离的线性下降。用1/distance给每个词对分配权重。
4.2实验部分
实验中用来训练词向量的语料如图8所示。
实验步骤如下:
1.统计预料中最短文本次数记为M,统计每个词的词频F,通过F≥M构建词表V。
2.设置窗口大小C,给词对分配权重
3.对单词-上下文矩阵进行归一化
4.计算隐藏层输出H
5.得到结果
作者将训练好的词向量应用到了情感分类和序列标注的任务中。情感分类任务使用的是逻辑回归,序列标注任务使用的是RNN。
图9、图10显示了论文中生成词向量的算法较之Glove和Word2Vec在完成NLP任务中有细微提升。
4.3小结
ELM和Word2Vec都是三层网络,Word2Vec需要不断迭代得到最终结果,而ELM只需要一次计算,同时ELM借鉴了Glove的思想,既考虑了局部上下文,又考虑了全局上下文。论文通过完成NLP实验和语义分析论证算法的有效性。
参考文献:
[1]Lauren P, Qu G, Yang J, et al. Generating Word Embeddings from an Extreme Learning Machine for Sentiment Analysis and Sequence Labeling Tasks[J]. Cognitive Computation, 2018(3):1-14.
[2]Journal of Machine Learning Research 3 (2003) 1137--1155 Submitted 4/02; Published 2/03 A Neural Probabilistic Language Model
[3]博客:word2vec 中的数学原理详解https://blog.csdn.net/itplus/article/details/37969519
[4]Mikolov T, Le Q V, Sutskever I. Exploiting Similarities among Languages for Machine Translation[J]. Computer Science, 2013.
[5]博客:Glove模型https://www.cnblogs.com/Weirping/p/7999979.html
[6]Bullinaria J A, Levy J P. Extracting semantic representations from word co-occurrence statistics: a computational study[J]. Behavior Research Methods, 2007, 39(3):510-526.