NLP 中的依赖解析【举例说明】
已发表: 2021-03-10自然语言处理是一个跨学科概念,它利用计算语言学和人工智能的基础知识来理解人类语言如何与技术交互。
NLP 需要深入理解各种术语和概念,才能将它们切实地应用于现实世界的场景。 其中一些基本概念包括词性 (POS) 标记、统计语言建模、句法、语义和情感分析、规范化、标记化、依赖解析和选区解析等。
在本文中,我们将研究 Dependency Parsing 的基础知识,以了解它是如何在 NLP 中实现的。
目录
依赖解析
依存分析(DP)是指检查一个句子的单词之间的依存关系来分析它的语法结构。 在此基础上,一个句子被分成几个部分。 该机制基于句子的每个语言单元之间存在直接联系的概念。 这些链接称为依赖关系。
让我们以“我更喜欢早上飞往丹佛的航班”为例。
下图解释了句子的依赖结构:
资源
句子的每个语言单元或单词之间的关系,使用类型化依存结构中的有向弧来表示。 如图所示,“prefer”树的根构成了上述句子的头部。
任何两个单词之间的关系都由依赖标签标记。 例如,“飞行”一词修饰了名词“丹佛”的意思。 因此,您可以注意到航班 -> 丹佛的依赖关系,其中航班是头部,丹佛是孩子或被抚养人。 它由表示名义修饰符的nmod表示。
这形成了每两个单词之间的依赖关系,其中一个充当头部,另一个充当依赖。 目前, Universal Dependency V2分类法由 37 个通用句法关系组成,如下表所示:
依赖标签 | 描述 |
acl | 名词的从句修饰语(名词性从句) |
acl:relcl | 相对从句修饰语 |
进阶 | 状语从句修饰语 |
进阶模式 | 状语 |
进阶模式:emph | 强调词,加强词 |
进阶模式:lmod | 处所状语修饰语 |
amod | 形容词修饰语 |
应用程序 | 并列修饰语 |
辅助 | 辅助的 |
辅助:通过 | 被动辅助 |
案子 | 案例标记 |
抄送 | 并列连词 |
抄送:preconj | 前置连词 |
ccomp | 从句补语 |
clf | 分类器 |
化合物 | 化合物 |
化合物:lvc | 轻动词结构 |
复合:prt | 短语动词助词 |
复合:redup | 重复的化合物 |
复合:svc | 连续动词复合词 |
组合 | 合取 |
警察 | 系词 |
主题 | 分句主语 |
csubj:通过 | 分句被动主语 |
部门 | 未指定的依赖 |
检测 | 决定者 |
确定:numgov | 支配名词格的代词量词 |
det:nummod | 与名词格一致的代词量词 |
确定:可能 | 所有格限定词 |
话语 | 语篇成分 |
脱臼 | 错位元素 |
解释 | 脏话 |
解释:帝国 | 非人称咒骂 |
解释:通过 | 反身代词用于反身被动 |
解释:光伏 | 带有固有反身动词的反身附着体 |
固定的 | 固定多词表达 |
平坦的 | 平面多词表达 |
平:国外 | 外来词 |
平面:名称 | 名字 |
搭配 | 搭配 |
对象 | 间接宾语 |
列表 | 列表 |
标记 | 标记 |
模组 | 名义修饰语 |
nmod:可能 | 所有格名义修饰语 |
nmod:tmod | 时间修饰语 |
关注 | 名义主语 |
主题:通过 | 被动名词性主语 |
数模 | 数字修饰符 |
数字:政府 | 控制名词大小写的数字修饰语 |
对象 | 目的 |
对象 | 斜名义 |
对象:代理 | 代理改性剂 |
对象:参数 | 间接论证 |
对象:lmod | 方位修饰语 |
对象:tmod | 时间修饰语 |
孤儿 | 孤儿 |
并列性 | 并列性 |
点点 | 标点 |
赔偿 | 压倒性的不流利 |
根 | 根 |
呼 | 呼 |
xcomp | 开放从句补语 |
使用 NLTK 进行依赖解析
依赖解析可以使用自然语言工具包 (NLTK) 包来执行,该包是人类语言的统计自然语言处理 (NLP) 中使用的库和代码的集合。
我们可以通过以下方法之一使用 NLTK 来实现依赖解析:
- 概率、投影依赖解析器:这些解析器使用从手工解析的句子中收集的人类语言知识来预测新句子。 众所周知,他们会犯错误并使用一组有限的训练数据。
- 斯坦福解析器:这是一个在 Java 上实现的自然语言解析器。 您需要Stanford CoreNLP 解析器来执行依赖解析。 解析器包括多种语言,包括英语、中文、德语和阿拉伯语。
以下是如何使用解析器:
从 nltk.parse.stanford 导入 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('我在睡梦中射杀了一头大象')
依赖 = result.next()
列表(依赖。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$'))
]
选区解析
选区解析基于上下文无关语法。 这里,分析树包括分成子短语的句子,每个子短语属于一个语法类别。 句子中的每个语言单元或单词都充当终端节点,该节点具有其父节点和词性标记。
例如,短语“a cat”和“a box under the bed”是名词短语,而“write a letter”和“drive a car”是动词短语。
让我们考虑一个例句“我穿着睡衣射杀了一头大象”。 这是选区分析树的图形表示:
资源
左边的解析树表示拍摄穿着睡衣的大象,右边的解析树表示拍摄对象穿着睡衣拍摄大象。
整个句子被分成几个子阶段,直到我们剩下终结词。 VP 表示动词短语,NP 表示名词短语。
依赖解析与选区解析
选区解析也可以使用斯坦福解析器来实现。 它本质上根据选区解析器解析给定的句子,然后将选区解析树转换为依赖树。
如果您的目标是将句子分成子短语,则应实施选区解析。 但是,如果你想探索一个句子中单词之间的依赖关系,你应该使用依赖解析。
结帐: NLP 项目的想法和主题
结论
如果您觉得这篇文章有帮助,您应该查看 upGrad 为期 6 个月的机器学习和 NLP PG 认证,该认证提供来自 Flipkart、Gramener 和 Zee5 行业专家的个性化指导。
该计划专为希望在数据科学和机器学习领域立足的工程师、软件/IT、数据和其他专业人士而设计。 这份来自 IIIT BBangalorethe 的研究生认证拥有 58% 的平均加薪,这就是您在顶级公司中担任数据分析师、数据科学家、ML 工程师和 NLP 工程师高级职位所需要的一切。 今天只需 Rs 就可以坐下。 每月 3,034 个!
NLP 中的依赖解析有什么用?
在自然语言处理中,依赖解析是一种用于识别句子中单词之间语义关系的技术。 依赖解析器用于将句子中的单词映射到语义角色,从而识别单词之间的句法关系。 依赖解析是一种在表面结构级别对自然语言文本进行句法分析的众所周知的方法。 在该方法中,通过分析单词之间的句法依赖关系并识别每个单词的句法类别,从单词标记的线性序列中恢复句子的句法结构。
依赖解析的应用有哪些?
以下是使用依赖解析的几个应用领域的列表。 依赖解析的主要用途之一是语义角色标记 (SRL) 和信息提取,它们是自然语言处理的组成部分。 依赖解析也用于 NLP 任务之外的句法分块和选区解析。 依赖解析与短语结构解析有着根本的不同,后者将句子中的单词映射到相应的短语标记或树结构。
句法解析和依赖解析之间的基本区别是什么?
语法解析器和依赖解析器的区别在于,依赖解析器构建解析树,而语法解析器构建语法树。 句法解析涉及使用预定义的规则来定义句法和依赖解析器,另一方面,它可以理解各种短语,也可以处理模棱两可的输入。 依赖解析器可用于短语识别、分块、依赖分析、分块和解析。