干货 | 第一批在 SQUAD 2.0 上刷榜的 U-NET 模型,它们有何高明之处?

2018-12-26 10:53:06 浏览数 (1)

AI 科技评论按:今年下半年,SQuAD 2.0 横空出世。基于 U-net 的一众模型纷纷获得了优异的成绩(截至到 BERT 屠榜之前)。一篇来自 betterlearningforlife.com 的文章对 SQuAD 2.0 进行简要的介绍,并以问答的形式介绍了计算语言学与 U-net 模型相关的一些问题。 AI 科技评论全文编译如下。

「在 SQUAD 上取得好成绩的网络架构是什么样的呢?」

在我开始撰写本文的时候,排名前三位的模型在谷歌上没有任何链接。微软亚洲研究院的团队(Microsoft Research Asia team)是这三者其中之一,它们甚至还没有在网站上发布它们最新的成果。我似乎有一个理论来解释为什么,但这多少有些推测性。

幸运的是,前四名的表现并没有太大的不同,所以我们可以看看一些高性能的想法。最佳方案采用了基于 U-net 的架构,相关的论文链接如下:https://arxiv.org/abs/1810.06638 。本文也将从这里展开。

「U-net 背后的思想是什么?」

在目前的机器学习架构开发过程中,开发者往往都会针对数据集构建特定的算法架构。U-net 也不例外,采用 U-net 架构是为了针对 Standford 提出 SQuAD 2.0 的目的。Standford 之所以会创建 SQuAD 2.0 是为了修复1.0中的一些缺陷。

「SQuAD 1.0 存在什么问题呢?」

这就涉及到一些「无法回答的问题」的难题。当人们阅读一段东西时(如新闻),他们可能会问一些简单的问题,这些问题的答案可以直接在文本中找到。然而,他们更有可能问一些不能直接回答的相关问题。一个强大的数据集需要很好地同时对这两者建模。如果数据集中只有已经被回答的问题,那么模型将学会总是给出一些在文本中能够找到的答案。当有人提出一个没有直接出现在文本中的问题时,它自然而然地会给出错误的答案。

SQuAD 1.0 中也有一些无法回答的问题,但它们是由机器生成的,而且对神经网络来说,不需要更深层的理解就很容易识别它们。许多参赛模型的性能已经在 SQuAD 1.0 数据集上超越了人类的水平,然而它们在现实世界中的实际应用却没有取得有意义的进展。

「Stanford 是如何改进这个数据集的呢?」

他们增加了5万个由众包员工撰写的无法回答的问题。这些问题被设计得与可回答的问题相类似。

