机器学习周报第20周

摘要

词嵌入是自然语言处理领域中的一项重要技术,它通过将词语映射到实数向量空间中,实现了对语义信息的有效表示。情感分类是NLP中的一个常见任务,旨在识别文本中的情感倾向。这篇摘要将关注于如何利用词嵌入技术来提升情感分类的性能。
在词嵌入方面,我们将介绍诸如Word2Vec、GloVe等经典的词嵌入模型,以及最近流行的预训练语言模型(如BERT、GPT)对词嵌入的演进。这些模型通过学习上下文相关的词向量,使得它们更好地捕捉了词语之间的语义关系,为情感分类任务提供了更丰富的特征表示。
情感分类任务将被用作一个案例研究,探讨如何结合词嵌入技术来提高其性能。我们将涉及如何在模型中整合预训练的词嵌入,以及如何通过迁移学习等方法,利用大规模语料库中学到的语义信息来改善情感分类的泛化能力。

Abstract

Word embedding is an important technique in the field of natural language processing, which achieves an efficient representation of semantic information by mapping words into a real vector space. Sentiment classification is a common task in NLP, aiming at recognizing emotional tendencies in text. This abstract will focus on how word embedding techniques can be utilized to improve the performance of sentiment classification.
In terms of word embedding, we will introduce classical word embedding models such as Word2Vec, GloVe, and recent evolutions of word embedding by popular pre-trained language models (e.g., BERT, GPT). These models provide richer feature representations for sentiment classification tasks by learning contextually relevant word vectors, which allows them to better capture the semantic relationships between words.
The sentiment classification task will be used as a case study to explore how word embedding techniques can be incorporated to improve its performance. We will cover how to integrate pre-trained word embeddings in the model and how to improve the generalization ability of sentiment classification using semantic information learned from large-scale corpora through methods such as transfer learning.

一、词嵌入

在这里插入图片描述
如上图所示,我们用命名实体识别(named entity recognition)的例子,假如有一个句子:“Sally Johnson is an orange farmer.”(Sally Johnson是一个种橙子的农民),Sally Johnson是一个人名,所以这里的输出为1。之所以能确定Sally Johnson是一个人名而不是一个公司名,是因为你知道种橙子的农民一定是一个人。

如果用特征化表示方法,将词嵌入向量输入训练好的模型,如果你看到一个新的输入:“Robert Lin is an apple farmer.”(Robert Lin是一个种苹果的农民),因为知道orange和apple很相近,那么你的算法很容易得出Robert Lin也是一个人。那么对于不常见的单词,如这句话:“Robert Lin is a durian cultivator.”(Robert Lin是一个榴莲培育家)怎么办?榴莲(durian)是一种比较稀罕的水果,这种水果在新加坡和其他一些国家流行。如果对于一个命名实体识别任务,你只有一个很小的标记的训练集,里面甚至可能没有durian(榴莲)或者cultivator(培育家)这两个词。但是如果你有一个已经学好的词嵌入,它会告诉你durian(榴莲)也是水果,就像orange(橙子),并且cultivator(培育家),做培育工作的人其实跟farmer(农民)差不多,那么你就有可能从你的训练集里的“an orange farmer”(种橙子的农民)推断出“a durian cultivator”(榴莲培育家)也是一个人。

