[关闭]
@songying 2019-03-30T06:37:31.000000Z 字数 3410 阅读 2269

阅读理解:井喷时代 - BiDAF

博客文章


前言

本来想着直接一篇文章搞定主流的state of the art 模型,但是考虑到篇幅问题以及上一篇关于阅读理解文章的反响之后,我幡然悔悟,还是一篇一篇来吧,这样一来细节可以理的很清楚,二来,文章不至于又臭又长,让人难以阅读。

本文第一篇文章来谈谈BiDAF, 一篇很适合作为新手入门的第一篇文章,没有后续模型那么复杂且论文写的很好,又有着整个的完整性,值得一看。

模型一览

我们从上图中可以看到整个模型分为 6 层, 后续的模型其实都与该图大同小异,这方面可以参见 [1]。下面我来详细介绍一下这些层。

Word Embedding Layer

这是常规套路了,将输入的词转化为对应的词向量。 这里使用的是Glove, 你也可以试试 Word2Vec, 当然,一切在 Bert 之后都不够看了, 不过新手还是老老实实的Glove吧。 于是我们就得到的词的向量表示:

Character Embedding Layer

对于一些如OV词等问题, 采用char-level 的词向量能一定程度上缓解这些问题。 文中采用了用CNN训练出来的 char-level 级别的向量表示[2],此外,对于Char-level 领域,还有采用LSTM训练得到的,值得一提的是最近大火的ELMO 也是 char-level 级别的, 有些文章采用 Word2Vec + ELMO 能够获得很好的效果。

当然,目前,学术界,已经被 Bert 给完全占领了。为了方便,char-level 向量我往往采用 Glove 提供的 char-level 向量。由于每个单词是由多个字符组成的,因此本文中采用CNN来将每个单词的 chars 连接形成一个新的向量, 也就是 char-level embedding。其实还有很多其余很简单的方法, 如取最大值, 平均值等方法。

char + word

如何将 word-level 向量与 char-level 向量结合起来也是 Bert 之前比较热的一个话题。 文中采用了Highway Network [3][4]来做这种连接。


此时我们就分别得到了Context 与Query 的矩阵:

Contextual Embedding Layer

接下来采用双向 LSTM 来获得每个词的上下文表示:


我们看到,模型的前几层依旧可以归为一类, 主要是从不同粒度来获得词的表示以更全面的表示词的特征,而 Bert 可以说是完全代替了这些,所以 Google 还是Google。

Attention Flow Layer

该层是本文的重心,也是本文的核心创新之处,本文提出了双向Attention,即 Context-to-Query 与 Query-to-Context。

Modeling Layer

本层将 G 输入到一个双向LSTM中来获得这种信息的上下文表示, 与 Contextual Embedding Layer 不同的是, G 同时考虑到了 Query 的信息。

该层的输出为: ,M 的一列代表的是融入了 Query 后的 Context 中一个词的上下文表示。

Output Layer

该层其实是根据任务而定, 对于Squad 数据集而言,是为了寻找信息片段的开始位置和结束位置, 有很多种方式, 本文用到的是:


其中, 是通过一个双向 LSTM 来得到的(这个操作不是很懂,是为了与区分,还是另有分析?)。

损失函数

最后的损失函数,采用交叉熵:

Model 重要参数

d = 100, 采用 AdaDelta 优化器, batch_size = 60, 初始学习率 = 0.5, epoch = 12, dropout = 0.2(CNN, LSTM层, softmax前的线性层)。

最后

如果有研究文本分类的同学,我们发现,这个模型要复杂的多, 这是由于阅读理解任务本身所决定的, 阅读理解任务所需要的模型拟合空间要大很多。 而其实,与最近的模型相比, BiDAF 就显得没有那么复杂了, 最近的模型才是一个个超复杂模型的集合。

Reference

[1] https://zhuanlan.zhihu.com/p/55798190

[2] Character-level convolutional networks for text classification

[3] Highway Networks

[4] Combining Word-Level and Character-Level Representations for Relation Classification of Informal Text

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注