句法依存分析_复旦大学邱锡鹏教授:词法、句法分析研究进展综述

018153d6878572463c8aa46983344300.png
本文为第十六届自然语言处理青年学者研讨会 YSSNLP2019 报告《词法、句法分析研究进展综述》的简要文字整理,本报告主要回顾词法、句法领域的最新研究进展。

关于报告人:

邱锡鹏,复旦大学计算机科学技术学院副教授,博士生导师。于复旦大学获得理学学士和博士学位。主要从事自然语言处理、深度学习等方向的研究,在 ACL、EMNLP、IJCAI 等计算机学会 A/B 类期刊、会议上发表 50 余篇学术论文,引用 1600 余次。开源中文自然语言处理工具 FudanNLP 作者。2015 年入选首届中国科协人才托举工程,2017 年 ACL 杰出论文奖,2018 年获中国中文信息学会“钱伟长中文信息处理科学技术奖—汉王青年创新奖”。

8ac756b5383d4d2335b006d9d1d76fc3.png

大家好,我是邱锡鹏。今天非常荣幸给大家简要分享一下 NLP 中词法和句法分析领域的最新研究进展。

7d8fa1f94893a2cee93b3d3c690e9c7b.png

首先,我们来看一下词法和句法分析中的任务定义。我们一般认为词是语言中的最小语义单位,所以在进行后续的很多 NLP 任务的时候,需要先进行(中文)分词,标注它的词性,并分析句子的句法结构。像这里给的一个句子“上海计划发展金融业”,首先需要将其进行分词,然后进行词性标注和句法分析。这里我们的句法分析主要以依存句法分析为主进行介绍,建立词与词之间的依赖关系。因此我们这里主要涉及三个任务:中文分词,词性标注和依存句法分析。

6aae4ee6d927f1c1bbc2cdcaa09f557e.png

目前用来解决这三个任务的基本方法可以分为序列标注方法,基于转移的方法和基于图的方法三种。为了解决错误传播问题,一般来说,我们可以将这三个任务进行联合建模,比如中文分词和词性标注的联合模型、词性标注和句法分析的联合模型、以及三个任务的全联合模型。

30aa8cb382716d5ec199b92f38375a3a.png

这三个任务的最新研究进展和 SOTA 模型都可以从 NLP-Progress 这个网站进行查询。

中文分词

233c4259e6e50ed57123132b65b8e711.png

首先我们来看一下中文分词。

982691f19aa7c874db59949b696b6722.png

目前中文分词最好的模型是来自 EMNLP 2018 的一篇论文,采用了基于堆叠双向长短期记忆网络的序列标注模型

25feb48bd6987e649bb53604a00d6e95.png

该方法虽然在模型上并没有太多的创新,但是其采用了预训练 bigram embedding 和变分 droupout 方法以及堆叠双向长短期记忆网络的微创新,训练了一个相对较深的网络,在解码时直接使用一个 softmax 分类器,而不用 CRF。在多个数据集上达到了最好的效果。

1d7e1b01855dc22cec6ad9451d936467.png

基于序列标注的方法是给字进行打标签,很难利用到词级别的信息。为了引入词级别的信息可以采用以下三种方法:基于转移的方法、Semi-CRF 和 DAG-LSTM/Lattice-LSTM。下面我分别简要介绍一下这三种方法。

d9757f1a30d2bbcf1ce27084e37acd4e.png

基于转移的方法是通过转移动作序列来进行分词,即从左往右判断一个每两个相邻的字是分还是不分。这是一种贪婪的方法。在中间某一步时,我们已经有之前分好词的信息,所以可以利用词级别的信息来进行建模。

7990ef6b61188ea8a263689799c16e15.png

第二种利用词级别信息的方法是利用 Semi-CRF 模型,直接建模不同词之间的依赖关系。一般来讲,可以先统一通过一个双向的循环神经网络来提取字别的信息,然后使用一个融合方法来生成词级别的信息,最后输入 Semi-CRF 层来进行分词。Semi-CRF 的缺点是候选词有一个最大长度限制,我们提出了一种改进方法,目前正在投稿中。

b9fa715b79cc6c729b3584ab3e2c5fd9.png

第三种利用词级别信息的方法是是改进 LSTM 模型,将链式结构扩展到 DAG 结构。我们可以用一个事先准备好的词典,对句子进行预分割,把所有的分割可能性都组合出来。这样我们模型的输入是有多个字和词构成的混合序列,构成一个 DAG 结构。针对这种结构,我们提出一种 DAG-LSTM 来进行序列标注。