下面的例子向大家展示了一段文字以及两个无法回答的问题,材料来自论文「Know What You Don’t Know: Unanswerable Questions for SQuAD」(https://arxiv.org/abs/1806.03822):

文章:濒危物种法案 摘选段落:「...其他立法紧随其后,包括1929年的候鸟保护法案,1937年的禁止捕杀露脊鲸和灰鲸的条约,1940年的秃鹰保护法案。这些随后制定的法律的社会成本很低,毕竟这些物种相对稀有,很少有人会反对这样的法案。」 问题 1:「哪项法律被极力反对?」 机器可能给出的回答:随后制定的法律。 问题 2:「1937 年通过的条约的名字是什么?」 机器可能给出的回答:秃鹰保护法案

「U-net 模型是如何处理这些改进的数据集的?」

U-net 模型包含一个结合了许多最新研究进展的有趣方法。这是一个很好的例子,告诉我们可以如何用神经架构创造性地进行设计。

他们的模型基本上包含以下四个部分:

  • 嵌入
  • 融合
  • 多层注意力机制
  • 预测

接下来让我们仔细看看这个模型,在我们的脑海中,让我们从广义概念上对模型推断进行思考,并想想这个系统是如何作为一个不同的整体的一部分与其组合在一起的。

现在,让我们从头开始细细研究 U-net 模型。

「什么是嵌入技术?」

嵌入是降维的一种形式。例如,对使用通用网络爬虫技术抓取到的「Glove」(Global Vectors for Word Representation,用于词语表示的全局向量)的嵌入技术可以将大小为 1.9M 的词汇表缩减为一个 300 维的向量。

然而,我们可以进一步把这个 300 维的向量缩减到2维。我们可以看到,这些词在大致相同的「方向」上会根据其意义被区分开。

Glove 的降维结果

「在人类的思维存储一些概念时,会将其存储为嵌入、图模型、二者的结合还是其它形式呢?」

嵌入技术缺乏人类大脑所拥有的一种关键能力。像所有的神经网络一样,嵌入式是「分组的」近似。更改任何网络权重都会更改其它输入的输出。

我们可以猜测,人类的大脑能够有选择地对某些词汇做出一些改变。相信大家都有过和别人辩论一个词的意思的经历。然后在查了字典之后,我们发现我们对这个词的理解并不是通常被人们所接受的定义。从那时起,我们可以在脑海中更新对这个词的理解,这样的过程会一直持续下去。不可否认,「连词」肯定会对理解有一些影响,但总的来说,我们的准确率并不会下降。(让我们大胆地想象一下。)

下面这张最近发布的大脑图像显示了「不同的单词被存储在大脑的各个地方」的设想。这是个有趣的想法。那么,大脑是如何防止对同一个单词进行重复多次的表示呢?

进行这项研究的团队发布了一个在线交互模型,链接如下:
http://gallantlab.org/huth2016/。

「在未来的通用人工智能(AGI)系统中,嵌入技术会成为语言翻译的模型吗?」

它们确实感觉很相似,因为它们本质上都是降维,或压缩信息。我们可以想象大脑也在做类似的事情。我们的语言中个存在很多同义词,我们经常会说「...和...意思相同」。通常情况下,当同义词之间的细微差别非常小时,我们必须将其弄清楚,探究这些词在这个语境下究竟代表什么意思。

「什么是词与词之间结构的理论?」

我们先不谈这个!

「嵌入技术是如何实现的?」

它们基本上是降维的一种形式。经过对模型的训练,隐层会被提取出来,它们的「潜在空间」会被用于另一个架构中。近年来,研究者们提出了许多不同的嵌入方法,所以在这里我们仅仅以两个嵌入方法为例。(1)FastText,这是一个简单而强大的对比基线,(2)ELMO,这是 2018年最先进的方法。

FastText 与 CBOW 算法类似。

「什么是 CBOW?」

CBOW 是 skip-gram 方法的「镜像」。

「那什么是 skip-gram 呢?」

在 skip-gram 方法中,句子中的每一个单词都会被用来预测邻近的单词。

「Gram」指的是我们要处理的单词/单词串/字符串有多长。

我们还可以加大「窗口大小」来预测距离当前单词更远的单词。我们在这里使用大小为 1 的窗口。

「但是语言并不仅仅是以概率形式存在。它作为人类的意图和可以改变的事实而存在。一个大的概率模型对我们来说意味着什么?」

正如我们在上面看到的,它为我们提供了词语之间的「关系」,或者说将那些在某种程度上相似的词语以「相近」的形式表征了出来。

使用 skip-gram 或 cbow 方法的 word2vec(https://code.google.com/archive/p/word2vec/ )模型能够执行一些有一定规律可循的向量操作。例如(以下均为嵌入向量的计算):「国王」 - 「男人」 「女人」得到的向量与代表「女王」的向量非常相近。

我们可以通过以下链接看到一个使用 word2vec 的在线演示样例:http://bionlp-www.utu.fi/wv_demo/ 。

这个单词类比工具很有趣。你可以给它三个单词,A, B, C,它会尝试找到第四个单词 D。相信你还记得 9 年级英语课上最烦人的练习「A 之于 B,就像 C 之于 D」(A is to B as C is to D)。

当我们向这个模型输入「女王」、「女人」和「公主」,模型会输出「女孩」。然而,当我们输入「国王」、「男人」和「王子」则并没有得到同样令人满意的结果,模型给出的答案是「女人和男孩」。

「这似乎是一个良好的开端。我们是否能继续进行研究,并且通过更改单词来得到特定的关系呢?」

就像其他稠密的神经网络一样,这只是一种近似。我们不能手动改变单词来得到特定的关系,我们需要一个更好的训练方法/模型/数据来使用这个概念得到更好的结果

「嵌入技术似乎就是对于通用词语模式的一种粗略的近似。它们有什么作用呢?」

FastText 已经能够在一些情感分析数据集上获得至少 90% 的准确率。

「上述方法的镜像是什么?」

对于词袋来说,与其让一个单词映射到周围的单词,不如让它周围的单词映射到那个单词。更多细节请参阅:https://iksinc.online/tag/continuous-bag-of-words-cbow 。这项工作不是用循环神经网络完成的,所以单词的顺序并不重要。

「FastText 的工作机制有何与众不同之处?」

FastText 利用上面得到的这些嵌入创建了一个「平均嵌入」的隐层。

FastText 技术还使用了层次 softmax 技术,在哈弗曼编码的基础上,对标签进行编码,极大地缩小了模型预测目标的数量,从而在数据中存在很多类时提升了计算效率。

「ELMo(Embedding from Language Models,语言模型生成的嵌入)的工作机制有何与众不同之处?」

ELMo 试图使用某个单词的上下文信息。Skip-gram 和 CBOW 使用的是一个大小为 2 的窗口,所以我们很难将它称之为「上下文」,下面的例子可以很好地说明这一点:

  • 我们在缅因州找到的商店 (store) 非常棒。
  • 在缅因州,我们发现了被动物刨过的食物贮藏 (store) 。

这个例子看起来很能说明问题,由于 FastText在统计上是基于单词之间的距离工作的,它无法捕获单词在句子中的用法。

「E 代表嵌入,ELMo 中的语言模型部分是什么呢?」

在这个「上下文」中,语言模型是一个 LSTM 模型,我们用它来预测句子中的下一个单词是什么。这不是什么新鲜事,自从 Karpathy 发表关于 RNN 的博客文章(http://karpathy.github.io/2015/05/21/rnn-effectiveness/ )以来,已经过去三年了,这是第一篇创建了文本生成模型的文章。

研究人员不久前发现,将信息输入给一个前后向传播的 LSTM 可以改进各种语音/声音/文本任务。ELMo 也是这么做的。

「所以我们在这里将嵌入用到了 LSTM 中?」

在 ELMo 方法中,嵌入是LSTM隐层的每个输出的权重。

保存下来的隐层状态被添加到了一个大的长向量中。我们还可以从单词本身获得一个额外的嵌入。这个词本身可以是一个单词(token)嵌入,也可以是在字符串上进行卷积运算得到的结果。每个单词总共有 2L(层数) 1 个嵌入。

但是 Elmo 的工作还没有完成。我们仍然需要对这些嵌入作进一步的研究工作,模型的其余部分将决定哪些嵌入是有用的。Elmo 实际上在很多任务上都取得了很好的效果。要实现这样的效果在某种程度上需要针对于特定任务的权重。Elmo很好地封装了上面的向量

(http://mlexplained.com/2018/06/15/paper-dissected-deep-contextualized-word-representations-explained/ )。

「现在我们对这些嵌入相关的技术已经有了一个初步的模糊概念,Unet 模型使用了那些技术呢?」

它们使用了Glove(用于单词表示的全局向量)、ELMo(语言模型生成的嵌入)、POS(词性标注)、NER(命名实体识别)以及特征嵌入等技术。这里使用到的嵌入技术很多。

「什么是特征嵌入?」

在原论文中,作者们对特征嵌入的定义是:「精确匹配、小写匹配、论点匹配和TF-IDF特征。」TF-IDF(https://en.wikipedia.org/wiki/Tf–idf )是一种测量一个单词在语料库中出现多少次的方法。因此,他们创造了对那些人们可能很容易注意到,但是如果不对数据集进行大量的排列,网络就可能无法注意到的语言特征的嵌入。例如大写字母和小写字母。

「这会生成大量的嵌入,这些模型会如何处理这些嵌入呢?」

在这里,这些模型会得到所有这些巨大的嵌入的堆栈,它们将为文章中的每一个单词计算一次这样的嵌入,再为问题中的单词也计算一次。它们最后会通过另一个随机向量u的简单连接将这些嵌入结合在一起。从而得到:V=[Q,u,P]

他们希望这个被称为「通用节点」的 u 向量将包含文章和问题中的抽象信息。

「向量 u 很重要吗?」

原文作者展示的第一个模型简化测试的结果就是「删除向量 u 之后, F1 值下降了 2.6%」。

「向量 u 是如何同时从问题和文章中抽取出信息的?」

为了模糊化问题、向量 u、文章之间的信息,他们将向量 V 作为一系列双向 LSTM 的输入。

当然,他们更喜欢将这个过程称为「融合相关的信息」。

「为什么还要在 H 向量中保留 H^L,H^H 呢?H^F 的信息不够吗?」

这篇论文的主题,以及最近的一些成功案例的做法都是将前面的层的隐藏状态传递给所有更深的后面的层。

「为什么将隐藏状态传递给后面更深的层是有效的?」

这个问题还有待探索!

「我们已经做好了充分的准备去做一些事情,U-net 模型的核心是什么?」

U-Net 模型将多层注意力机制(https://arxiv.org/pdf/1803.02353 )和答案指针(https://arxiv.org/pdf/1608.07905.pdf )技术融合在了一起,这两种方法都能得到很好的效果。

「注意力机制在区分向量中的问题和答案部分的过程会不会很困难?」

确实如此!为了解决这个问题,作者首先将隐层分割成了单独的的段落/问题块,分别对应文章或问题中的每一个单词p1、p2。

「答案指针究竟做了些什么?」

答案指针是 PointerNet(https://arxiv.org/abs/1506.03134) 的具体应用,它允许根据输入序列而不是词汇表预测单词。它通过注意力机制来做到这一点。

在 U-net 中,答案指针被用于检测文章中的「答案边界」。如果这个问题是可以回答的,那要找到答案就很简单了。

「如果答案在原文中找不到怎么办呢?」

对于无法回答的问题,u-net 在原文表示之前将 u 向量设置为真实数据边界。对于无法回答的问题,「答案边界」应该位于文章本身之外。由于想要使用一些 SQuAD 2.0 提供的信号信息,他们在这里使用了一个不同的损失函数。从人类生成的「合理的答案文本」中可以获得更多信息。模型简化实验表明,将这种合理的文本损失考虑在内时可以将 F1 score提高1%。

答案指针本身不会对答案是否存在做出最后的判断。

「最终如何确定一个问题的可回答性?」

这就需要用到答案「验证器」模块。它将前面的项(例如多层注意力机制的输出)和答案指针转换为固定维度的向量。然后对它们进行合并,并将合并后的结果传递给一个带交叉熵损失的「线性 sigmoid」层,最终决定这个问题是否可回答。

「我们还需要注意哪些细节呢?」

我们已经了解了这种方法的本质,看到了它的模块设计思路很棒。它直接保留所有的信息,并在模型的下游重用这些信息以获得更高的性能,这种能力似乎给我们上了重要的一课。现在让我们回顾一下这个模型并看看其他的推理方法。

V-net 模型有四个主要的模块

  • 嵌入
  • 融合
  • 注意力机制
  • 预测边界

对我来说,这篇论文最有趣的结论是,「我们可以把许多不同的概念组合在一起,得到比使用单个部分更好的结果」。

「还有其他在模型的下游层中使用隐藏状态的例子吗?」

DenseNet(https://arxiv.org/abs/1608.06993)就是一个很好地例子。它将前面的卷积层的隐藏状态传递下去。实际上,U-net 论文的作者甚至在参考文献中也提到了 DenseNet。

「我们还应该研究研究其它性能良好的模型架构吗?」

与其研究另外的性能良好的模型架构,我们不如看一看其他的创建推理系统的方法。嵌入技术、LSTM 以及注意力机制都是很实用的工具。让我们来看看一些范式转换的方法,以获得更多不同的创建推理系统视角。比如 Sigma, Soar 或 SPAUN。

目前我们还无法回答的问题有:

  • 「什么是词语之间的结构理论?」
  • 「为什么将隐藏状态传递到更下游的层会有帮助?」

0 人点赞