词嵌入能够达到上述效果,因为学习词嵌入的算法会考察非常大的文本集(very large text corpuses),可以从网上找到,因此数据集可以是1亿个单词,甚至达到100亿。通过大量无标签文本的训练集,学习这种嵌入表达,可以发现orange(橙子)和durian(榴莲)相近,都是水果,farmer(农民)和cultivator(培育家)相近。尽管你只有一个很小的训练集,也许训练集里有100,000个单词,甚至更小,这就使得你可以使用迁移学习(transfer learning),把从互联网上免费获得的大量的无标签文本中学习到的知识迁移到一个任务中,比如只有少量标记的训练数据集的命名实体识别任务中。这里为了简化这里只画了单向的RNN,事实上在命名实体识别任务中应该用一个双向的RNN,而不是这样一个简单的。
在这里插入图片描述
(1)第一步,先从大量的文本集中学习词嵌入(一个非常大的文本集)或者可以下载网上预训练好的词嵌入模型。
(2)第二步,你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中,比如说用这个300维的词嵌入来表示你的单词。这样做的一个好处就是你可以用更低维度的特征向量代替原来的10000维的one-hot向量,可以用一个300维更加紧凑的向量。尽管one-hot向量很快计算,而学到的用于词嵌入的300维的向量会更加紧凑。
(3)第三步,当你在你新的任务上训练模型时,在你的命名实体识别任务上,只有少量的标记数据集上,你可以自己选择要不要继续微调(fine-tune),用新的数据调整词嵌入。实际中,只有这个第二步中有很大的数据集你才会这样做,如果你标记的数据集不是很大,通常Andrew不会在微调词嵌入上费力气。
当你的任务的训练集相对较小时,词嵌入的作用最明显,所以它广泛用于NLP领域。例如,在命名实体识别,用在文本摘要(text summarization),用在文本解析(co-reference resolution)、指代消解(parsing),这些都是非常标准的NLP任务。
词嵌入在语言模型、机器翻译领域用的少一些,尤其是你做语言模型或者机器翻译任务时,这些任务你有大量的数据。
在这里插入图片描述
假如你在构建一个语言模型(language model),并且用神经网络(neural network)来实现这个模型。于是在训练过程中,你可能想要你的神经网络能够做到比如输入:“I want a glass of orange ___.”,然后预测这句话的下一个词。在每个单词下面,都写上了这些单词对应词汇表中的索引。实践证明,建立一个语言模型是学习词嵌入的好方法,提出的这些想法是源于Yoshua Bengio,Rejean Ducharme,Pascal Vincent,Rejean Ducharme,Pascal Vincent还有Christian Jauvin的这篇论文:A neural probabilistic language model。

下面将介绍如何建立神经网络来预测序列中的下一个单词,首先为这些词列一个表格,每个词都用一个one-hot向量表示。然后生成一个参数矩阵E,用E乘以one-hot向量,得到嵌入向量。于是现在你有许多300维的嵌入向量。我们能做的就是把它们全部放进神经网络中,经过神经网络以后再通过softmax层,这个softmax也有自己的参数,然后这个softmax分类器会在10,000个可能的输出中预测结尾这个单词。假如说在训练集中有juice这个词,训练过程中softmax的目标就是预测出单词juice,就是结尾的这个单词。隐藏层有自己的参数,这里用W[1]和b[1]来表示,这个softmax层也有自己的参数W[2]和b[2]。如果它们用的是300维大小的嵌入向量,而这里有6个词,所以用6×300,所以这个输入(input)会是一个1800维的向量,这是通过将这6个嵌入向量堆在一起得到的。

在这里插入图片描述
如上图,实际上更常见的是有一个固定的历史窗口。举个例子,你总是想预测给定四个单词(上图紫色标记)后的下一个单词,注意这里的4是算法的超参数。这就是如何适应很长或者很短的句子,方法就是总是只看前4个单词,所以说我只用这4个单词(a,glass,of,orange)而不去看这几个词(上图红色标记)。如果你一直使用一个4个词的历史窗口,这就意味着你的神经网络会输入一个1200维的特征变量到这个层中,然后再通过softmax来预测输出,选择有很多种,用一个固定的历史窗口就意味着你可以处理任意长度的句子,因为输入的维度总是固定的。所以这个模型的参数就是矩阵E,对所有的单词用的都是同一个矩阵E,而不是对应不同的位置上的不同单词用不同的矩阵。然后这些权重也都是算法的参数,你可以用反向传播来进行梯度下降来最大化训练集似然(maximize the likelihood of your training set),通过序列中给定的4个单词去重复地预测出语料库中下一个单词什么。

