标题:Double Embeddings and CNN-based Sequence Labeling for Aspect Extraction 作者:Hu Xu, Bing Liu, Lei Shu and Philip S. Yu 机构:Department of Computer Science, University of Illinois at Chicago, Chicago, IL, USA Institute for Data Science, Tsinghua University, Beijing, China 相关数据集: 1、NLTK 2、Yelp Review Dataset 3、SemEval 2014 task 4 4、SemEval 2016 task 5 相关代码: 1、源码 2、CRF with GloVe 3、BiLSTM-CNN-CRF 4、DE-CNN-CRF
不同于往常复杂的有监督的深度学习框架,作者认为就AE(aspect extraction )而言,利用简单的CNN模型加上领域词向量就能有效的提高抽取的性能。
模型框架图如图1所示,general embedding为GloVe 840K的通用领域的词向量,domain embedding为商品评论的领域词向量。 1、直接拼接两种词向量,将拼接的结果放入4层CNN网络中,然后在进行一个全连接层。 2、其中第一层卷积层应用了两种不同卷积核大小的卷积操作(代码给的是3和5) 3、卷积操作之后,直接进入一个ReLU激活函数: 注意不同于以往的CNN,在卷积操作之后加入了池化操作,文章给的解释是说序列标注任务中对于位置需要很好的表征,因为池化操作会混合位置信息,因此没有最大池化操作。
在实验部分的代码中,第一层的CNN应用了128个滤波器,剩下的CNN层应用了256个滤波器,dropout设置为0.55,优化器用Adam且设置为0.0001. 主要的实验结果如下图所示: 从实验中就能看出,如果加入max-pooling操作后,效果反而下降了。同时可以看到加上了CRF操作后,效果也是一样的降低了1-2%,作者认为的是由于CRF在标签依赖方面建模能取得不错的效果,但是很多aspect是单个词,因此在产生了不少错误。
文章提出了一种利用双嵌入机制的基于cnn的方面提取模型。 1、文章采用了4层CNN和一层全连接层,每一层CNN学习的东西是否可解释? 2、层数的不同设置是否会对结果产生不同的影响? 3、文章并未介绍领域向量是怎么来的,虽然给出了领域向量的下载地址,但是没有介绍领域向量是通过什么方法得到的。
对于问题2,由于作者公布的代码里面是将通用词向量和领域词向量拼接放进卷积核为5的CNN里面,然后将拼接的向量放进卷积核为3的CNN里面,然后将两者进行拼接后再放进剩下的三层CNN中,因为本人理解为了5层CNN,对于每一层对结果影响,如下图所示: 可以明显发现,在laptop数据集上,无论将其中的任何一层去掉,其结果都不能得到最后作者的结果,都要下降了1-2%个百分点。 而在restaurant数据集上,没有了最后一层的准确率甚至比DE-CNN效果要好一点点。。。其他也是一样不能达到作者的结果。 总的说也就是,每一层缺一不可,好奇每一层学习到的东西,应该如何解释。