• CS224n笔记18 挑战深度学习与自然语言处理的极限


      本文转自:http://www.hankcs.com/nlp/cs224n-tackling-the-limits-of-dl-for-nlp.html

      最后一课,总结了目前这两个领域中的难题,介绍了一些前沿研究快16倍的QRNN、自动设计神经网络的NAS等。

      深度学习已经漂亮地完成了许多单项任务,但如果我们继续随机初始化模型参数,我们永远也无法得到一个可以完全理解语言的系统。模型就像蒙住眼的狗,在高原上随机游走,头撞南墙。

      Richard说他同样不相信独立的无监督学习能够救世(同意),虽然这个问题还存在许多争议。因为语言有许多监督与反馈,要完成的目标也多种多样。

      在达到下一个层次的路上,摆在NLP面前有许多障碍。

    障碍1:通用架构 

      没有单个模型能够胜任多个任务,所有模型要么结构不同,要么超参数不同。

    hankcs.com 2017-07-14 上午10.23.25.png

      上次介绍的DMN带来了曙光。

    hankcs.com 2017-07-14 上午10.28.55.png

    障碍2:联合多任务学习

    上次也提到过,同一个decoder/classifier,对于不同的输入,只要替换encoder就能同样输出。

    • 不像计算机视觉,只能共享低层参数

    • 只在任务相关性很强的时候才会有帮助

    • 否则会影响效果

    解决方案

      在第一课中提到的MetaMind团队提出的A Joint Many-Task Model: Growing a Neural Network for Multiple NLP Tasks,现在详细介绍。

    hankcs.com 2017-07-14 上午10.44.24.png

      这是个怪兽一般的模型,多层LSTM并联,从下往上看在文本颗粒度上是越来越大,在任务上是越来越复杂。

      由底而上分别是词性标注、CHUNK、句法分析、两个句子的相关性、逻辑蕴涵关系。

      输入可能是词,也可能是字符ngram。

      底层任务的隐藏状态有到其他层级的直接路径。

      相关性encoder的输出卷积一下,供逻辑关系分类器使用。

      整个模型使用同一个目标函数。左右对称只是示意可以接受两个句子用于关联分析,其实是同一套参数。

    模型细节

    hankcs.com 2017-07-14 上午10.50.02.png

      词性标注是单层LSTM,隐藏状态softmax一下,乘上label的embedding得到每个单词的pos embedding。

      将词性标注LSTM的隐藏状态、pos embedding和单词输入chunking的LSTM,执行类似的流程得到chunk的embedding。

    依存句法分析

    hankcs.com 2017-07-14 上午11.04.03.png

      依然是单层LSTM,每个时刻同时接受下级的输入。每两个时刻的单词做一次softmax,判断它们的依存关系。

      理论上讲,该方法无法保证结果一定是合法的句法树,但Richard说99%的case都是合法的,加上一些剪枝规则后,可以拿到最高分数(虽然论文还未发表就被另一位同行超越了)。

    语义联系

    hankcs.com 2017-07-14 上午11.07.57.png

      依然是类似的BiLSTM,多了个CNN max池化,过一层前馈神经网络,过一层softmax得到两个句子的语义联系。

    训练

    hankcs.com 2017-07-14 上午11.17.29.png

      如果每个softmax都用交叉熵损失函数训练的话,效果并不好。

      这里用到了一种新奇的技巧叫做successive regularization,在某个上层任务的损失函数中,加入一个正则化项,限制下层任务的参数不要改变太多。

      在训练的时候,从低层任务出发,先专注优化一个目标函数,假装上面的东西都不存在,逐步往上。(我觉得这并不是同一个目标函数)

    结果

    hankcs.com 2017-07-14 上午11.23.33.png

      联合训练提高了每项任务的效果,任务数据越小,提升越显著。这是因为迁移学习的帮助越大。

      大部分任务都拿到了最高分:

    hankcs.com 2017-07-14 上午11.25.39.png

    障碍3:预测从未见过的词语

      以前课程也讲过,pointer copy机制

    hankcs.com 2017-07-14 上午11.35.29.png

    障碍4:重复的词语表示

      输入的词向量是一个词语表示,RNN或LSTM的隐藏状态到softmax的权值又是一个词语表示。这并不合理,为什么同一个单词非要有重复的表示呢?

    解决方法

      以前没人思考过两者的关系,就让它们独立吧。CS224n的学生决定将两者视作同一套参数矩阵tie起来,在训练语言模型的同时jointly训练词向量矩阵和softmax权值矩阵。

    2017-07-14_14-57-57.png

    效果

      然后他们就用更少的参数拿到了更小的困惑度:

    hankcs.com 2017-07-14 下午2.59.07.png

    障碍5:问题的输入表示是独立的

      问题输入表示应当相关于fact的表示,比如May I cut you?根据场景是凶案现场还是超市排队的不同,表示也应该不同。

    解决方案

      Dynamic CoaaenQon Networks for QuesQon Answering by Caiming Xiong, Victor Zhong, Richard Socher (ICLR 2017)

      这篇论文提出用Coattention encoder同时接受fact encoder和query encoder的输出,这样就可以根据场景决定问题在问什么了。

    hankcs.com 2017-07-14 下午3.05.50.png

    Coattention encoder

      将document LSTM每个时刻(单词)的隐藏状态与query每个时刻的隐藏状态存成矩阵形式,左乘右乘得到两个矩阵,然后跟每个隐藏状态列向量相乘,拼接……混合充分后丢入另一个bi-LSTM合并。

    hankcs.com 2017-07-14 下午3.13.14.png

      据说是一作拼积木一样一点点尝试找出来的框架,个人觉得非常丑陋,以前手工试特征,现在手工试框架么。

      将合并结果丢入所谓的Dynamic Decoder解码,之所以叫动态是因为每个token要运行多个step,取最大值。图中的s代表start token,e代表end token。

    hankcs.com 2017-07-14 下午3.23.38.png

    Stanford Question Answering Dataset

      10万个文档-问题-答案pair,每个问题由多个可接受的答案,其中一些与原文一样(所以预测start end token是个可行方案)。

    hankcs.com 2017-07-14 下午3.27.32.png

    结果

    hankcs.com 2017-07-14 下午3.36.49.png

      论文发表时是首次将F1值推到80%以上的记录,后来MSR等人超越了这个分数。

    一个可视化

    hankcs.com 2017-07-14 下午3.40.28.png

      多次decode之后得到了答案的正确起止位置。

    障碍6:RNN很慢

      作为最重要的积木之一,RNN成为很多NLP系统的性能瓶颈。

    解决方案

      Quasi-Recurrent Neural Networks by James Bradbury, Stephen Merity, Caiming Xiong & Richard Socher (ICLR 2017)

      这篇论文提出综合CNN和RNN的优点,得到一种叫做QRNN的模型。

    hankcs.com 2017-07-14 下午3.53.51.png

      RNN每个时刻需要等前一个时刻计算完毕,所以无法并行化。

      QRNN先将所有输入相邻两个拼成一行(这是为什么叫Quasi的原因),得到一个大矩阵乘上W,于是可以在时间上并行化。

      在计算隐藏状态的时候,虽然无法在时间上并行化,但可以在特征维度上并行化。

    效果

      效果比一些实现更好,但速度总是更快,最高16倍的加速比。

    hankcs.com 2017-07-14 下午4.00.01.png

    障碍7:架构研究很慢

      (跟刚才说的手工设计特征->手工设计架构一样)能不能让深度学习模型自动设计架构呢?

      Neural architecture search with reinforcement learning by Zoph and Le, 2016做了一点这样的研究,虽然无法自动设计QRNN、DMN这样的复杂架构,但好歹可以“设计”一些诸如隐藏层数、单元数等超参数。

    hankcs.com 2017-07-14 下午4.12.31.png

      由RNN以p采样一个架构,然后训练它得到准确率R,计算p的梯度乘上R更新controller。由于选择架构是一个离散的决策,所以实际上无法得到梯度,得用强化学习来训练。

      其工作的效果如下,对CNN可以自动选择过滤器的个数、宽高等参数:

    hankcs.com 2017-07-14 下午4.18.14.png

    结果

    刚刚介绍了pointer sentinel LSTM将困惑度降到70,这个方法迅速地将数字逼近60……

    hankcs.com 2017-07-14 下午4.20.28.png

    这是search出来的一个单元:

    hankcs.com 2017-07-14 下午4.21.53.png

    有够复杂的。

    总结:NLP受到很多限制

    • 无法做有目的的QA

    • 无法用通用架构联合训练多任务

    • 很难综合多元逻辑与基于记忆的推理

    • 需要很多数据,无法从少量数据展开想象

    还有很多极限等待挑战,对这门课来讲,恭喜通关!

    2017-07-14_16-27-29.png

    Life is short, but I have a cat.
  • 相关阅读:
    修改CentOS的yum源为国内yum镜像源
    CentOS7利用yum安装node.js
    Ansible系列(一):安装
    动态链接库引起的yum故障
    《C++ Templates: The Complete Guide》读书笔记
    Linux下编译clang、libcxx及其相关库——C++11环境搭建
    shell小工具:findstr 和 findfile
    关于newexpression、new operator、operator delete的总结
    Makefile编写示例:构建一个库
    无计划就不行动!
  • 原文地址:https://www.cnblogs.com/koocn/p/7702097.html
Copyright © 2020-2023  润新知