赞
踩
1. 了解文本表示的作用
2. 学习各种词向量表示方法的实现方式
1.文本是什么:
在语言模型中,我们主要要学习的文本级别分别为:字(中文特有)、词、句子、文档。
2.文本表示的作用:
其实,文本表示在字词级别上就是词向量,而在句子、文档级别中,也是用一个向量来表示一个句子、一个文档的意思。那么有人会疑惑,上一章我们不是就可以通过语言模型训练来得到词向量表吗,怎么这里又要学习词向量了呢?实际上,语言模型训练的主目标是得到语言模型,词向量表是副产物,而且这样的训练得到的词向量是有缺陷的(训练得到的语言模型可能是好的),后面会详细对比一下。此外,语言模型可以得到词向量表,但需要额外的操作来得到句子、文档的表示向量,而这也是文本表示要做的任务。
1.相关定义的基本概念:
看最后一句话,我们就可以知道VSM中,所有文本的表示向量长度是保持一致的,等于单词数量,当一句话有某个词时,对应位置就有该词的权重,一句话中没有出现的,则设为0。那么接下来的问题就是如何判定词的权重。(即特征项权重)
2.特征项权重计算:
主要为三种,布尔变量、词频和TF-IDF。(图中的逆文档频率是为计算TF-IDF的)以粗浅的经验来思考,显然词频就能表示一个词是否重要,但实际上,(见图中红字部分)我们用逆文档频率来压缩降低其权重,得到TF-IDF作为我们最终的权重。
3.归一化操作:
归一化的作用就是消除文本长度的影响,什么意思?比如说有一个短文本A和长文本B,显然地,长文本包含了更多的词,也就使得其文本表示更大,但实际上,二者的表示信息是相同的,(比如B就是重复的多个A)所以引入归一化,使向量能规范化。
4.词向量如何表示
上面的内容,显然,对于句子和文档,显然都是适用的,但是词向量、字向量该如何表示呢?这就展现了VSM的无力点,其有两种方法:
第一种方法,并无法表示词向量,one-hot表示法,可以表示词向量,但是这样的词向量,无法表示词与词之间的关系。我们想要得到的词向量应该是这样的:
于是就有了表示学习模型。
我们的目标如下:
上一节课的语言模型训练中也有讲过这个look-up表,其规模设定如下:
而我们的目标就是如何学习L的内容了,有两类方法:
关于语言模型的方法,主体流程如下所示(以下是前馈神经网络):
语言模型学习词向量表的问题:1.学习词向量模型并不应该使用太大的模型参数;2.学习当前词的词向量只参考了左边的词语,没有利用右边的词语。(注意:这就是语言模型和词语表示学习在输入上的不同。语言模型是为了对话,输出话语时,只能从左向右输出,于是在训练时也只能用左边的信息;而在词语表示学习,我们最后目标只是得到词向量表,当前词与其左右的词都是相关的,故可以用左右的词去训练得到当前词的词向量。)
训练思想:对于一条文本,我们选择其中的一个词作为中心词,通过线性变换后得到一个分数A;将其替换成随机词后,再计算得到一个分数B。目标是使A>B。表示如下:
分数A和B的计算过程为:
我们的优化目标和损失函数如下:
具体的优化过程就不描述了。那么这个模型有什么问题呢?主要问题有一个:有一个线性组合矩阵W1,当然如果有多个层,也就会有多个W,迭代优化W需要太多额外的算力。
于是,我们想要更少参数量的模型,也希望不要迭代优化,要一步到位。于是出现了CBOW模型和Skip-gram模型。
模型思想:使用左右相邻的词的词向量来求出中心词的词向量。具体流程如下:
首先,我们取中心词左右各C个词,这2C个词不用拼接,故所以说词序不影响预测。求这些词的词向量求平均,从而得到一个平均值,消除了C&W模型中的线性变换矩阵,参数量减少。词向量表e(·)就是我们唯一的参数。
然后,得到的平均值要通过softmax公式来计算出概率。并追求当中心词是wi时是最大的概率(目标函数)。这里追求最大概率时的模型L,实际上,调节的就是中心词wi的词向量。
思路:与CBOW完全相反,CBOW用相邻词去求解中心词的词向量。Skip-gram模型则是用中心词去求解相邻词的词向量。但又十分相似,主要体现在概率化,并追求概率最大化。
首先,它连求平均数的步骤也没了,直接代入下面公式去求解每个相邻词的概率:
然后追求这些概率联合之后概率最大的模型:
此时,与CBOW一样,我们唯一的参数就是e(·),每次都对wc进行优化,遍历所有的文本之后,e(·)就能得到了。
那么CBOW和Skip-gram又有什么问题呢?主要问题就是每次只局限于当前文本的上下文,而没有统计全语料库的所有信息。于是出现了GloVe模型。
思想:
那么我们的共现矩阵如下定义:
那么我们的优化目标是什么呢?
对F函数进行不断推导,我们最后的优化目标就是:
接下来确立我们的损失函数,就能进行优化了:
f(·)函数是一个罚函数,对共现次数少的词对进行惩罚,这样能避免不常见的词对当前词的影响。
优点:对比CBOW和Skip-gram,其不遍历所有词表计算似然概率,而是通过采样的方法,减少计算量,提升训练效率。是对CBOW和Skip-gram的优化。
负采样和噪声对比估计思想:使用一段文本确定一个中心词的词向量时,我们会随机取K个负样本,最后的目标函数就是:正样本似然概率/所有负样本的似然概率。求解这个函数的最大值。
二者不同:噪声使用机器学习的方法,在最后的计算K+1个样本的概率时需要手动进行归一化操作。负采样则是直接使用神经网络语言模型输出结果。
思想:这个方法主要针对汉语,由于词语由多个字组成,我们可以用字的字向量去丰富词向量,当然也可以在获取句子的分数时,将字向量和词向量先作个融合操作或者池化操作后作为词向量输入到模型中。
缺点:这种方法只是对某些词有所作用,如“吃饭”、“充电器”等拆出的每个字都有含义,而对于“垃圾”、“尴尬”这种单看一个字几乎没有什么意思的词,就无法有很好的提升。
词袋模型就是前面的向量空间模型,只是词向量使用了第四节的学习表示向量。于是短语的词袋模型定义如下:
缺点:由于词袋模型不考虑顺序,所有“猫吃鱼”和“鱼吃猫”最后得到的结果是一样的,这显然是不合理的。
思路:一个短语由多个单词组成,将任意两个单词的词向量(A和B)线性组合成一个新的词向量C,最后就可以得到短语的向量表示,而且还可以通过线性分解将C分解成A'和B',目标就是追求A和A'、B和B'的差距最小,即重构误差最小。具体计算过程如下:
思路:在重构学习的基础上,通过短语的另一种语言来互相印证双方的短语向量。例如:使用重构学习将汉字多个单词词向量组合成一个短语向量,在用重构学习将同义的英语的单词词向量组合成一个短语向量,汉语和英语的两个短语向量进行对比,形成语义的误差,目标就是追求重构误差最小的同时,语义误差也最小。样例如下:
重构学习与对比学习的对比:在求解近义词的任务中,重构学习可以求解出语义相似、但句法不合理的短语,对比学习则可以求解出语义相似且句法合理的短语:
与短语的词袋模型同理。
思路:在CBOW模型的基础上,在输入词向量的同时,加入句子向量,其他过程与CBOW一样。如下展示:
关于缺点:“只能学到语料库中的句子”的意思就是:如果一个句子不在语料库中出现,模型是无法得到其句子向量的。所以说泛化性差。
对Skip-gram模型的拓展如下:
与Skip-gram模型相似,只是将Skip-gram模型中使用的词向量作输入,换成句子向量。先使用RNN模型获取句子向量,然后用与Skip-gram同样的概率计算来确定最终各个句子的句子向量:
思路就是CNN的思想,没啥好说的,框架图如下:
同上理。
同上理。
思路:使用多种模型对文档进行学习。首先对句子使用LSTM或者CNN得到句子向量。再将得到的句子向量使用RNN去得到最后的文档向量。整体的框架如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。