一维卷积在语义理解中的应用,莫斯科物理技术学院(MIPT)开源聊天机器人DeepPavlov解析及代码

莫斯科物理技术学院(MIPT)前不久开源了聊天机器人DeepPavlov(基于TensorFlow和Keras),对于有志学习NLP的同学是个不错的借鉴。其中的语义理解分类模块,不是采用的马尔科夫随机场(CRF)或RNN, 而是使用一维卷积去做语义分类:

来自:https://arxiv.org/pdf/1408.5882.pdf

这一模型是来自纽约大学的论文:Convolutional Neural Networks for Sentence Classification,用一维卷积为句子的语义分类。

值得注意的是,上图模型中,第一层句子的词嵌入输入(embedding)并不是单个通道,而是两个通道的。每个通道用相同的word2vec的embedding方法初始化(表征同一个句子),有意思的是,文章指出,把其中一个通道的词表征静态化(static),而另一个通道的词表征设为可训练的(non-static),这样两个通道组合在一起可以有更好效果。

第二层中,与图像卷积把输出特征通道叠加的做法不同,这里的1D卷积是用concatenate拼接操作而不是加和add操作。

当然,DeepPavlov源码中似乎没有考虑到原版论文中的双通道方法,只是用了单通道的embedding输入:

def cnn_model(self, params):
    """
    Build un-compiled model of shallow-and-wide CNN
    Args:
        params: dictionary of parameters for NN

    Returns:
        Un-compiled model
    """

    inp = Input(shape=(params['text_size'], params['embedding_size']))

参见源码:deeppavlov/models/classifiers/intents/intent_model.py

最后了解一下论文实验方法:

首先数据集作者用的是影评感受MR(movie review)的相关数据集和扩展,给出一句话的影片评价,判别是褒扬/批评/中性等等的评价等级,SST-1,SST-2等都是MR数据集的扩展数据集,这些数据集的一些信息如下:

来自:https://arxiv.org/pdf/1408.5882.pdf

模型性能方面,1D的CNN方法较传统机器学习方法有一定竞争力,当然在一些数据集上表现并不算好:

来自:https://arxiv.org/pdf/1408.5882.pdf

 

参考文献:

  1. https://github.com/deepmipt/DeepPavlov
  2. Convolutional Neural Networks for Sentence Classification
  3. Understanding how Convolutional Neural Network (CNN) perform text classification with word embeddings

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表评论

电子邮件地址不会被公开。 必填项已用*标注