译者|fendouai【磐创AI导读】:这篇文章讲解了如何用卷积神经网络和自注意力机制实现QANet。这可以帮助我们更好的去理解或解释我们的模型。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。在这篇文章中,我们将解决自然语言处理(具体是指问答)中最具挑战性但最有趣的问题之一。我们将在Tensorflow中实现Google的QANet。
IBMWatson在Jeopardy与KenJennings(左)和BradRutter(右)竞争(在2011年)。
斯坦福问题问答数据集的一个例子。资料来源:https://rajpurkar.github.io/SQuAD-explorer/正如我们从上面的例子中可以看到的那样,无论问题多么容易或困难,这个问题的答案总是在段落本身内。但首先,让我们来看看我们期望解决的各种问题和答案。通常情况下,问题本身已经是段落段的释义版本。
SQuAD的对抗性示例。资料来源:https://arxiv.org/pdf/1707.07328.pdf以蓝色突出显示的句子是为欺骗网络而插入的对抗性示例。对于人类读者来说,它没有改变问题的答案:“超级碗XXXIII中38岁的四分卫的名字是什么?”因为对抗性的判决正在谈论冠军杯XXXIV。然而,对于网络而言,对抗性句子与问题的对比情况要好于基本真实句子。
网络架构概述。资料来源:https://openreview.net/pdf?id=B14TlG-RW模型网络可以分为大约3个部分:1.词嵌入2.编码器3.注意力机制词嵌入是将文本输入(段落和问题)转换为密集低维向量形式。这是通过类似于本文的方法完成的。
字符感知语言建模。资料来源:https://arxiv.org/pdf/1508.06615.pdf我们的方法非常相似。唯一的区别是我们的卷积滤波器使用固定的内核大小5。在将它们放到高速网络之前,我们还将单词表示与最大池化字符表示连接起来。编码器是模型的基本构建块。编码器模块的细节可以从上图的右侧看到。编码器由位置编码,层标准化,深度可分离1d卷积,自注意力机制和前馈层组成。
然后我们将它们通过1层1维卷积神经网络,最大池化,连接词+字符表示,最后通过2层高速网络。我们在“卷积”和“高速网络”功能中加入“重用”参数的原因是我们希望对段落和问题使用相同的网络。“卷积”和“高速网络”功能是我们Tensorflow实现的卷积神经网络和高速网络。
最后,我们有输出层,它接收注意力层输出并将它们编码成一个密集的向量。这是SQuAD的特性有用的地方。因为我们知道答案在段落的某个地方,所以对于段落中的每个单词,我们只需要计算单词作为答案的概率。实际上,我们计算两个概率。相应单词属于答案开头的概率和相应单词属于答案结尾的概率。这样,我们不需要从大字典中找出答案,并且有效地计算概率。最后,我们有输出层,它接收注意力层输出并将它们编码成一个密集的向量。
结束了!训练和演示与其他基于RNN的模型相比,QANet训练相对较快。与流行的BiDAF网络相比,QANet的性能提升约5~6倍。我们用60,000次全局步骤训练网络,在GTX1080GPU上大约需要6个小时。
在Tensorboard中可视化结果。顶部图是验证集结果,底部是训练集结果。“em”完全匹配,“f1”是F1得分。这是非常简约的方法,但我希望它能帮助您理解基于神经网络的问答!如果您对他们有疑问,请发表评论,我会尽力回答您的问题。感谢您的阅读,请在评论中留下问题或反馈!
对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!http://www.panchuang.net。我们的公众号:磐创AI。
领取专属 10元无门槛券
私享最新 技术干货