文中该任务指 aspect level sentiment classification.
aspect term 即描述该 aspect 的词语(可能是一个 word,可能是一个 phrase)
首先,从 motivation 中可以看出,作者希望用 attention mechanism 来提升该任务的结果。总的来说作者要把 Attention 加入到 LSTM 模型中,使得在处理该任务时能更加关注待预测 aspect 对应的关键部分。
具体来说,作者提出了两种考虑注意方面信息的方法:一种方法是将 aspect embedding vector 连接到用于计算注意权值的句子隐藏表示中,另一种方法是将 aspect embedding vector 附加到输入单词向量中。
这部分没必要多说。
因为 aspect 信息很重要,所以作者提出要给 aspect 找 embedding vector。因为一句话中可能出现多个 aspect ,所以每个 aspect 理应有各自对应的 embedding vector 。作者用 v a i v_{a_i} vai 来代表第 i 个 aspect 的 embedding vector,其维度为 d a d_a da,所以可以表示为 v a i ∈ R d a v_{a_i}∈R^{d_a} vai∈Rda 。而所有 aspect 的 embedding vector 组成的 embedding matrix 用 A A A 表示, A ∈ R d a × ∣ A ∣ A∈R^{d_a×|A|} A∈Rda×∣A∣ ,其中 ∣ A ∣ |A| ∣A∣ 代表 A 中的向量个数(这里的|A|不是求 A A A 的行列式的意思,具体原因我也没深究过,但在NLP中取模基本就是代表取个数,例如对一个词汇表 V V V 取模 ∣ V ∣ |V| ∣V∣ 就是 V V V 中单词个数的意思)(从数学角度上来说是列的秩,即默认列向量代表一个 aspect 的 embedding vector)。
为了抓住一句话中对应于属性的重要部分的信息,作者提出了一种 attention mechanism,示意图如下。
可以看到,作者提出的这种方法是先将 sequence 经过 LSTM layor 之后得到的 output h i h_i hi 与当前考虑的 aspect v a v_a va 进行拼接。用 H H H 表示 [ h 1 , … , h N ] [h_1,…,h_N] [h1,…,hN] 这个矩阵,其中 N 为 该 sequence 的长度, H ∈ R d × N H∈R^{d×N} H∈Rd×N,其中 d d d 为 h i h_i hi 的维度也即 LSTM layer 中神经元个数。之后对拼接之后的向量做 Attention 操作得到整句话的表示 r 。
上一段所描述的内容也可以用下面这些公式表示:(其中 v a ⊗ e N v_a⊗e_N va⊗eN 表示让 v a v_a va 变成 [ v a , v a , … , v a ] [v_a,v_a,…,v_a] [va,va,…,va] )
M = t a n h ( [ W h H W v v a ⊗ e N ] ) α = s o f t m a x ( w T M ) r = H α T M=tanh( \left[ \begin{matrix} W_hH\\ W_vv_a⊗e_N \end{matrix}\right]) \\ α=softmax(w^TM)\\ r=Hα^T M=tanh([WhHWvva⊗eN])α=softmax(wTM)r=HαT
从公式中可以看出打分函数是 w T M w^TM wTM ,而期望表示 r 是通过隐层表示 H 求得的,但最后作为整个句子的表示是 h ∗ h^* h∗ ,其是通过公式 h ∗ = t a n h ( W p r + W x h N ) h^* = tanh(W_pr+W_xh_N) h∗=tanh(Wpr+WxhN) 得到的。我个人的直观理解是,如果只用 Attention 的结果作为整个句子的表示的话,可能靠后的单词的信息不容易被考虑进去(因为比如 Attention 对 hi 很看重,那么 hi 本身是包含之前 h 的信息的,而之后的 h 的信息则在 hi 中完全没有被考虑,这就容易导致 Attention 后的结果得到的表示包含着前面的信息更多)。而因为 LSTM 本身最后一个隐层表示可以作为整个句子的表示,并且其本身的特点是就是对越靠近出口的 input 考虑的越多,所以二者正好可以互补。
得到这个句子最后的表示之后,将其放入一个 linear layor 得到维度为情感类别个数的 output,之后用 softmax 处理来得到最后结果。
其实就是将 AE、AT 合起来,其形式如下图:
从上图也容易看出,如果在 input 中加入 aspect information( v a v_a va ),那么显然输出的隐藏表示( h 1 , h 2 , … , h N h_1,h_2,…,h_N h1,h2,…,hN)会具有来自输入的 aspect information。所以接下来计算 Attention 权重时,可以对单词与 aspect 之间的相互依赖进行建模。
至于为什么这个模型可以衡量单词与 aspect 之间的相互依赖程度,我的直观理解是这样的:首先,得到的隐层表示 h h h 会包含 input vector 中的信息,而如果本身某个 input word 与 aspect (或者说 input word representation vector 与 aspect embedding 相似),那么它们得到的 h h h 肯定会有更多关于 aspect 的信息。那么也就意味之这些包含了更多 aspect information 的隐层表示与 v a v_a va 更加相互依赖,这也解释了本段开头的疑问了。
实验分为了几个任务,虽然这些任务不太相同,但是他们都是用到了 SemEval 2014 Task 4 中的数据集合(这个数据集合中各个数据集各有不同,每个任务具体用的哪个数据集也不同)。
该实验中,所有的词向量都是由Glove初始化的,言外之意就是之后 embedding 要当成参数一同学习学得。其他参数是通过从均匀分布 U ( − ϵ , ϵ ) U(−ϵ,ϵ) U(−ϵ,ϵ) 采样来初始化的。 词向量的维数,aspect embedding 的维数和隐藏层的大小为300。 attention weight 的长度与句子的长度相同。几个 model 的 batch size 均为 25,momentum 为 0.9,L2-正则化权重为 0.001,初始学习率为 0.01,优化器为 AdaGrad。
作者使用的数据集是 SemEval 2014 Task 4。
首先预先设定一组 aspects,任务的目标是预测出这些 aspect 的极性。例如预先给定这组 aspects {food , price , service , ambience , anecdotes/miscellaneous}。接下来根据评论 “The restaurant was too expensive.”,可以明显得出 price 的极性是负面的,而除了 price,其他 aspects 模型也需要进行预测。
Dataset:为了可以根据上面的的任务定义,作者选择使用 SemEval 2014 Task 4 中的 restaurants data,因为只有这个数据集标注了每个评论都有预先设定的各个 aspect 的极性。
上面那个任务中的 aspect 是预先设定的,但现在这个任务中预测评论中出现的每个 aspect term (可能一个评论中出现多个 aspect term)的 sentiment polarity。
Dataset:使用在餐厅和笔记本电脑数据集的句子中,每个方面术语的出现都有位置和情感极性。