37a60a621d9b636a6a21324f4625820f.png

在中文分词中,有一个问题是很多不同的分词标准。之前的方法都是在单个标准上进行训练模型。我们知道,不同的分词标准之间有很多共通的特性。如这个表中所示,三个不同标准存在部分重叠,因此我们可以同时利用多个不同标准的数据进行联合训练,通过多任务学习来辅助提高每个单独标准的分词能力。

4e97db4d28968599753150414ab36867.png

这里介绍一个我们在多标准分词上面的最新工作,所有不同的标准都共享一个模型,由于 Transformer 的强大能力,我们用一个共享的 Transformer 来进行编码,解码用一个共享的 MLP 或 CRF。然后增加一个额外的 Criterion ID,用来指示模型输出哪个标准的结果。目前这个模型在所有的分词任务上都达到了最好的效果。

词性标注

150e1ae86ddc4585ead0d2c9f0e6d832.png

词性标注一般来讲比较简单,所以很少有单独工作来专门的词性标注任务。一般都是词性标注和其他任务相结合。首先我们来看一下联合的中文分词和词性标注任务。

c12f74aebd7353b485f282343456652a.png

第一种方法是基于字的序列标注方法,使用“BMES”和词性的交叉标签来给每个字打标签。比如“B-NN”、“S-NR”等。相比于中文分词,分词和词性的联合任务需要更多的特征,因此我们可以用更复杂的网络来进行抽取特征。

914caeff9e4af749969799e40b869d1e.png

第二种方法是基于转移的方法,首先利用一个 BiLSTM 编码器来提取上下文特征,在解码时每一步都预测一个动作。动作的候选集合为是否分词以及词性。

依存句法分析

3c754d7cfbdb9bb3d886f167128e72a2.png

接下来介绍下句法分析的最新进展,这里主要以依存句法分析为主。在深度学习之前,依存句法分析就分为基于转移的方法和基于图的方法。近几年,分别出现了针对这两种不同方法的神经网络模型。

3451ea32073e8dfc7f152f6dcdb9adf4.png

首先来看下基于转移的方法,通过 shift-reduce 两个基本的动作来将序列转换为树结构。首先用一个 buffer 来存储所有未处理的输入句子,并用一个栈来存储当前的分析状态。

动作可以分为:1)shift,即将 buffer 中的一个词移到栈中;2)left_arc(x),即栈顶两个词 a,b 为 a<-b 的依赖关系,关系种类为 x;3)right_arc(x),即栈顶两个词 a,b 为 a->b 的依赖关系,关系种类为 x。后两种动作为 reduce 动作。

cd5e4f9eb7913c3ecde04b9dddf01583.png

目前基于转移的方法的最好模型是 Stack LSTM,通过三个 LSTM 来分别建模栈状态、待输入序列和动作序列。 其中因为栈需要入栈和出栈,因此作者提出了一个 Stack LSTM 来建模栈状态。

b14491fe460acb3b88b3aef56a45b0f6.png

虽然基于 Stack LSTM 取得了非常好的效果,但是在目前的依存句法分析中,最流行的方法是基于图的方法经典的方法是 Biaffine 模型。直接用神经网络来预测每两个词之间存在依存关系的概率,这样我们就得到一个全连接图,图上每个边代表了节点 a 指向节点 b 的概率。然后使用MST等方法来来将图转换为一棵树。

Biaffine 模型其实和我们目前全连接自注意力模型非常类似。Biaffine 模型十分简单,并且容易理解,并且在很多数据集上都取得了目前最好的结果。

d65b99bf1cfcf59e19526d42e90f6f1b.png

除模型外,目前依存句法分析主要关注于多语言的依存通用依存分析。目前一个数据集是 universal dependenies,其中有很多问题值得研究,比如多任务学习、迁移学习、通用语言表示等。

词性标注 & 句法分析

ab2602f609e41ce33663a302c559f862.png

很自然地我们可以将词性标注和句法分析作为联合任务来进行建模。

a43c7c3393980893253c7ec5da45c768.png

联合的词性标注和句法分析方法有很多,可以是基于转移的方法也可以是基于图的方法。这里介绍一种比较简单的方法,首先利用 LSTM 来预测词性,然后用词性信息和词信息一起用另外一个 LSTM 进行建模,并用 Biaffine 模型进行句法分析。

中文分词 & 句法分析

