接下来我们就来一步步走近这个框架。首先,在多份语料上训练可以看成一个多任务学习(Multi-task Learning)问题,在 8 份语料上的模型训练就是 8 个任务。这些任务之间显然存在着很大的共性,所以可以设想用单独一个「字向量 + 双向 LSTM + CRF」模型来训练,但是如前所述,这些任务之间存在不一致,所以又必须考虑用一部分模块来建模它们之间的差异部分。论文中具体采取的方案是再拿出 8 个特定于具体任务的私有 LSTM 模块,跟原来共享的 LSTM 网络模块一同构成图 1 中的特征抽取层,变成如图 3 所示的结构。在图 3 中,两个灰色的私有 LSTM 模块分别负责捕捉 TaskA 和 TaskB 的任务私有特征,中间黄色的共享 LSTM 模块负责捕捉任务共享特征,然后再把私有特征与共享特征拼接到一起,输入每个任务私有的 CRF 模块。整个框架总共有: 1 个共享的字向量模块 1 个共享的 LSTM 模块 8 个私有的 LSTM 模块 8 个私有的 CRF 模块
图 3:多任务框架 在尝试用以上多任务框架进行训练后,atv,作者发现有 7 个语料上的分词准确率确实得到了提升,但是 MSRA 语料的准确率下降。为什么呢?作者分析认为这可能是由于共享 LSTM 模块所捕捉的特征并不「纯净」,里面可能混入了某个任务的私有特征,这些特征对 MSRA 语料没有用,甚至可能反倒有害,才导致其准确率下降。 根据上述假设,我们似乎应该想办法把私有特征从共享的 LSTM 模块中「剥离」出去,保证该模块仅仅抽取对所有语料都有用的特征,而论文作者就非常巧妙地利用了对抗网络来达到这个目的。 论文在上述多任务框架的基础应用对抗网络,提出了如下图所示的对抗多任务框架,它与之前框架的区别在于多了一个判别器(Discriminator)网络模块,负责检查共享特征中是否不小心混入了特定于某个任务的特征。
图 4:对抗多任务框架 具体来说,每当一个样本经过字向量层、共享 LSTM 层之后,我们会得到一个特征向量序列,该序列的长度与输入样本的字符长度相等。为了检查这些特征向量是否「纯净」,我们对它们求平均,得到一个固定长度的特征向量,再输入判别器网络模块,要求判别器预测该特征向量来源于 8 个语料中的哪一个。这是我们给判别器设定的目标。 假如判别器能够准确预测每一个共享特征向量的来源语料,则说明这些共享特征中混入了太多私有信息,这是我们不希望发生的事情。所以我们反过来给共享 LSTM 模块设定一个目标,让它跟判别器对抗,想办法让判别器预测不准。假如共享 LSTM 模块成功让判别器分不清特征向量来自哪个语料,意味着我们已经把私有特征剥离出去了,从而保证了共享特征向量的纯净性。 引入了上述对抗训练目标之后,新的对抗多任务框架在 8 个语料上都获得了准确率的提升。 回过头来看,这样神奇的结果似乎又很符合直觉。作者借鉴了多任务学习的思想,融合多个语料的数据来提升共享字向量模块、共享 LSTM 模块的泛化性能,又让多个私有 LSTM 模块、私有 CRF 模块分别负责各个语料之间标准不一致之处,还巧妙地利用了对抗网络把私有信息从共享模块中剥离到各个私有模块中去,既能充分享受到数据量增大带来的好处,又避免了不同语料之间相互掣肘,做到了「求同存异,共创双赢」。笔者相信这篇论文提出的对抗多任务框架不仅对中文分词有好处,也能够用在很多其他问题上,具有相当的普适应用价值。 Visualizing and Understanding Neural Machine Translation 论文作者:丁延卓、刘洋、栾焕博、孙茂松(清华大学) 特约记者:吴郦军(中山大学) 如果有一个功能神奇的「黑箱子」,你想不想打开它,好好研究一番?神经机器翻译就是这么一个「黑盒」,只要给它一句中文,就能将对应的英文顺利地翻译出来,如何才能一探其中的究竟呢?清华大学的丁延卓同学、刘洋老师、栾焕博老师和孙茂松老师在今年 ACL2017 上的工作就将这其中的奥秘「画给你看」。 (责任编辑:本港台直播) |