在探索人类语言与技术的交互过程中,自然语言处理(NLP)扮演着至关重要的角色。为了将NLP应用于现实世界的场景,需要对各种术语和概念有深入的理解。依存句法分析和句法分析是NLP中用于语言分析的两种方法。依存句法分析专注于揭示句子中单词之间的语法关系,展示单词如何相互依赖。它构建了一个树状结构来说明这些依赖关系,帮助理解句子结构。句法分析的范围更广,旨在揭示句子的整体句法结构,包括短语边界、成分和语法规则。这两种技术在提取文本数据中的含义和洞察方面发挥着关键作用,对各种语言处理任务都有益。
本文将探讨依存句法分析的原理,以便更好地理解其在自然语言处理中的应用。依存句法分析(DP)是指检查句子中短语之间的依赖关系以确定其语法结构的过程。句子主要基于此被划分为多个部分。该过程基于这样一个假设:句子中的每个语言单位之间都存在直接关系。这些超链接被称为依赖关系。
考虑以下陈述:“更喜欢通过丹佛的早班飞机。”下面的图表解释了句子的依赖结构:在书面依赖结构中,句子中每个语言单位或短语之间的关系通过有向弧表示。树的根“prefer”是前一个句子的顶部,如插图中标记的那样。依赖标签指示两个短语之间的关系。例如,单词“flight”改变了名词“Denver”的含义。因此,可以识别一个依赖关系从flight -> Denver,其中flight是顶部,Denver是孩子或依赖。它由nmod表示,代表名词修饰语。
这区分了两个短语之间的依赖关系,其中一个作为顶部,另一个作为依赖。目前,Common Dependency V2分类法包括37种常见的句法关系,如下表所示:
Dependency Tag Description
acl 名词的从句修饰语(名词性从句)
acl:relcl 相对从句修饰语
advcl 状语从句修饰语
advmod 状语修饰语
advmod:emph 强调短语,加强语
advmod:lmod 位置状语修饰语
amod 形容词修饰语
appos 同位语修饰语
aux 助动词
aux:move 被动语态助动词
case 标记案例
cc 并列连词
cc:preconj 先行连词
ccomp 从句补语
clf 分类词
compound 复合词
compound:lvc 温和动词构建
compound:prt 短语动词粒子
compound:redup 重复复合词
compound:svc 连词复合词
conj 连词
cop 连词
csubj 从句主题
csubj:move 从句被动主题
dep 未指定的依赖关系
det 限定词
det:numgov 名词数量限定词,支配名词的案例
det:nummod 名词数量限定词,与名词的案例一致
det:poss 所有格限定词
discourse 话语成分
dislocated 移位部分
expl 代用词
expl:impers 非人称代用词
expl:move 用于反身被动的反身代词
expl:pv 与固有反身动词一起使用的反身小品词
mounted 多词表达
flat 多词表达
flat:overseas 海外短语
flat:title 名称
goeswith 与之相关
iobj 斜向宾语
checklist 清单
mark 标记
nmod 名词修饰语
nmod:poss 所有格名词修饰语
nmod:tmod 时间修饰语
nsubj 名词主题
nsubj:move 被动名词主题
nummod 数值修饰语
nummod:gov 支配名词案例的数值修饰语
obj 宾语
obl 间接名词
obl:agent 代理修饰语
obl:arg 间接论元
obl:lmod 位置修饰语
obl:tmod 时间修饰语
orphan 孤儿
parataxis 并列
punct 标点符号
reparandum 被覆盖的不流畅性
root 根
vocative 呼语
xcomp 开放从句补语
使用NLTK进行依存句法分析。自然语言工具包(NLTK)是一个用于人类语言的统计自然语言处理的库和代码集合。可以使用NLTK以多种方式进行依存句法分析:
1. 概率性、投影性依存句法分析器:这些分析器通过使用从手工解析的句子中获得的人类语言数据来预测新句子。它们被称为会犯错误,并且使用有限的训练信息集合工作。
2. Stanford分析器:它是一个基于Java的自然语言分析器。需要Stanford CoreNLP分析器来执行依存句法分析。分析器支持多种语言,包括英语、中文、德语和阿拉伯语。
使用分析器的方法:
from nltk.parse.stanford import StanfordDependencyParser
path_jar = ‘path_to/stanford-parser-full-2014-08-27/stanford-parser.jar’
path_models_jar = ‘path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar’
dep_parser = StanfordDependencyParser(
path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse(‘I shot an elephant in my sleep’)
dependency = result.next()
print(dependency.triples())
上述程序的输出如下:
[
((u’shot’, u’VBD’), u’nsubj’, (u’I’, u’PRP’)),
((u’shot’, u’VBD’), u’dobj’, (u’elephant’, u’NN’)),
((u’elephant’, u’NN’), u’det’, (u’an’, u’DT’)),
((u’shot’, u’VBD’), u’prep’, (u’in’, u’IN’)),
((u’in’, u’IN’), u’pobj’, (u’sleep’, u’NN’)),
((u’sleep’, u’NN’), u’poss’, (u’my’, u’PRP$’))
]
依存句法分析与成分句法分析。成分句法分析基于上下文无关文法。成分上下文无关文法用于解析文本。在这里,解析树包括被分解成子短语的句子,每个子短语都属于不同的语法类别。终端节点是具有父节点和词性标记的语言单位或短语。例如,“一只猫”和“床下的一个盒子”是名词短语,而“写一封信”和“开一辆车”是动词短语。
考虑以下例句:“在睡衣里射杀了一头大象。”成分解析树如下所示:左侧的解析树表示携带睡衣的大象,而右侧的解析树表示在他的睡衣里捕捉大象。整个句子被分解成子短语,直到剩下终端短语。VP代表动词短语,而NP代表名词短语。
依存句法分析与成分句法分析的区别。Stanford分析器也用于进行成分句法分析。它首先使用成分句法分析器解析短语,然后将成分解析树转换为依存树。如果主要目标是将句子分解成子短语,那么使用成分句法分析是理想的。然而,依存句法分析是发现句子中短语之间依赖关系的最好方法。
让看一个例子来了解它们的区别:成分解析树表示将文本划分为子短语。树的非终端是不同类型的短语,终端是句子的单词,边缘是未标记的。简单句子“约翰看到了比尔”的成分解析如下:依存解析将单词连接在一起,基于它们的连接。树中的每个顶点对应一个单词,子节点对应依赖于父节点的单词,边缘对应关系。“约翰看到了比尔”的依存解析如下:
应该选择与目标最接近的解析器类型。如果想在句子中找到子短语,肯定对成分解析感兴趣。如果对单词之间的连接感兴趣,可能会对依存解析感兴趣。
结论。随着计算机技术的发展,组织正在寻找新的方法来利用它超越其人为限制。计算速度和能力的显著提高导致了新的、高度智能的软件系统的开发,其中一些准备取代或增强人类服务。最好的例子之一是自然语言处理(NLP)的发展,智能聊天机器人准备改变客户服务乃至更广泛的世界。