5f01a451fc3be6c0863f8704d618074b.png

在中文方面,句法分析是基于词级别的,所以在做句法分析之前要先进行分词。那么我们是不是可以将中文分词和句法分析也作为一个联合任务来同时进行呢?

51e832fec5e1b00505253d8582e7553c.png

我们提出了一个基于图方法的统一模型来同时解决中文分词和句法分析问题。其实方法很简单,只需要将词内部的字之间加上一个特殊的依赖关系“app”,然后将词级别的依存关系转换为字级别的依存关系。并且用 biaffine 模型来进行同时预测。

0de6bf06edf1c040010edc8a70a7eb96.png

这就是具体的模型结构,和 biaffine 模型类似。

fastNLP

99775025ba5abb33ce4a50502054cb1d.png

最后,上面的模型都将在 fastNLP 中进行实现,这里简单介绍下我们最近的一个工作,基于深度学习的自然语言处理平台 FastNLP

c4afccf9853365c173082c82d3dacbeb.png

我们希望做到具有 Spacy 的易用性,AllenNLP 模块化以及 AutoML 自动模型选择。

393083206cfe2d7e37e7c1e2adabfe3e.png

FastNLP 是一个模块化可扩展的 NLP 框架,提供大量的预训练模型,可以使大家在五分钟内实现 SOTA 模型。另外 NLP 中大量的时间都花在数据的预处理和数据转换上面,FastNLP 提供了一种非常简单高效的数据预处理方法。面向我们科研工作者,FastNLP 也提供了非常方便的参数记录以及实验过程可视化工具。

0730ee514473d923b8fb1b38dfcee472.png

最后希望有兴趣的老师、同学一起来参与开发,谢谢。

#投 稿 通 道#

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

投稿方式:

• 方法一:在PaperWeekly知乎专栏页面点击“投稿”,即可递交文章

• 方法二:发送邮件至:hr@paperweekly.site ,所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

加入社区:http://paperweek.ly

微信公众号:PaperWeekly

新浪微博:@PaperWeekly

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【struts2】Struts2的运行流程

1&#xff09;前提条件 在讲解流程之前&#xff0c;假设我们已经建立了的一个名为strutsDeepen的web工程&#xff0c;该工程仅仅实现了简单的用户登陆与欢迎界面。具体的实现为&#xff1a; 在web.xml中配置了Struts2的过滤器写了一个Action类&#xff0c;名称为loginAction在s…

获取系统信息2——linux中使用随机数

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、随机数和伪随机数 随机数是随机出现&#xff0c;没有任何规律的一组数列。真正的完全随机的数列是不存在的&#xff0c;只是一种理想情况。我们一般只能通过一些算法得到一个伪随机数序列。平时…

11. 类对象简介

11. 类对象简介1.1 类是一个模板&#xff0c;是一种类型&#xff0c;“物以类聚”1.2 对象是类的一个具体实现1.3例如&#xff1a;汽车模型和生产出来的汽车猫和我家的那只猫1.4 实例人骑车public class Test3{public static void main(String[] args){Person p new Person();…

python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注

哎呦&#xff0c;又到了每周一次的制图教室啦。经过前面两次制图教程的分享&#xff0c;相信大家对于白模填色和写实渲染这两种表达方式肯定有了较好的掌握。那么今天我们就转战制图技巧篇&#xff0c;和童鞋们聊一下总平面图中的建筑名称标注问题。对于总平面图&#xff0c;各…

在MacOSX上重新安装Python (10.8) python 自然语言处理的前戏

因为想学python自然语言处理就想在mac上重新配置一下python。 在网上找了很久才找到两篇有用的教程http://765i.cn/%E5%9C%A8macosx%E4%B8%8A%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85python-10-8/ http://woodpecker.org.cn/diveintopython3/installing-python.html 第一篇文章基…

获取系统信息3——proc文件系统介绍和使用

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、proc文件系统介绍 1、操作系统级别的调试一般很困难 简单的程序可以单步调试&#xff1b;复杂一点的程序可以printf、cout等打印信息调试&#xff08;即输出信息到控制台&#xff09;&#xff0…

阻止函数源码在控制台输出

这是一个很贱的技能&#xff0c;我在谷歌控制台源码里看到的。相信大家都知道&#xff0c;在控制台里只输入函数名&#xff0c;不输入 () 然后按回车&#xff0c;就可以输出源码。 都不会陌生吧&#xff0c;这也有助于我们调试&#xff0c;是个很棒的技巧。不过系统内置的就会输…

