在NLP中深度学习模型何时需要树形结构?

前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文《When Are Tree Structures Necessary for Deep Learning of Representations?》,该文主要对比了基于树形结构的递归神经网络(Recursive neural network)和基于序列结构的循环神经网络(Recurrent neural network),在4类NLP任务上进行实验,来讨论深度学习模型何时需要树形结构。下面我将通过分享这篇论文以及查看的一些相关资料来讨论一下我们何时需要树形结构知识。

1 句法分析树

根据不同的标注树库,句法分析树主要有两种形式:1) 短语结构树(Constituent Tree) 和2) 依存结构树(Dependency Tree)。下面举个简单的例子,"My dog likes eating sausage." 使用Stanford parsing tool进行句法分析可以得到如下结果:

我们将其可视化后,短语结构树和依存树分别为:

论文[1]中指的树形结构即为NLP中句法分析后得到的句法树结构。

2 对比模型

在论文中,主要分了两大组模型进行对比实验,具体的是:

  • Standard tree models (standard Recursive neural models), standard sequence models (standard Recurrent neural models), standard bi-directional sequence models (bi-directional recurrent neural models).
  • LSTM tree models[2], LSTM sequence models vs LSTM bi-directional sequence models.

每组就是三个模型,树模型,单向序列模型和双向序列模型,具体的模型大家可以查阅文献,下面我只给出标准模型的结构图。

Standard Recursive/Tree Models

Standard Recurrent/Sequence Models

Bidirectional Recurrent Models

3 实验数据

该文在NLP领域中4种类型5个任务进行了实验,具体的实验数据大家可以从论文中查阅,这里我主要分析一下每个任务的特点,以及最后实验的结果:

  • Sentiment Classification on the Stanford Sentiment Treebank

    这是一个细粒度的情感分类问题,根据Stanford的句法树库,在每一个节点上都标注了情感类型,所以实验分为了句子级别和短语级别,从结果来看,树形结构对于句子级别有点帮助,对于短语级别并没什么作用。

  • Binary Sentiment Classification

    这同样是一个情感分类问题,与上面不同的是,它只有二元分类,并且只有在句子级别上进行了标注,且每个句子都比较长。实验结果是树形结构并没有起到什么作用,可能原因是句子较长,而且并没有丰富的短语级别标注,导致在长距离的学习中丢失了学习到的情感信息。

  • Question-Answer Matching

    这个任务是机智问答,就是给出一段描述一般由4~6句组成,然后根据描述给出一个短语级别的答案,例如地名,人名等。在这个任务上,树形结构也没有发挥作用。

  • Semantic Relation Classification

    这个任务是给出两个句子中的名词,然后判断这两个名词是什么语义关系。树形结构的方法在这个任务上有明显的提升。

  • Discourse Parsing

    是一个分类任务,特点是其输入的单元很短,树形结构也没有什么效果。

结论

通过上面的实验,作者总结出下面的结论。

需要树形结构:

  1. 需要长距离的语义依存信息的任务(例如上面的语义关系分类任务)Semantic relation extraction
  2. 输入为长序列,即复杂任务,且在片段有足够的标注信息的任务(例如句子级别的Stanford情感树库分类任务),此外,实验中作者还将这个任务先通过标点符号进行了切分,每个子片段使用一个双向的序列模型,然后总的再使用一个单向的序列模型得到的结果比树形结构的效果更好一些。

不需要树形结构:

  1. 长序列并且没有足够的片段标注任务(例如上面的二元情感分类,Q-A Matching任务)
  2. 简单任务(例如短语级别的情感分类和Discourse分析任务),每个输入片段都很短,句法分析可能没有改变输入的顺序。

此外,哈工大的车万翔在哈工大的微信公众号也发表了《自然语言处理中的深度学习模型是否依赖于树结构?》[3],其中提到了"即使面对的是复杂问题,只要我们能够获得足够的训练数据"也可以无需树形结构。

通过这篇论文和车老师的博文以及一些相关资料,句法树形结构是否需要值得我们关注,我们应该根据自己做的任务以及句法分析的优缺点进行判断,我自己总结如下:

