基于CNN的阅读理解式问答模型:DGCNN

本文介绍了DGCNN模型,一个轻量级、快速的阅读理解式问答模型,适用于WebQA任务。DGCNN结合了膨胀卷积和门控卷积,利用人工特征和技巧,避免了复杂的RNN结构。模型在SOGOU问答比赛中表现出色,达到了0.7583的高分。文章详细阐述了模型的架构、门机制、膨胀卷积、注意力机制以及数据处理策略,展示了简单模型在处理问答任务上的潜力。
摘要由CSDN通过智能技术生成

作者丨苏剑林

单位丨广州火焰信息科技有限公司

研究方向丨NLP,神经网络

个人主页丨kexue.fm


早在年初的一文读懂「Attention is All You Need」| 附代码实现中就已经承诺过会分享 CNN 在 NLP 中的使用心得,然而一直不得其便。这几天终于下定决心来整理一下相关的内容了。


背景


事不宜迟,先来介绍一下模型的基本情况。


模型特点


本模型——我称之为 DGCNN——是基于 CNN 和简单的 Attention 的模型,由于没有用到 RNN 结构,因此速度相当快,而且是专门为这种 WebQA 式的任务定制的,因此也相当轻量级。


SQUAD 排行榜前面的模型,如 AoA、R-Net 等,都用到了 RNN,并且还伴有比较复杂的注意力交互机制,而这些东西在 DGCNN 中基本都没有出现。 


这是一个在 GTX1060 上都可以几个小时训练完成的模型!


640?wxfrom=5&wx_lazy=1

▲ 截止到2018.04.14的排行榜


DGCNN,全名为 Dilate Gated Convolutional Neural Network,即“膨胀门卷积神经网络”,顾名思义,融合了两个比较新的卷积用法:膨胀卷积、门卷积,并增加了一些人工特征和 trick,最终使得模型在轻、快的基础上达到最佳的效果。


在本文撰写之时,本文要介绍的模型还位于榜首,得分(得分是准确率与 F1 的平均)为 0.7583,而且是到目前为止唯一一个一直没有跌出前三名、并且获得周冠军次数最多的模型


比赛情况


其实这个模型是我代表“广州火焰科技有限公司”参加 CIPS-SOGOU 问答比赛的产物。这个比赛在去年十月份开始,然而有点虎头蛇尾,到现在依然还是不上不下的(没有结束的迹象,也没有继续新任务的迹象)。 


其实刚开始的两三个月,竞争还是蛮激烈的,很多公司和大学都提交了模型,排行榜一直不断刷新。所以我觉得 SOGOU 这样虎头蛇尾未免有点对不起大家当初提交的热情。


最关键是,它究竟是有什么计划、有什么变动,包括比赛的结束时间,一直都没公开发出什么通知,就一直把选手晾在那里。我后来打听到,截止时间是今年的 CIPS 举办前...一个比赛持续举办一年?


赛题简述


到目前为止,SOGOU 的这个比赛只举办了事实类的部分,而事实类的部分基本上是跟百度之前开放的 WebQA 语料集 [1] 一样的,即“一个问题 + 多段材料”的格式,希望从多段材料中共同决策出问题的精准答案(一般是一个实体片段)。


640


相比 WebQA,搜狗提供的训练集噪声大得多,这也使得预测难度加大。


此外,我认为这种 WebQA 式的任务是偏向于检索匹配以及初步的语义理解技术,跟国外类似的任务 SQUAD(一段长材料 + 多个问题)是有比较大的区别的,SQUAD 的语料中,部分问题还涉及到了比较复杂的推理,因此 SQUAD 排行榜前面的模型都比较复杂、庞大。 

模型


现在我们正式进入模型的介绍中。


架构总览


先来看个模型总图:


640

▲ DGCNN模型总图


从示意图可以看到,作为一个“阅读理解”、“问答系统”模型,图中的模型几乎是简单到不能再简单了。 


模型的整体架构源于 WebQA 的参考论文 Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Factoid Question [2]。这篇论文有几个特点:


1. 直接将问题用 LSTM 编码后得到“问题编码”,然后拼接到材料的每一个词向量中;


2. 人工提取了 2 个共现特征;


3. 将最后的预测转化为了一个序列标注任务,用 CRF 解决。


而 DGCNN 基本上就是沿着这个思路设计的,我们的不同点在于


1. 把原模型中所有的 LSTM 部分都替换为 CNN; 


2. 提取了更丰富的共现特征(8 个);


3. 去掉 CRF,改为“0/1 标注”来分开识别答案的开始和终止位置,这可以看成一种“半指针半标注”的结构。


卷积结构


这部分我们来对图中的 Conv1D Block 进行解析。


门机制


模型中采用的卷积结构,来自 FaceBook 的 Convolutional Sequence to Sequence Learning [3],而在《分享一个 slide:花式自然语言处理》[4] 一文中也提到过。


假设我们要处理的向量序列是 X=[x1,x2,…,xn],那么我们可以给普通的一维卷积加个门:


640


注意这里的两个 Conv1D 形式一样(比如卷积核数、窗口大小都一样),但权值是不共享的,也就是说参数翻倍了,其中一个用 sigmoid 函数激活,另外一个不加激活函数,然后将它们逐位相乘


因为 sigmoid 函数的值域是 (0,1),所以直觉上来看,就是给 Conv1D 的每个输出都加了一个“阀门”来控制流量。这就是 GCNN 的结构了,或者可以将这种结构看成一个激活函数,称为 GLU(Gated Linear Unit)。


除了有直观的意义外,用 GCNN 的一个好处是它几乎不用担心梯度消失问题,因为有一个卷积是不加任意激活函数的,所以对这部分求导是个常数(乘以门),可以说梯度消失的概率非常小。如果输入和输出的维度大小一致,那么我们就把输入也加到里边,即使用残差结构:


640


640

▲ 残差与门卷积的结合,达到多通道传输的效果


值得一提的是,我们使用残差结构,并不只是为了解决梯度消失,而是使得信息能够在多通道传输。我们可以将上式改写为更形象的等价形式,以便我们更清晰看到信息是如何流动的:


640


从 (3) 式中我们能更清楚看到信息的流向:以 1−σ 的概率直接通过,以 σ 的概率经过变换后才通过。这个形式非常像递归神经网络中的 GRU 模型。


补充推导:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值