词嵌入与情绪识别

347 阅读2分钟

1. 引入

情绪识别是NLP中的比较重要的通用任务。 对于情绪识别来说,通常标注的数据量都会比较小,一般语料中也就一万到十万个单词。 这样小的语料,对于训练NLP模型来说,是一个难点。

下面给出两种方法,借助于词嵌入,我们都能在比较小的语料中,得到不错的模型。

2. 方法一:平均词向量

具体步骤:

  1. 获取各个单词的词向量

直接用句子中,每个单词的one-hot编码,乘以词嵌入矩阵,得到每个单词的词向量

  1. 将句子中各个单词词向量相加后取平均,得到一个新向量,用于表示该句子

  2. 用这个新的词向量,送到softmax,输出预测值

这个方法的优点

  • 适用于任何长度的句子,因为最终表示该句子的词向量,都是各个词平均后的向量,向量维度与句子长度无关

这个方法的缺点

  • 它不会考虑语序,比如下面的句子
    • completely lacking in good taste, good service, and good ambience.

这个句子本身是负面情绪,但应为句子中有3个good,平均后,词向量大概率表示正面情绪。这样的预测结果就不准。

如何解决这个问题呢?

3. 方法二:RNN

我们用RNN来保证模型能考虑到语序。

具体步骤:

  1. 获取各个单词的词向量

直接用句子中,每个单词的one-hot编码,乘以词嵌入矩阵,得到每个单词的词向量

  1. 将句子中各个单词词向量,直接送给RNN

  2. RNN使用多对一的结构,最后一位输出情绪值,这是many-to-one的RNN结构[2]

RNN结构能考虑到语序,解决了方法1的缺点。

4. 情绪数据集

常见的情绪识别数据集,是斯坦福开源的IMDB评论情绪数据集,可以在参考3中下载到。 这个数据集提供了25000个训练集样本,25000个测试集样本。各个集合中,各有12500句话属于正面情绪,另外12500句话属于负面情绪。

参考4中也给出了一个非常小的IMDB简化数据集,其中有500个正例样本,500个负例样本,用于做简单的测试。

5. 总结

情绪识别最大的难点,是通常情况下,训练集数据都比较小。 有了词嵌入,只需要中等规模的数据集,你也能训练出一个情绪识别模型。 这也是词嵌入对情绪识别的贡献。

参考

作者将这篇文章最早发表在:blog.csdn.net/ybdesire/ar…