专栏首页大鹅专栏:大数据到机器学习句法依存分析背景 基本概念 及常用方法
原创

句法依存分析背景 基本概念 及常用方法

0. 句法分析与依存分析背景

句法是指句子的各个组成部分的相互关系。

句法分析分为

  • 句法结构分析(syntactic structure parsing)

    句法结构分析又称短语结构分析(phrase structure parsing),也叫成分句法分析(constituent syntactic parsing),用于获取整个句子的句法结构;

  • 依存关系分析(dependency parsing)

依存分析用于获取词汇之间的依存关系。

  • 深层文法句法分析

深层文法句法分析,即利用深层文法,例如词汇化树邻接文法(Lexicalized Tree Adjoining Grammar, LTAG)、词汇功能文法(Lexical Functional Grammar, LFG)、组合范畴文法(Combinatory Categorial Grammar, CCG)等,对句子进行深层的句法以及语义分析。

目前的句法分析已经从句法结构分析转向依存句法分析

依存语法通过分析语言单位内成分之间的依存关系揭示其句法结构,主张句子中核心动词是支配其它成分的中心成分,而它本身却不受其它任何成分的支配,所有受支配成分都以某种依存关系从属于支配者。

在20世纪70年代,Robinson提出依存语法中关于依存关系的四条公理:

  • 一个句子中只有一个成分是独立的;
  • 其它成分直接依存于某一成分;
  • 任何一个成分都不能依存与两个或两个以上的成分;
  • 如果A成分直接依存于B成分,而C成分在句中位于A和B之间,那么C或者直接依存于B,或者直接依存于A和B之间的某一成分;

1. 依存分析

依存关系是一个中心词与其从属之间的二元非对称关系,一个句子的中心词通常是动词(Verb),所有其他词要么依赖于中心词,要么通过依赖路径与它关联。

一些重要概念:

  • 依存句法认为“谓语”中的动词是一个句子的中心,其他成分与动词直接或间接地产生联系。
  • 依存句法理论中,“依存”指词与词之间支配与被支配的关系,这种关系不是对等的,这种关系具有方向。确切的说,处于支配地位的成分称之为支配者(governor,regent,head),而处于被支配地位的成分称之为从属者(modifier,subordinate,dependency)。
  • 依存语法本身没有规定要对依存关系进行分类,但为了丰富依存结构传达的句法信息,在实际应用中,一般会给依存树的边加上不同的标记。
  • 依存语法存在一个共同的基本假设:句法结构本质上包含词和词之间的依存(修饰)关系。一个依存关系连接两个词,分别是核心词(head)和依存词(dependent)。依存关系可以细分为不同的类型,表示两个词之间的具体句法关系。

依存结构是加标签的有向图,箭头从中心词指向从属,具体来说,箭头是从head指向child,从该解析树可以看出,每个Token只有一个Head。

如上图所示,和成分句法分析相比,依存句法分析更加直接的分析出句子的主语谓语等成分。另外一点,依存句法分析的结果里,词的关系更加直接。比如上面的例子中动词prefer的直接宾语是flight,在依存句法分析树中,直接有prefer到flight的边,而在成分句法分析中这种关系是不直接的(但是也是有的)。

关系标签

标签表示从属的语法功能,名词性的标签是:

  • root:中心词,通常是动词
  • nsubj:名词性主语(nominal subject)
  • dobj:直接宾语(direct object)
  • prep:介词
  • pobj:介词宾语
  • cc:连词

其他常用的标签:

  • compound:复合词
  • advmod:状语
  • det:限定词
  • amod:形容词修饰语

2. 常用方法与评价指标

  • 基于规则的方法: 早期的基于依存语法的句法分析方法主要包括类似CYK的动态规划算法、基于约束满足的方法和确定性分析策略等。
  • 基于统计的方法:统计自然语言处理领域也涌现出了一大批优秀的研究工作,包括生成式依存分析方法、判别式依存分析方法和确定性依存分析方法,这几类方法是数据驱动的统计依存分析中最为代表性的方法。
  • 基于深度学习的方法:近年来,深度学习在句法分析课题上逐渐成为研究热点,主要研究工作集中在特征表示方面。传统方法的特征表示主要采用人工定义原子特征和特征组合,而深度学习则把原子特征(词、词性、类别标签)进行向量化,在利用多层神经元网络提取特征。

