一起看论文:Stochastic Answer Networks for Natural Language Inference

论文链接:https://arxiv.org/abs/1804.07888

        这篇论文提出了处理自然语言推理任务的SAN模型(随机答案模型),在没有用预训练模型构造句子特征的情况下(也就是说没有用ELMo、Bert、MT-DNN、XLNet这些开了挂的预训练模型的情况下),该模型是state-of-the-art的自然语言推理模型。当然,Bert、MT-DNN、ALNet都陆续刷榜了各种自然语言处理任务,包括自然语言推理。

        首先说一下什么自然语言推理任务。简单来说就是判断两个句子之间有什么关系,一般有三种关系:蕴含、矛盾、中立。再解释一下,就是给出一个前提句子(Premise),比如“John在睡觉”,然后判断另一个句子(Hypothesis),如“他转过头发现John在睡觉”,是否对应这个前提句子。那么结果可以有三种:对应(蕴含)、不对应(相矛盾)、无关的(中立)。显然在这个例子里,Hypothesis是支持Premise的。

    我们直接来看SAN是怎样的:

自然语言推理的SAN模型

        首先,是词汇层面上对Hypothesis和Premise进行编码。把句子的词向量和字符向量拼接在一起。由于此时每个单词的向量维度不一样,所以还要输入基于位置的两层全连接网络,这样一来,每个单词的向量维度就一致了。(这一点详细可看Stochastic Answer Networks for Machine Reading Comprehension这篇论文。)

        然后,输入BiLSTM,把两层LSTM隐藏层拼接得到与上下文有关的词向量。除此之外,把它们输入一层神经网络,两边都得到一个句向量,然后利用这两个句向量得到注意力矩阵,注意力机制采用像Transfomer一样的点积注意力机制(Query、Key、Value)。

        有了注意力矩阵,我们把刚才由BiLSTM隐藏层拼接得到的词向量乘以注意力矩阵,输出再与该词向量拼接。这样就把有用的信息都集合在一起。

        记忆层是把上一层的向量输入一个新的BiLSTM。在Premise这边,还要输入一层GRU,GRU的第一个状态是用左边Hypothesis的Memory隐藏层的加权求和来初始化,权重是可以学习的参数。每一个GRU状态是由上一个GRU输出和当前Premise的Memory隐藏层加权求和向量决定的。

                                    

                                          

                               

        其中是可以学习的参数。每一对和都输入一个分类器得到最后的三种关系的概率分布。

                       

        最后的分类答案取决于各个时刻的分类答案概率分布的平均值。

                                  

        你以为这就完了?不不不。所谓随机答案模型,还要突出“随机”这两个字。就是随机把某些时刻的答案丢弃掉再取概率分布的平均值。这就是自然语言推理的SAN。为什么强调这是自然语言推理呢?是因为SAN本来用于机器阅读理解的,这里的SAN是机器阅读理解的SAN变形,以适用于自然语言推理任务。

阅读理解的SAN模型论文链接:https://arxiv.org/pdf/1712.03556.pdf

你可能感兴趣的:(一起看论文:Stochastic Answer Networks for Natural Language Inference)