句法分析能够带给我们什么?

  • 长距离的语义依赖关系
  • 包含语言学知识的序列片段
  • 简化复杂句子提取核心

句法分析的缺点

  • 自身分析存在错误,引入噪声
  • 简单任务复杂化
  • 句法分析时间长

主要参考文献

[1]     J. Li, M.-T. Luong, D. Jurafsky, E. Hovy, When Are Tree Structures Necessary for Deep Learning of Representations?, EMNLP. (2015) 2304–2314.

[2]     K.S. Tai, R. Socher, C.D. Manning, Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks, Acl-2015. (2015) 1556–1566.

[3] 哈工大车万翔:自然语言处理中的深度学习模型是否依赖于树结构?

在NLP中深度学习模型何时需要树形结构?的更多相关文章

  1. 深度学习模型调优方法(Deep Learning学习记录)

    深度学习模型的调优,首先需要对各方面进行评估,主要包括定义函数.模型在训练集和测试集拟合效果.交叉验证.激活函数和优化算法的选择等. 那如何对我们自己的模型进行判断呢?——通过模型训练跑代码,我们可以 ...

  2. NLP与深度学习(四)Transformer模型

    1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ...

  3. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)

    0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...

  4. 『深度应用』NLP机器翻译深度学习实战课程·壹(RNN base)

    深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新 ...

  5. NLP与深度学习(一)NLP任务流程

    1. 自然语言处理简介 根据工业界的估计,仅有21% 的数据是以结构化的形式展现的[1].在日常生活中,大量的数据是以文本.语音的方式产生(例如短信.微博.录音.聊天记录等等),这种方式是高度无结构化 ...

  6. NLP与深度学习(五)BERT预训练模型

    1. BERT简介 Transformer架构的出现,是NLP界的一个重要的里程碑.它激发了很多基于此架构的模型,其中一个非常重要的模型就是BERT. BERT的全称是Bidirectional En ...

  7. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

  8. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  9. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

随机推荐

  1. Django - 环境搭建、url、视图、模板、标签、过滤器

    (一).简介 简介就不多说了,网上的内容一大堆.总结来说,django是走大而全的路线,写项目超级快,几乎什么都为你考虑到了,你就乖乖照着它的格式来写就行了. 这里来一些基本认知: web应用框架(w ...

  2. Django中的过滤器

    Django 过滤器   过滤器 描述 示例 upper 以大写方式输出 {{ user.name | upper }} add 给value加上一个数值 {{ user.age | add:”5” ...

  3. 10013: An attempt was made to access a socket in a way forbidden by its access permissions

    nginx的error.log日志报错: 2018/01/25 11:55:22 [emerg] 3380#15488: bind() to 0.0.0.0:20003 failed (10013: ...

  4. Angular ui-route的用法

    ui-router和同属AngularJS框架一部分的ng-route一样强大. ui-router提供了让我们可以做路由嵌套和视图命名的特性,嵌套路由功能主要是依赖$stateProvider服务, ...

  5. slenium截屏

    创建全屏截屏: public static byte[] takeScreenshot(WebDriver driver) throws IOException { WebDriver augment ...

  6. visual studio 下 C++生成dump文件

    1 lib配置 项目-->属性-->配置属性-->链接器-->输入-->附加依赖项 增加dbghelp.lib 2 头文件 #include <imagehlp.h ...

  7. 隐藏显示终端的光标(shell echo,linux c printf)

    https://www.cnblogs.com/niocai/archive/2011/11/11/2245727.html 一.使用shell 的 echo 命令实现. echo -ne <c ...

  8. SAN,NAS,DAS的差别

    ※ 今天有空整理了下关于SAN.NAS,DAS相关的东西.和大家一起共享学习下,如有不正,还望多多包涵,多多指正. 在网络存储中,有着各种网络存储解决方式,比如:SAN.NAS,DAS存储网络.它们各 ...

  9. [译转]深入理解LayoutInflater.inflate()

    原文链接:https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/ 译文连接:http://bl ...

  10. Nodejs关闭windows服务进程

    1.根据端口号,查询进程信息命令: netstat -aon | findstr "端口号" 2.根据pid杀死进程命令: taskkill /F /pid 进程号 完整代码: c ...