事实上通过这个算法能很好地学习词嵌入,原因是,如果你还记得我们的orange jucie,apple juice的例子,在这个算法下,apple和orange会学到很相似的嵌入,这样做能够让算法更好地拟合训练集,因为它有时看到的是orange juice或者apple juice。如果你只用一个300维的特征向量来表示所有这些词,算法会发现要想最好地拟合训练集,就要使apple(苹果)、orange(橘子)、grape(葡萄)和pear(梨)等等,还有像durian(榴莲)这种很稀有的水果都拥有相似的特征向量。

这就是早期最成功的学习词嵌入,学习这个矩阵E的算法之一。现在我们先概括一下这个算法,看看我们该怎样来推导出更加简单的算法。
在这里插入图片描述
如上图所示,Andrew用一个更复杂的句子作为例子来解释这些算法,假设在训练集中有这样一个更长的句子:“I want a glass of orange juice to go along with my cereal.”。我们在上个幻灯片看到的是算法预测出了某个单词juice,我们把它叫做目标词(target word)(上图蓝色标记所示),它是通过一些上下文,(1)在本例中也就是这前4个词(上图蓝色标记所示)推导出来的。如果你要建立一个语言模型,那么一般选取目标词之前的几个词作为上下文。但如果你的目标不是学习语言模型本身的话,那么你可以选择其他的上下文。

(2)比如说,它的上下文是左边和右边的四个词(4 words on left & right),你可以把目标词左右各4个词作为上下文(上图紫色标记所示)。算法获得左边4个词,也就是a glass of orange,还有右边四个词to go along with,然后要求预测出中间这个词。提出这样一个问题,这个问题需要将左边的还有右边这4个词的嵌入向量提供给神经网络,就像我们之前做的那样来预测中间的单词是什么,来预测中间的目标词,这也可以用来学习词嵌入。

(3)或者你想用一个更简单的上下文,也许只提供目标词的前一个词(last 1 word),比如只给出orange这个词来预测orange后面是什么(上图绿色标记所示),这将会是不同的学习问题。只给出一个词orange来预测下一个词是什么,你可以构建一个神经网络,只把目标词的前一个词或者说前一个词的嵌入向量输入神经网络来预测该词的下一个词。

(4)还有一个效果非常好的做法就是上下文是附近一个单词(nearby 1 word),它可能会告诉你单词glass(上图红色标记所示)是一个邻近的单词。或者说我看见了单词glass,然后附近有一个词和glass位置相近,那么这个词会是什么?这就是用附近的一个单词作为上下文。我们将在下节视频中把它公式化,这用的是一种Skip-Gram模型的思想。这是一个简单算法的例子,因为上下文相当的简单,比起之前4个词,现在只有1个,但是这种算法依然能工作得很好。

研究者发现,(1)如果你真想建立一个语言模型,用目标词的前几个单词(last few words)作为上下文是常见做法(上图蓝色标记所示)。(2)但如果你的目标是学习词嵌入,那么你就可以用这些其他类型的上下文(后面三种类型),它们也能得到很好的词嵌入。Andrew会在下节视频详细介绍这些,我们会谈到Word2Vec模型。

二、GloVe 词向量

在这里插入图片描述
Glove算法是由Jeffrey Pennington,Richard Socher和Chris Manning发明的,具体可从参考论文:Glove: Global Vectors for Word Representation。

GloVe指用词表示的全局变量(global vectors for word representation)。之前,我们列举过上下文和目标词词对,GloVe算法就是使其关系开始明确化。假定X_ij表示单词i在单词j上下文中出现的次数,那么i和j与t和c的功能一样,所以X_ij等同于X_tc。事实上,如果你将上下文和目标词的范围定义为出现于左右各10词以内的话,有一种对称关系(symmetric relationship)。如果你选择的上下文总是目标词前一个单词的话,那么X_ij和X_ji就不对称。不过对于GloVe算法,我们可以定义上下文和目标词为任意两个位置相近的单词,假设是左右各10词的距离,那么X_ij就是一个能够获取单词i和单词j出现位置相近时或是彼此接近的频率的计数器。

