是否将所有NLP任务都可视作QA?

举例:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

在old-school NLP系统中,必须手工整理一个“知识库”;然后在这个知识库上做规则推断。这节课介绍的DMN完全不同于这种方法,它能够直接从问答语料中学习所有必要的知识表达。

DMN还可以在问答中做情感分析、词性标注和机器翻译。所以构建一个joint model用于通用QA成为终极目标。

但是实现这个目标,有两个障碍

1.没有任何已有研究探讨如何让单个模型学习各种不同的任务。每种任务都有独特的特点,适合不同的神经网络去实现

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

2.Fully joint multitask learning(同一个decoder/classifier,不仅仅共享词向量,而应该共享全部参数)非常困难。有些不成功的研究发现,只能在低层(词向量)共享参数、如果任务之间没有直接关联则会顾此失彼。

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 DMN 今天介绍的DMN仅仅解决了第一个问题。虽然有些超参数还是得因任务而异,但总算是个通用的架构了。

回答难题:假设有个阅读理解题目

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

你无法记住全文,但看了问题之后,只要带着问题扫几眼原文,你就能找出答案。这种现象启发了DMN。

首先对整个框架有所了解:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

左边输入input的每个句子每个单词的词向量,送入input module的GRU中。同样对于Question Module,也是一个GRU,两个GRU可以共享权值。

Question Module计算出一个Question Vector q,根据q应用attention机制,回顾input的不同时刻。根据attention强度的不同,忽略了一些input,而注意到另一些input。这些input进入Episodic Memory Module,注意到问题是关于足球位置的,那么所有与足球及位置的input被送入该模块。该模块每个隐藏状态输入Answer module,softmax得到答案序列。

有人问DMN能否学会新类型的问题,答案是否定的。Episodic Memory Module中有两条线,分别代表带着问题q第一次阅读input的记忆,以及带着问题q第二次阅读的记忆。

讲各个模块的细节:

The Modules: input

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

输入模块接受 T_I个输入单词,输出T_C个“事实”的表示。如果输出是一系列词语,那么有T_C=T_I;如果输出是一系列句子,那么约定T_C表示句子的数量,T_I表示句子中单词的数量。我们使用简单的GRU读入句子,得到隐藏状态h_t=GRU(x_t,h_t−1),其中x_t=L[w_t],L是embedding matrix,w_t 是时刻 t 的词语。

事实上,还可以将这个Uni-GRU升级为Bi-GRU:每个fact被表示为双向隐藏状态的拼接。

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 The Modules :Question

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 同样用一个标准的GRU读入问题,同样的embedding matrix L,得到最后一个隐藏状态qt=GRU(L[w(^Q)_t],q_t−1)。

The Modules: Episodic Memory

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 其中,episodic memory representation 初始化为 m_0=q,并通过 GRU处理: m_i=GRU(e_i,mi−1)。而 episode representation 使用input module的隐藏状态输出更新:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 其中 g是 attention mechanism,有多种计算方式。在最初的DMN paper (Kumar et al. 2016)中,验证了下列公式是最好的:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

这里最重要的是z的计算,通过句子向量、问题向量、上一个记忆向量之间原始形式与element-wise乘积(相似性)的按行拼接,得到一个超长的列向量。然后非线性**传播一层,softmax得到g,表示每次阅读对每个时刻(句子)的关注程度。

Richard说最初他们还尝试过q^T*W_s,后来发现并没有什么帮助。他的忠告是,如果模型中有多余的部分,那就去掉。

这里两条线代表两个GRU,阅读两遍。这也是个超参数。Richard说最开始多个pass的Memory也通过GRU合并,后来发现只留两个pass直接视作两层神经网络也能解决问题,能简单就不要复杂。

The Modules :Answer

answer module就是一个简单的GRU decoder,接受上次输出的单词(应该是one-hot向量),以及episodic memory,输出一个单词:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 相关工作

有很多已有工作做了类似研究:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

与DMN联系密切的是后面两篇论文,都有Memory Component。

与MemNets比较:

相同点:

都有input, scoring, attention and response模块

不同点:

Mem Nets主要使用词袋,然后有一些embedding去encode位置

Mem Nets迭代运行attention和response

这些不同点都是由于Mem Nets是个非sequence模型造成的。而DMN是个血统纯正的neural sequence model,天然适合序列标注等任务,比Mem Nets应用范围更广。

DMN的sequence能力来自GRU,虽然一开始用的是LSTM,后来发现GRU也能达到相同的效果,而且参数更少。

结果:

QA:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

这是一个自动生成的QA语料库,里面都是一些简单的问答。部分NLP学者很厌恶机器生成的语料,但如果连机器生成的语料都无法解决,何谈解决真实的复杂问题。

情感分析:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

依然拿到最高分数。此时问题永远是相同的,其向量是固定的。遗憾的是,对于不同的任务,超参数依然必须不同才能拿到最佳结果。

Episodes数量

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

其中task 3是三段论,理论只需要3个pass,但模型依然需要5个。考虑到这是个end to end训练,没有监督信号指示那些fact是重要的,所以这个表现还挺好。情感分析的N/A是因为,计算复杂度实在太高了。分数已经在降低,所以干脆没跑。

情感分析的例子:

颜色越深代表模型的attention越强烈。如果只跑一个pass,则模型无法得到整个句子的全文,所以将过多的注意力放到无关紧要的贬义词上。

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 另一些类似的例子:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 词性标注:

虽然0.06%的提升不算什么,但考虑到这是一个通用的模型,感觉是非常棒的。

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 VQA 视觉问题回答:

任何任务都可视作QA任务,所以这个模型也适用于VQA,只需将处理文本的输入模块替换为处理图像的输入模块:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 输入模块:

由于卷积特征并不是序列的,所以输入模块的输出特征只是所有时刻隐藏状态向量的拼接。

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 结果很不错 然后就拿到了最高分:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 attention可视化:

越亮代表越注意,可以发现模型的确在注意问题相关的部分:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 在一些较难的问题上也能较为满意地回答:

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

 比如模型认为女孩穿的是短裤,但问女孩的短裙是什么颜色,它也能知道是白色。这说明模型很健壮。虽然一些问题回答得不好,但Richard认为只是数据量不够的原因

总结:

大部分NLP任务都可视作QA

DMN可以解决多种QA任务

还有可以在问题上也做attention的Dynamic Co-attention Networks

斯坦福CS224n NLP课程【十六】——用于回答问题的动态神经网络

相关文章:

  • 2022-12-23
  • 2021-04-10
  • 2021-11-23
  • 2021-08-19
  • 2021-08-21
  • 2021-09-12
  • 2021-08-03
  • 2022-12-23
猜你喜欢
  • 2021-05-23
  • 2021-10-01
  • 2021-12-16
  • 2021-04-05
  • 2021-11-23
  • 2021-07-08
  • 2021-04-17
相关资源
相似解决方案