依存分析器的性能评价:

  • 无标记依存正确率(UAS):测试集中找到其正确支配词的词(包括没有标注支配词的根结点)所占总词数的百分比。
  • 带标记依存正确率(LAS):测试集中找到其正确支配词的词,并且依存关系类型也标注正确的词(包括没有标注支配词的根结点)占总词数的百分比。
  • 依存正确率(DA):测试集中找到正确支配词非根结点词占所有非根结点词总数的百分比。
  • 根正确率(RA):有二种定义,一种是测试集中正确根结点的个数与句子个数的百分比。另一种是指测试集中找到正确根结点的句子数所占句子总数的百分比。
  • 完全匹配率(CM):测试集中无标记依存结构完全正确的句子占句子总数的百分比。

3. 传统方法:arc-standard算法

arc-standard配置(configuration)定义为c=(s, b, A)。

其中s是一个栈,b是一个buffer(队列),A是已经parse得到的边(依存关系,包括label)。初始配置的s=[ROOT], b=[w1,…,wn]b=[w1,…,wn],A=ΦA=Φ。一个配置是终止(terminal)配置的条件是:buffer为空并且s里只有ROOT。sisi从栈顶往下的第i个元素,因此s1s1是栈顶的元素。bibi是buffer的第i个元素。arc-standard算法定义了3种操作:

  • LEFT-ARC(l) 往A里添加边s1→s2s1→s2,边的label是l,然后把s2s2从栈中删除。这个操作要求|s|≥2|s|≥2
  • RIGHT-ARC(l) 往A里添加边s2→s1s2→s1,边的label是l,然后把s1s1从栈中删除。这个操作要求|s|≥2|s|≥2
  • SHIFT 把b1b1移到s的顶部。这个操作要求|b|≥1|b|≥1

对于带label的版本,总共有|T|=2Nl+1|T|=2Nl+1个不同的操作,这里NlNl是不同label的数量。下图是一个例子,左上是正确的依存关系;右上是parse过程中的一个配置。下边是一个正确的操作序列和配置的变化。

对于贪心的parser来说,输入是一个配置,输出是|T||T|中的一个。这是一个分类问题,输入的配置里有很多有用的信息,传统的机器学习会手工提取很多特征,就像我们在前面的例子里介绍的那样,它们的缺点我们也介绍过来,那么接下来就是怎么用神经网络来改进这个分类器了。

4. 基于神经网络方法

对于一个配置,我们首先抽取一些相关的词、词性和已经parse的关系的label。词的集合是Sw,词性的集合是St,label的集合是Sl。并且假设这些集合的大小分别是nw,nt,nl。假设Sw=[w1,…,wnw],我们对这nw个词都进行Embedding,这样得到xw=[eww1,eww2,…,ewwnw],类似的,我们可以得到xt和xl,然后我们把xw,wt,wl接入全连接网络,并且使用3次方的激活函数得到:

h=(W_1^wx^w+W_1^tx^t+W_1^lx^l+b_1)^3

然后再加一个全连接层,激活是softmax,得到分类的概率:

p = softmax(W_2 h)

通常我们会对词进行Embedding,但是作者认为对词性和label进行Embedding也是有必要的,比如词性,NN和NNS会有相似的性质。SwSw有18个词,分别是栈顶和buffer头部的3个词:s1,s2,s3,b1,b2,b3;s1和s2最左的2个孩子,最右的2个孩子;s1和s2最左孩子的最左孩子(这是孩子的孩子!),最右孩子的最右孩子。6+8+4=18。

为了方便,我们用记号lc1(s1)表示栈顶(s1)元素的最左的孩子,而lc2(s1)示栈顶(s1)元素的第二左的孩子。类似的用rc1,rc2表示最右和第二右的孩子。因此最左孩子的最左孩子可以这样表示lc1(lc1(s1))。

St有18个词性,是和SwSw对应的。而Sl有12=8+4个,因为s1,s2,s3,b1,b2,b3并没有label。我们抽取的label是来自与边(孩子),比如s1和它最左的2个孩子会对应两条边。因此label总共可以抽取8+4=12个。

5. Ref

  1. https://zhuanlan.zhihu.com/p/51186364
  2. https://geek.digiasset.org/pages/nlp/nlpinfo/nlp-dependency-parsing/
  3. http://fancyerii.github.io/books/depparser/ 基本概念
  4. http://fancyerii.github.io/books/nndepparser/ 深度学习依存分析
  5. https://cloud.tencent.com/developer/article/1646939 BERT依存分析

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