GloVe模型做的就是进行优化,下面具体来看看。
在这里插入图片描述
我们想要知道的是这两个单词之间有多少联系,他们同时出现的频率,这是由这个X_ij影响的。然后,我们要做的是解决参数θ和e的问题,可用梯度下降来最小化上面的公式,只需要学习一些向量,这样他们的输出能够对这两个单词同时出现的频率进行良好的预测。

如果X_ij是等于0的话,那么log0是负无穷大的,于是约定0log0=0。上面的求和公式表明,这个和仅是一个上下文和目标词关系里连续出现至少一次的词对的和。

f(X_ij)的另一个作用是加权,有些词在英语里词频较高,比如说this,of,a等等,但是在频繁词和不常用词之间也会有一个连续统(continuum)。不过也有一些不常用的词,我们还是想将其考虑在内,但又不像那些常用词这样频繁。

因此,f(X_ij)就可以是一个加权因子,对于不常用的词同样给大量有意义的运算,同时不会给在英语里出现更频繁的词过分大的权重。因此有一些对加权函数f的选择有着启发性的原则(heuristics),就是既不给词频高的词过分的权重,也不给这些不常用词(durion)太小的权值。如果想知道f是怎么能够启发性地完成这个功能的话,可以看一下GloVe算法论文。

最后,一件有关这个算法有趣的事是θ和e现在是完全对称的(completely symmetric),所以θ_i和e_j就是对称的。如果只看数学式的话,θ_i和e_j的功能很相近,我们可以将它们颠倒或者排序,实际上他们都输出了最佳结果。因此一种训练算法的方法是一致地初始化θ和e,然后使用梯度下降法来最小化输出,当每个词都处理完之后取平均值(mean),因为θ和e在这个特定的公式里是对称的(symmetric),所以给定一个词w
这就是GloVe算法的内容。仅仅是最小化,像这样的一个二次代价函数是怎么能够让你学习有意义的词嵌入的呢?但是结果证明它确实有效。

在我们总结词嵌入学习算法之前,有一件更优先的事(one more property)。
在这里插入图片描述
如上图,以这个特制的表格(featurization view)作为例子来开始学习词向量。前四行的嵌入向量分别来表示Gender、Royal、Age和Food。但是当你在使用我们了解过的算法的一种来学习一个词嵌入时,例如我们之前的幻灯片里提到的GloVe算法,会发生一件事就是你不能保证嵌入向量的独立组成部分是能够理解的,为什么呢?

假设说有个空间,里面的第一个轴(上图红色标记1)是Gender,第二个轴(上图红色标记2)是Royal,你能够保证的是第一个嵌入向量对应的轴(上图红色标记3)是和这个轴(红色标记1,2所示)有联系的,它的意思可能是Gender、Royal、Age和Food。具体而言,这个学习算法会选择这个(上图红色标记3)作为第一维的轴,所以给定一些上下文词,第一维可能是这个轴(上图红色标记3),第二维也许是这个(上图红色标记4),或者它可能不是正交的,它也可能是第二个非正交轴(上图红色标记5),它可以是你学习到的词嵌入中的第二部分。如果有某个可逆矩阵A。

三、情感分类

情感分类(sentiment classification)任务就是看一段文本,然后分辨这个人是否喜欢他们在讨论的这个东西,这是NLP中最重要的模块之一,经常用在许多应用中。情感分类一个最大的挑战就是可能标记的训练集没有那么多,但是有了词嵌入,即使只有中等大小的标记的训练集,你也能构建一个不错的情感分类器,让我们看看是怎么做到的。
在这里插入图片描述
如上图所示,是一个情感分类问题的例子,输入x是一段文本,而输出y是要预测的相应情感。例如一个餐馆评价的星级,

比如"The dessert is excellent."(甜点很棒),四星的评价(review);

“Service was quite slow”(服务太慢),这是两星评价;

“Good for a quick meal but nothing special”(适合吃快餐但没什么亮点),三星评价;

还有比较刁钻的评论,“Completely lacking in good taste, good service and good ambiance.”(完全没有好的味道,好的服务,好的氛围),给了一星评价。

