莫斯科物理技术学院(MIPT)前不久开源了聊天机器人DeepPavlov(基于TensorFlow和Keras),对于有志学习NLP的同学是个不错的借鉴。其中的语义理解分类模块,不是采用的马尔科夫随机场(CRF)或RNN, 而是使用一维卷积去做语义分类:
这一模型是来自纽约大学的论文: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数据集的扩展数据集,这些数据集的一些信息如下:
模型性能方面,1D的CNN方法较传统机器学习方法有一定竞争力,当然在一些数据集上表现并不算好:
参考文献:
- https://github.com/deepmipt/DeepPavlov
- Convolutional Neural Networks for Sentence Classification
- Understanding how Convolutional Neural Network (CNN) perform text classification with word embeddings
本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com
或直接扫二维码:
David 9
Latest posts by David 9 (see all)
- 修订特征已经变得切实可行, “特征矫正工程”是否会成为潮流? - 27 3 月, 2024
- 量子计算系列#2 : 量子机器学习与量子深度学习补充资料,QML,QeML,QaML - 29 2 月, 2024
- “现象意识”#2:用白盒的视角研究意识和大脑,会是什么景象?微意识,主体感,超心智,意识中层理论 - 16 2 月, 2024