值不值得入手_iPhone11现在还值不值得入手?真实用户说出心里话

iPhone11作为苹果走量的一款机型&#xff0c;自发布以来就备受争议&#xff0c;有的朋友说真香&#xff0c;A13iOS只卖4000多&#xff0c;还有的朋友吐槽大黑边、828P的屏幕、信号不好还有充电太慢&#xff0c;特别是现在同价位能买到的安卓旗舰&#xff0c;要5G有5G、要高刷新…

设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

以下内容转载于微信公众号&#xff1a;嵌入式企鹅圈。如有侵权&#xff0c;请告知删除。 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。 对于初学者来说会非常困惑&#xff0c;甚至对Linux有一定基础的工程师而言…

写文章最难写的是标题

最近做事情有点沉不下心来&#xff0c;不知道是不是在家一个月养成的坏毛病还没改过来还是怎么回事。但仔细想了想&#xff0c;其实这只是个借口。自从高中以来&#xff0c;我这个毛病好像就有了&#xff0c;大概是高二的时候一直到现在&#xff0c;老是不能全心全意的静下心来…

对于局部变量_对于SQL常用查询优化方法的整理

查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在where 及order by 涉及的列上建立索引:尝试下面的技巧以避免优化器错选了表扫描&#xff1a;使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。对扫描的表使用FORCE INDEX告知MySQL&#xff0c;相对于…

wampServer2.1错误(Could not execute menu item (internal error)

安装wampServer2.1后提示以下错误Could not execute menu item (internal error) [Exception] Could not perform service action 服务尚未启动错误原因&#xff1a;08端口被占用&#xff08;因为安装好wampServer后&#xff0c;默认的端口为80&#xff09;解决方法&#xff1a…

黄聪:如何使用CodeSmith批量生成代码(原创系列教程)

在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做一个简单的Demo,并不详细的讲解CodeSmith各个强大的功能,有兴趣的朋友可以打开CodeSmith的…

字符设备驱动基础2——用开发板来调试驱动的步骤

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 步骤1&#xff1a;获取编译后的内核源码与镜像 描述 该内核源码主要用来编译驱动源码。该内核源码必须与开发板运行的内核源码的版本一致&#xff0c;否则编译后的驱动程序在开发版上运行时&#xf…

c语音异或运算符_C语言中的按位异或运算符有什么用处?

原标题&#xff1a;C语言中的按位异或运算符有什么用处&#xff1f;想知道C语言中的按位异、运算符有什么用处&#xff0c;首先C语言中^为按位异或运算符&#xff0c;若两个二进制位相同&#xff0c;则结果为0&#xff0c;不同为1例&#xff1a;#include "stdio.h"ma…

Android 开发笔记 一

参考 : http://www.cnblogs.com/nightkidzxc/archive/2011/12/14/2379010.html 1.得到 SD 卡的目录 : String SDPATH Environment.getExternalStorageDriectory() "/"; 2.Activity 相当于 From Activity 以 Dialog形式显示在 Manifest中设置 : android:theme&qu…

超短的判断IE javascript代码

首先说明该代码只能在IE 6~8中有效&#xff0c;再高级的IE已经修复这个BUG <script type’text/javascript’> var ie !-[1,]; alert(ie); //如果是ie&#xff0c;弹出true </script> 原因&#xff1a; 首先[1,]是个数组&#xff0c;由于有个逗号&#xff…

mysql命令导出数据库_MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下&#xff0c;直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。MySQL命令行导出数据库1&#xff0c;进入MySQL目录下的bin文件夹&#xff1a;cd MySQL中到bin文件夹的目录如我输入的命令行&…

linux vmware 安装后无法桥接到物理网卡的解决办法

在linux下安装完vmware后&#xff0c;因为需要必须使用桥接网络&#xff0c;交接物理网卡总是显示could not connect /dev/vmnet0, 网上搜索了很多办法都无法解决&#xff0c;下面这个据说能解决&#xff0c;但还是不行&#xff0c;贴下来供大家参考&#xff1a;我安装了一下&a…

HDU2201

水&#xff5e; 分析&#xff1a;n&#xff0c;m。对于第一个人不抽到m号座位概率为&#xff08;n-1&#xff09;/n&#xff0c;第二个人为&#xff08;n-2&#xff09;/&#xff08;n-1&#xff09;.。。。第m个人为1/&#xff08;n-m1&#xff09;.。。。 相乘之后则为 1/n V…