本文系作者投稿,作者公众号:AI小白入门(id: StudyForAI),欢迎关注,点击文末"阅读原文"可直达原文链接,也欢迎大家投稿,AI、NLP相关即可。
本文简要介绍了自然语言处理中极其重要的句法分析,并侧重对依存句法分析进行了重点总结,包括定义、重要概念、基本方法、性能评价、依存分析数据集,最后,分享了一些流行的工具以及工具实战例子。
句法分析
句法分析(syntactic parsing)是自然语言处理中的关键技术之一,它是对输入的文本句子进行分析以得到句子的句法结构的处理过程。对句法结构进行分析,一方面是语言理解的自身需求,句法分析是语言理解的重要一环,另一方面也为其它自然语言处理任务提供支持。例如句法驱动的统计机器翻译需要对源语言或目标语言(或者同时两种语言)进行句法分析。
语义分析通常以句法分析的输出结果作为输入以便获得更多的指示信息。根据句法结构的表示形式不同,最常见的句法分析任务可以分为以下三种:
句法结构分析(syntactic structure parsing),又称短语结构分析(phrase structure parsing),也叫成分句法分析(constituent syntactic parsing)。作用是识别出句子中的短语结构以及短语之间的层次句法关系。
依存关系分析,又称依存句法分析(dependency syntactic parsing),简称依存分析,作用是识别句子中词汇与词汇之间的相互依存关系。
深层文法句法分析,即利用深层文法,例如词汇化树邻接文法(Lexicalized Tree Adjoining Grammar,LTAG)、词汇功能文法(Lexical Functional Grammar,LFG)、组合范畴文法(Combinatory Categorial Grammar,CCG)等,对句子进行深层的句法以及语义分析。
依存句法定义
维基百科是这样描述的:The dependency-based parse trees of dependency grammars see all nodes as terminal, which means they do not acknowledge the distinction between terminal and non-terminal categories. They are simpler on average than constituency-based parse trees because they contain fewer nodes.
依存句法是由法国语言学家L.Tesniere最先提出。它将句子分析成一颗依存句法树,描述出各个词语之间的依存关系。也即指出了词语之间在句法上的搭配关系,这种搭配关系是和语义相关联的。
在自然语言处理中,用词与词之间的依存关系来描述语言结构的框架称为依存语法(dependence grammar),又称从属关系语法。利用依存句法进行句法分析是自然语言理解的重要技术之一。
重要概念
依存句法认为“谓语”中的动词是一个句子的中心,其他成分与动词直接或间接地产生联系。
依存句法理论中,“依存”指词与词之间支配与被支配的关系,这种关系不是对等的,这种关系具有方向。确切的说,处于支配地位的成分称之为支配者(governor,regent,head),而处于被支配地位的成分称之为从属者(modifier,subordinate,dependency)。
依存语法本身没有规定要对依存关系进行分类,但为了丰富依存结构传达的句法信息,在实际应用中,一般会给依存树的边加上不同的标记。
依存语法存在一个共同的基本假设:句法结构本质上包含词和词之间的依存(修饰)关系。一个依存关系连接两个词,分别是核心词(head)和依存词(dependent)。依存关系可以细分为不同的类型,表示两个词之间的具体句法关系。
常见方法
基于规则的方法: 早期的基于依存语法的句法分析方法主要包括类似CYK的动态规划算法、基于约束满足的方法和确定性分析策略等。
基于统计的方法:统计自然语言处理领域也涌现出了一大批优秀的研究工作,包括生成式依存分析方法、判别式依存分析方法和确定性依存分析方法,这几类方法是数据驱动的统计依存分析中最为代表性的方法。
基于深度学习的方法:近年来,深度学习在句法分析课题上逐渐成为研究热点,主要研究工作集中在特征表示方面。传统方法的特征表示主要采用人工定义原子特征和特征组合,而深度学习则把原子特征(词、词性、类别标签)进行向量化,在利用多层神经元网络提取特征。
依存分析器的性能评价
通常使用的指标包括:无标记依存正确率(unlabeled attachment score,UAS)、带标记依存正确率(labeled attachment score, LAS)、依存正确率(dependency accuracy,DA)、根正确率(root accuracy,RA)、完全匹配率(complete match,CM)等。这些指标的具体意思如下:
无标记依存正确率(UAS):测试集中找到其正确支配词的词(包括没有标注支配词的根结点)所占总词数的百分比。
带标记依存正确率(LAS):测试集中找到其正确支配词的词,并且依存关系类型也标注正确的词(包括没有标注支配词的根结点)占总词数的百分比。
依存正确率(DA):测试集中找到正确支配词非根结点词占所有非根结点词总数的百分比。
根正确率(RA):有二种定义,一种是测试集中正确根结点的个数与句子个数的百分比。另一种是指测试集中找到正确根结点的句子数所占句子总数的百分比。
完全匹配率(CM):测试集中无标记依存结构完全正确的句子占句子总数的百分比。
数据集
Penn Treebank:Penn Treebank是一个项目的名称,项目目的是对语料进行标注,标注内容包括词性标注以及句法分析。
SemEval-2016 Task 9中文语义依存图数据:http://ir.hit.edu.cn/2461.html
下载地址:https://github.com/HIT-SCIR/SemEval-2016
CoNLL经常开放句法分析的学术评测,比如:
2018年的通用句法分析评测任务:
http://universaldependencies.org/conll18/
2009年多语言多语言的句法依存和语义角色联合评测任务:
http://ufal.mff.cuni.cz/conll2009-st/
2008年英语的依存句法-语义角色联合评测任务:
https://www.clips.uantwerpen.be/conll2008/
2007年多语言依存分析评测:
https://www.clips.uantwerpen.be/conll2007/
工具推荐
StanfordCoreNLP
斯坦福大学开发的,提供依存句法分析功能。
Github地址:https://github.com/Lynten/stanford-corenlp
官网:https://stanfordnlp.github.io/CoreNLP/
# 安装:pip install stanfordcorenlp
# 国内源安装:pip install stanfordcorenlp -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用stanfordcorenlp进行依存句法分析
# 先下载模型,下载地址:https://nlp.stanford.edu/software/corenlp-backup-download.html
from stanfordcorenlp import StanfordCoreNLP
# 对中文进行依存句法分析
zh_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='zh')
s_zh = '我爱自然语言处理技术!'
dep_zh = zh_model.dependency_parse(s_zh)
print(dep_zh)
[('ROOT', 0, 4), ('nsubj', 4, 1), ('advmod', 4, 2), ('nsubj', 4, 3), ('dobj', 4, 5), ('punct', 4, 6)]
# 对英文进行依存句法分析
eng_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27')
s_eng = 'I love natural language processing technology!'
dep_eng = eng_model.dependency_parse(s_eng)
print(dep_eng)
[('ROOT', 0, 2), ('nsubj', 2, 1), ('amod', 6, 3), ('compound', 6, 4), ('compound', 6, 5), ('dobj', 2, 6), ('punct', 2, 7)]
HanLP
HanLP是一系列模型与算法组成的NLP工具包。提供了中文依存句法分析功能。
Github地址:https://github.com/hankcs/pyhanlp
官网:http://hanlp.linrunsoft.com/
# 安装:pip install pyhanlp
# 国内源安装:pip install pyhanlp -i https://pypi.tuna.tsinghua.edu.cn/simple
from pyhanlp import *
s_zh = '我爱自然语言处理技术!'
dep_zh = HanLP.parseDependency(s_zh)
print(dep_zh)
1 我 我 r r _ 2 主谓关系 _ _
2 爱 爱 v v _ 0 核心关系 _ _
3 自然语言处理 自然语言处理 v v _ 4 定中关系 _ _
4 技术 技术 n n _ 2 动宾关系 _ _
5 !!wp w _ 2 标点符号 _ _
SpaCy
工业级的自然语言处理工具,遗憾的是目前不支持中文。
Gihub地址:https://github.com/explosion/spaCy
官网:https://spacy.io/
FudanNLP
复旦大学自然语言处理实验室开发的中文自然语言处理工具包,包含信息检索:文本分类、新闻聚类;中文处理:中文分词、词性标注、实体名识别、关键词抽取、依存句法分析、时间短语识别;结构化学习:在线学习、层次分类、聚类。
Github地址:https://github.com/FudanNLP/fnlp
代码已上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/Dependency.ipynb
参考:
1.统计自然语言处理
2.中文信息处理报告-2016
长按二维码关注~
AI小白入门
ID: StudyForAI
学习AI学习ai(爱)
期待与您的相遇