最近看了几篇nlp相关的顶会论文,又发现了一条提高文本分类精度的新思路,即增加外部的信息,就是这么简单的一句话,就蕴含了很丰富的道理,下面我来娓娓道来。
常规的处理自然语言的方法(无论是统计语言模型方法还是神经网络语言方法)所分析的对象都是一句话或者一篇文档,也就是说我们得到的关于某句话的所有信息只能全部来自于这句话的文本内容(传统的论文创新无非就是在处理这些文本的方式上进行改变,包括各种CNN和LSTM的处理结合方式)。
如果我们换个角度来思考问题,人类世界已经积累了很多外部的经验信息(比方说语法、词性),如果我们能在分析一句话的时候结合了人类总结的有用信息,无疑能够进一步提升文本的分类精度。下面我就来说一下这其中一篇比较有代表性的文章:《Linguistically Regularized LSTMs for Sentiment Classification》2017年的ACL。它加入的外部信息是 Linguistically。
这篇论文从语法的角度分析得到了几种对文本情感影响较大的关键词:情感词、否定词和程度副词。针对这些因素,以LSTM为主体模型,在最后的误差函数方面考虑了这些因素。具体细节如下:
首先我们来看看模型最终的误差函数:
E(Θ)=−∑iyilogpi+α∑i∑tLit+β(Θ)2
损失函数由三项组成,第一项很明显就是交叉熵,最后一项中的 Θ 代表了模型中的所有参数,第二项就是体现了本文标题的地方,所有的 Lit 则代表了所有的4种规范项,下面就来详细的说明一下这4种规范项。
1 Non-Sentiment Regularizer (NSR)(无情感特性的规则项)
LNSRt=max(0,DKL(pt,pt−1)−M)
其中
pt
代表在前时刻的分布表示,而
pt−1
代表了前t-1时刻的分布表示,而这些分布的代表就是
ht
,即LSTM在
t
时刻的隐藏层状态。
这里面的
p(l)
代表了概率,是把向量
hi
带入到模型的最后一层softmax算出来的。说白了这个意思就是如果t时刻的词语不是一个情感词,那么前t-1时刻的LSTM隐藏层状态和t时刻的隐藏层状态所对应的情感极性不应该发生太大的变化,
2 Sentiment Regularizer (SR) (情感词)
pSRt−1=pt−1+Sc(xt)
,
Sc∈C
其中
C
代表了情感类别数,
LSRt=max(0,DKL(pt,pSRt−1)−M))
3 Negation Regularizer (NR) (否定词)
否定词相对于情感词就比较复杂了,文章中举了两个例子,”not good” “not bad” 同样使用的not否定词,但是最后对good和bad的情感shift是不一样的。为了解决这个问题,针对每一个否定词提出一个transformation矩阵
Tm∈RC∗C
,这个情感矩阵的参数是需要学习的。
PNRt−1=softmax(Tj∗Pt−1)
PNRt+1=softmax(Tj∗Pt+1)
LNRt=min(max{0,DKL(pt,pNRt−1)−M},max{0,DKL(pt,pNRt+1)−M})
需要说明的是这个的
pt−1
是一个
C
维度的向量,乘上一个R
4 Intensity Regularizer (IR) (程度副词)
这个和第三部分的否定词有着相同的性质,也是一个程度副词对应一个transformation矩阵,细节和第三部分相同,就不再赘述了。
上述的考虑虽然合理,但是还存在一个问题,就是没有考虑程度副词和否定词改变句子情感的范围,也就是说其中
Pt
和
Pt−1
的对比是不太合适的。为了缓解这个问题,论文又给出了一种双向LSTM的策略,即从两个方向对句子进行建模。因为程度副词和否定词对句子情感极性的改变部位通常在改词的后面,我们用
P→t
代表正序的句子序列输入LSTM得出的结果,用
P←t
代表逆序的句子序列输入LSTM得出的结果。那么否定词和程度副词的公式就变成了:
P→t−1=softmax(Tj∗P→t−1)
P←t+1=softmax(Tj∗P←t+1)
Lt=min(max{0,DKL(pt,p→t−1)−M},max{0,DKL(pt,p←t+1)−M})
同理我们也可以改变NSR和SR部分的公式,由单向的改为双向的。
从整体上讲,这篇论文在做情感分类的时候考虑Linguistically信息的方式和一般的不太一样,他很巧妙的把Linguistically信息和损失函数结合在了一起,使其能够和模型一起进行训练。使模型在优化LSTM参数的时候能够更加的准确合理,的确是一个比较值得学习的新思路。