关注作者,阅读全部精彩内容
登录 后参与评论
0 条评论

相关文章

  • 快速上手小程序云开发

    云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写,一键上传部署即可运行后端的代码。

    达达前端
  • SFFAI 分享 | 王克欣 : 详解记忆增强神经网络

    1. 报告主题简介 1.介绍 1.1 背景1:为什么需要MANNs 1.2 背景2:模型应用场景 1.3 背景3:预备知识介绍--自动机理论与MANNs 1.4...

    马上科普尚尚
  • 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注

    西西嘛呦
  • Nature子刊:先天盲人视觉概念的神经表征

    请点击上面“思影科技”四个字,选择关注作者,思影科技专注于脑影像数据处理,涵盖(fMRI,结构像,DTI,ASL,EEG/ERP,FNIRS,眼动)等,希望专业...

    用户1279583
  • ClickHouse原理解析与应用实践

    yeedomliu
  • 干货 | 行业智能客服构建探索

    戴祥鹰,就职于携程数据智能部。此前先后供职于腾讯、百度,主要从事搜索、推荐、知识图谱、自动问答等相关工作。硕士毕业于哈尔滨工业大学。本文为作者加入携程前所做项目...

    携程技术
  • 「知识图谱」领域近期值得读的 6 篇顶会论文

    论文 | Hike: A Hybrid Human-Machine Method for Entity Alignmentin Large-Scale Know...

    华章科技
  • 2021年数据中台行业十大关键词

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • “软件定义安防摄像机”是伪概念吗?

    雷锋网《AI掘金志》频道:只做 AI +「安防、医疗、零售」三大传统领域的深度采访报道。

    AI掘金志
  • 【测试】软件测试知识点-期中复习1

    1.2简述软件测试V模型的流程 需求分析——概要设计——详细设计——编码——单元测试——集成测试——系统测试——验收测试

    瑞新
  • 大数据的由来

    大数据概念的的兴起也就是最近不到10年的时间,我们在了解了数据的几个基本概念之后,我们再来看一下大数据出现的背景。数据量大。什么是数据?狭义上讲数据就是数值,也...

    用户1483438
  • 基于知识图谱的问答在美团智能交互场景中的应用和演进

    导读:目前为止 IT 产业经历了六次浪潮,分别为:大型机时代,小型机时代,个人电脑时代,桌面互联网时代,移动互联网时代和 AIOT 时代。在这些时代背后可以发现...

    Java帮帮
  • 给R语言初学者的几个建议~

    最近有很多人在问我关于R语言学习入门的问题。 有在公众号文章留言的,有后台回复的,有加qq或者微信直接交流的、有知乎私信或者文章留言的,还有微信群里直接@我的。...

    数据小磨坊
  • 探究Presto SQL引擎(2)-浅析Join

    在《探究Presto SQL引擎(1)-巧用Antlr》中,我们介绍了Antlr的基本用法以及如何使用Antlr4实现解析SQL查询CSV数据,更加深入理解Pr...

    2020labs小助手
  • 初探知识图谱

    实体:“能够独立存在的,作为一切属性的基础和万物本原的东西”。实体是属性赖以存在的基础,必须是自在的,也就是独立的、不依附于其他东西而存在的。

    Bo_hemian
  • 资源 | 从语言建模到隐马尔可夫模型:一文详述计算语言学

    机器之心整理 参与:路雪、蒋思源 计算语言学(computational linguistics)是一门跨学科的研究领域,它试图找出自然语言的规律,建立运算模型...

    机器之心
  • 苏州大学张民教授两小时讲座精华摘录:自然语言处理方法与应用

    2018 中国人工智能大会(CCAI 2018)于 7 月 28 日-29 日于深圳召开。「过去未去,未来已来」,李德毅院士在 CCAI 2018 开幕式上对人...

    AI科技评论
  • 2019精炼的大数据技术学习路线

    近年来大数据BigData、人工智能AI、物联网Iot等行业发展迅猛,很多人都想要从事大数据技术开发工作,但是,请问要怎么做,路线是什么?从哪里开始学?学哪些?...

    用户2292346
  • 【测试】软件测试知识点

    1.1 常见的软件测试模型有哪几种 1.2 简述软件测试V模型的流程 1.3 软件测试V模型的优点、缺点。 1.4 H模型诞生的背景 1.5 H模型示意...

    瑞新

扫码关注云+社区

领取腾讯云代金券