0. 引言
本篇博客简单概述一下句法分析,感觉这个任务是一个很有趣的任务,并且可以当做很多上游任务的一个预处理工作,提取句法结构作为输入向量的一部分。在实际工程或者包括打比赛中都有可能起到意想不到的作用。
1. 概述
依存文法由语言学家L.Tesniere在其著作《结构句法基础》(1959年)中提出,对语言学的发展产生了深远的影响,特别是在计算语言学界备受推崇。依存句法分通过分析语言单位内成分之间的依存关系揭示其句法结构。
在依存关系中两个单词之间的关系是主从关系,什么叫做主从关系呢,就是说一个单词附属与另一个单词。
• 主从关系
• 从属词-支配词
举个例子,像里面的 “篇” 是一个从属词, “文章”是一个支配词。具体之间的关系有很多种情况。
大家可以仔细看一下,上面的这两个例子很有意思。第一个句子比第二个句子多了一个“的”,意思就完全不一样了。第一个句子是指“文章”无知,第二个句子是指“你”无知。我们想一下,如果我们用句向量的话,那他们的句子相似度很高(去掉停用词简直一摸一样),这样就完全处理错误了。实际上这两个意思千差万别。深度学习遇到这种局限性的时候就是需要用句法分析这种下层任务来辅助。
为什么句法分析是很常见的呢。因为下面三个原因:
• 依存关系的普遍性,在任何语言都是适用的。
• 获取长距离的搭配信息,现在CNN\RNN进行编码,句子中远距离源码不容易获得搭配信息。句法分析天然的具有这种优势。
• 不需要去明白词汇本身的意义,只需要根据关系形成关系树就可以,知道我们句子大概是一个什么样的语法结构就可。
依存句法分析的两大要点:
• 句子中的核心动词是支配其他成分的中心成分。例如上述句子中ROOT节点是“无知”,它不受任何其它成分支配。
• 其它成分间也存在支配关系。
依存句法分析的五大规律:
- 一个句子中只有一个成分是独立的
- 句子的其他成分都从属于某一成分 任何一个成分都不能依存于两个及以上的成分
- 如果成分A直接从属成分B,而成分C在句子中位于A和B之间,那么,成分C或者从属于A,或者从属于B,或者从属于A和B之间的某一成分
- 核心成分左右两边的其他成分相互不发生关系(针对中文)
针对最后一条规律,我们可以将一个复杂的句子根据中心词的位置分为前后两部分,各表达两种意思。另外中心词还可以作为一种主题词或者关键词作为先验。
2. 关系类型
接下来我们将将关系类型,可以想一下关系类型在不同的任务中可以如何使用。
核心关系:指整个句子的核心 (提取关键词)
右附加关系:学生们
左附加关系:孩子与鲜花
介宾关系:在教室里 (抽取场景的实体识别)
并列关系:孩子与鲜花
动补结构:学好了高数
状中结构:十分开心
定中关系:小孩子
兼语:他把我感动了(兼语式:以邻为壑、令人生畏、请君入瓮、化险为夷)
前置宾语:孩子们什么都觉得好玩(宾语放在前面)
间宾关系:我送给孩子们一些玩具(送给 和 玩具)
动宾关系:我送给孩子们一些玩具(送给 和 孩子)
主谓关系:我送给孩子们一些玩具(我 和 送给)
3. 如何应用于具体任务
可作为文本特征,区分如下的两个句子:
老黄是谁的儿子?
老黄的儿子是谁?
对于如下的句子,可以抽取被告人和原告人,这种都是深度学习不好做的:
黄某用一把铲子砍伤了谢某。
还可以用来进行词向量的训练,大家可以想一下word2vec训练时都要定一个窗口(大小为3)来进行词训练,这样单词之间的训练和关系提取会受到词之间距离的影响,我们可以用句法分析拿到单词之间的关系。
此外,我们还可以用于问答系统,深度学习模型复杂,准备工作多并且效果不一定理想,句法分析可能会带来一些收益,如下图所示:
当出现如下问句的时候:
Whom did Alice see?
我们看一下上面的句法分析结构图,就可知ROOT是saw,左边是Alice, 右边的链接是Bob,那么根据句法分析可知答案应该是Alice。
还有我们一直说的提取关键词,可以选取和中心词相关的单词。
聚类,例如可以把兼词的词语聚类在一起。
语言模型,可以通过句法结构方面判断一个句子是否合理。
自注意力,词语间的关系可以作为分配注意力的依据。
关系抽取,可以直接抽取实体间的关系。
词汇间的知识图谱,天然的三元组形式,可直接转换为知识图谱的形式。
4. 基于深度学习的依存句法分析:Syntax-net
Transition-based Approach,要生成如下的动作解析表达句法分析
模型架构框图如下所示,本质上是一个分类问题(是否有关系,对应哪种关系):
5. 应用工具进行依存分析
from pyhanlp import *
sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。”
res = HanLP.parseDependency(sentence)
print(res)
输出结果如下:
此外HanNLP还有一个在线演示的接口:
另外语法和句法不一样,语法包含(词法、句法、构词法)等很多东西。