2.9 情感分类(Sentiment Classification)

情感分类任务就是看一段文本,然后分辨这个人是否喜欢他们在讨论的这个东西,最大的挑战就是可能标记的训练集没有那么多,但是有了词嵌入,即使只有中等大小标记的训练集,也能构建一个不错的情感分类器

输入xx是一段文本,输出yy是要预测的相应情感。比如一个餐馆评价的星级

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

给定四个词("dessert is excellent"),通常用10,000个词的词汇表,找到相应的one-hot向量,再乘以嵌入矩阵EEEE可以从一个很大的文本集里学习到,比如它可以从一亿个词或者一百亿个词里学习嵌入,然后用来提取单词the的嵌入向量e8928e_{8928},对dessertisexcellent做同样的步骤

然后取这些向量(编号2),如300维度的向量,通过平均值计算单元(编号3),求和并平均,再送进softmax分类器,然后输出y^\hat y。这个softmax能够输出5个可能结果的概率值,从一星到五星

这个算法适用于任何长短的评论,因为即使评论是100个词长,也可以对这一百个词的特征向量求和取平均,得到一个300维的特征向量,然后送进softmax分类器

但问题是没考虑词序,如负面的评价,"Completely lacking in good taste, good service, and good ambiance.",good这个词出现了很多次,但算法忽略词序,仅仅把所有单词的词嵌入加起来或者平均下来,最后的特征向量会有很多good的表示,分类器很可能认为这是一个好的评论,尽管事实上这是一个差评,只有一星的评价

为了解决这一问题,情感分类的另一种模型是RNN:

首先取这条评论,"Completely lacking in good taste, good service, and good ambiance.",找出每一个one-hot向量,乘以词嵌入矩阵EE,得到词嵌入表达ee,然后把它们送进RNN

RNN的工作就是在最后一步(编号1)计算一个特征表示,用来预测y^\hat y。这样的算法考虑词的顺序效果更好,能意识到"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这个词不在标记的训练集里

如果是在一亿或者一百亿单词集里训练词嵌入,它仍然可以正确判断,并且泛化的很好,甚至这些词是在训练集中用于训练词嵌入,但不在专门做情感分类问题标记的训练集

Last updated