如果你能训练一个从x到y的映射,基于这样的标记的数据集,那么你就了解大家对餐馆的评价。一般而言,可以通过一个情感分类器分析一些社交平台上的评价,然后分析出大家对你的餐馆的评论的情感是正面的还是负面的,这样可以了解餐馆是在蒸蒸日上还是每况愈下。

情感分类一个最大的挑战就是可能标记的训练集没有那么多。对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果,尤其是只有很小的训练集时。

接下来我们看几个不同的算法。
在这里插入图片描述
如上图,这是一个简单的情感分类的模型,看这个句子"The dessert is excellent",我们通常用10,000个词的词汇表(dictionary)。我们要构建一个分类器能够把它映射成输出四个星,对于句子中的4个单词,找到相应的one-hot向量,所以the就是o_8928,乘以嵌入矩阵E,E可以从一个很大的文本集里学习到(它可以从一亿个词或者一百亿个词里学习嵌入),然后提取单词the的嵌入向量e_8928,对dessert、is、excellent做同样的步骤。

如果在很大的训练集上训练E,比如一百亿的单词,这样你就会获得很多知识,甚至从有些不常用的词中获取,然后应用到你的问题上,即使你的标记数据集里没有这些词。我们可以这样构建一个分类器,取这些嵌入向量,比如是300维度的向量。接着把它们求和(sum)或者求平均(mean)。在这里取平均之后会得到一个300维的特征向量,把这个特征向量送进softmax分类器,然后输出y帽。这个softmax能够输出5个可能结果的概率值,从一星到五星,这个就是5个可能输出的softmax结果用来预测y的值。

这里用的平均值运算单元(the average operation here),这个算法适用于任何长短的评论,因为即使你的评论是100个词长,你也可以对这一百个词的特征向量求和或者平均它们,然后得到一个表示一个300维的特征向量表示,然后把它送进你的softmax分类器,所以这个平均值运算效果不错。

这个算法有一个问题就是没考虑词序,尤其是这样一个负面的评价,“Completely lacking in good taste, good service, and good ambiance.”,good这个词出现了3次,如果算法忽略词序,只是把所有单词的词嵌入加起来或者平均下来,最后的特征向量会有很多good的表示,分类器很可能认为这是一个好的评论,尽管事实上这是一个差评,一星评价。
在这里插入图片描述
如上图所示,首先取这条评论,“Completely lacking in good taste, good service, and good ambiance.”,用每一个one-hot向量乘以词嵌入矩阵E,得到词嵌入表达e,然后把它们送进RNN里。RNN的工作就是在最后一步(上图编号1所示)计算一个特征表示,用来预测y帽,这是一个多对一(many-to-one)的网络结构的例子。这个算法考虑词的顺序效果就更好了,它就能意识到"things are lacking in good taste",这是个负面的评价,“not good”也是一个负面的评价。而不像原来的算法一样,只是把所有的加在一起得到一个大的向量,根本意识不到“not good”和 “good”不是一个意思,"lacking in good taste"也是如此,等等。

如果你训练一个这样的算法,最后会得到一个很合适的情感分类的算法。由于你的词嵌入是在一个更大的数据集里训练的,这样效果会更好,更好的泛化一些没有见过的新的单词。比如其他人可能会说,“Completely absent of good taste, good service, and good ambiance.”,即使absent这个词不在标记的训练集里,如果是在一亿或者一百亿单词集里训练词嵌入,它仍然可以正确判断,并且泛化的很好,甚至这些词是在训练集中用于训练词嵌入的,但是可以不在专门用来做情感分类问题的标记的训练集中。

总结

通过结合词嵌入技术,特别是利用预训练语言模型的词嵌入,可以显著提升情感分类任务的性能。这种方法使得模型更好地理解文本中的语义信息,从而更准确地捕捉情感倾向。在应用中,可以根据具体任务选择适当的词嵌入模型,并通过微调或迁移学习等手段来适应特定的情感分类场景。综合考虑词嵌入的选择、模型结构和任务特性,将有助于构建更加强大和适应性强的情感分类系统。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值