NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...

本文介绍了自然语言处理中的四种语义分析方法:依存句法分析识别句子的主谓宾关系;语义角色标注找出谓词的语义角色成分;语义依存分析关注词语间的语义关联;抽象语义表示(AMR)将句子解析为语义概念图。文章通过实例展示了LTP和HanLP的开源实现,并探讨了AMR在语义表示上的优势。
摘要由CSDN通过智能技术生成

每天给你送来NLP技术干货!


作者:刘焕勇

来自:老刘说NLP

在上一篇文章《事件Schema生成必读:一种基于AMR与聚类、映射的事件模式生成框架浅析》中,我们讲到了AMR以及依存句法分析在分析触发词与论元之间的关系时所发挥的作用。

当前,语义分析正在从浅层分析到深层分析转变,与此对应的语义分析技术也逐步发生变化,从最开始到句子成分分析,到依存句法分析,到语义角色标注再到依存语义分析,再到抽象语义表示,整个过程也是十分有趣。

本文主要就这几种语义分析方式进行介绍,从基本概念、常用标记以及开源实现三个角度进行介绍,供大家一起思考。 本文充分借鉴了LTP以及Hanlp的一些介绍和相关结果图片,对这两个机构的开源精神表示感谢。

一、依存句法分析Dependency Parsing

依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭示其句法结构,通过分析,可以看到词语之间的依存关系,如SBV主语关系,VOB动宾关系,ATT修饰关系,利用该关系可以进行搭配抽取、短语组块识别,事件抽取等任务。

abd3aa0b8fe80e3357c614a4062aad4d.png

图-LTP依存分析结果

9b8fe2a5fd5f0a44b32c29e510586413.png

图-hanlP依存分析结果

直观来讲,依存句法分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系。

1、常用标记1a0a8f55acd4658a7c9a3338768c4017.png

2、开源实现

from ltp import LTP

ltp = LTP()

seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
dep = ltp.dep(hidden)
 [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
 [
     [
         (1, 2, 'SBV'),
         (2, 0, 'HED'),    # 叫 --|HED|--> ROOT
         (3, 2, 'DBL'),
         (4, 2, 'VOB'),
         (5, 4, 'COO'),
         (6, 5, 'VOB'),
         (7, 2, 'WP')
     ]
 ]

二、语义角色标注 Semantic Role Labeling

语义角色标注(Semantic Role Labeling,简称 SRL)是一种浅层的语义分析,在给定一个句子, SRL 的任务是找出句子中谓词的相应语义角色成分,包括核心语义角色(如施事者、受事者等)和附属语义角色(如地点、时间、方式、原因等)。

071c829c89e49772e6d255226e2b66c5.png

图-LTP语义角色分析结果

1、常用标记

315a400f46ee4081c7be030312d7526d.png

2、具体例子

from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
srl = ltp.srl(hidden)
 [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
 [
     [
         [],      # 他
         [('ARG0', 0, 0), ('ARG1', 2, 2), ('ARG2', 3, 5)], # 叫 -> [ARG0: 他, ARG1: 汤姆, ARG2: 去拿外衣]
         [],      # 汤姆
         [],      # 去
         [('ARG0', 2, 2), ('ARG1', 5, 5)],# 拿 -> [ARG0: 汤姆, ARG1: 外衣]
         [],   # 外衣
         []    # 。
     ]
 ]
srl = ltp.srl(hidden, keep_empty=False)
 [
     [
         (1, [('ARG0', 0, 0), ('ARG1', 2, 2), ('ARG2', 3, 5)]), # 叫 -> [ARG0: 他, ARG1: 汤姆, ARG2: 去拿外衣]
         (4, [('ARG0', 2, 2), ('ARG1', 5, 5)])                  # 拿 -> [ARG0: 汤姆, ARG1: 外衣]

三、语义依存分析Semantic Dependency Parsing

语义依存分析 (Semantic Dependency Parsing, SDP),旨在分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。与依存句法的SBV等依存标记不同,其更深入的标记出了词语所担任的角色信息。

使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。

b56e45adfa7d7efb0d44921ee7faf2fe.png

图-LTP语义依存分析结果

6d92e99fd169a328b2dc5b9e23bb6a7c.png

图-hanlP语义依存分析结果

语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。

1、常用标记955ff9d81096382610155dbdfb850a24.png0320c4afd4d9d81a93f5dc8f75a4e694.png

2、开源实现

from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, mode='tree')
 [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
 [
     [
         (1, 2, 'Agt'),
         (2, 0, 'Root'),   # 叫 --|Root|--> ROOT
         (3, 2, 'Datv'),
         (4, 2, 'eEfft'),
         (5, 4, 'eEfft'),
         (6, 5, 'Pat'),
         (7, 2, 'mPunc')
     ]
 ]

四、抽象语义表示Abstract Meaning representation

抽象语义表示(abstract meaning representation,AMR)是句子语义的一种表示方法,将一个句子的语义抽象为一个单根有向无环图。

AMR解析旨在将句子解析为对应的AMR图,句子中的实词抽象为概念节点,实词之间的关系抽象为带有语义关系标签的有向弧,同时忽略虚词和形态变化体现的较虚的语义(如the、单复数、时、体等等)

8fe2e4fe37738bdeccf1822e905e39b9.png

图-hanlP语义依存分析结果

文章《中文抽象意义表示简介》(https://www.hankcs.com/nlp/corpus/introduction-to-chinese-abstract-meaning-representation.html) 中对AMR的优势这么说:

与依存句法树相比,抽象意义表示图中的节点不再是单词而是概念,并且跳出了树的限制;

与语义依存图相比,抽象意义表示图不但跳出了单词的限制,而且还可以自由引入句子表面不存在的概念

与单词颗粒度的句法语义表示形式相比,抽象意义表示既可以将多个单词抽象为一个概念(命名实体),也可以引入句子表面原本不存在的概念(比如省略成分、维基链接等)

与语义角色标注相比,抽象意义表示保留了谓词和论元的概念,但不再依赖短语结构树,并且能够刻画多个谓词之间的层级关系,而语义角色标注只能提供扁平的结构。

1、常用标记

在概念上,AMR一般将句中的实词都抽象为概念,如名词、动词、形容词、副词,而且一般会使用词语本身作为标签来表示这些概念,因此AMR中大部分的概念都是由句中的词语充当的,为方便理解和说明,有时可以直接用词语来指代概念。

在关系上,语义关系分为两种,核心语义角色关系和非核心语义角色关系。用形如 “Argx(x∈[0,4])”的标签来表示核心语义角色关系,用形如“cost(花费)”等的语义标 签来表示非核心的语义角色关系。

核心语义关系,沿用 OntoNotes 的体系,共5个,即:ARG0(原型施事)、ARG1(原 型受事)、ARG2(间接宾语、工具等)、ARG3(出发点、受益者等)、ARG4(终点);

非核心语义关系表示除核心语义之外的关系类型ffcb7f5b102a3c1f3fdd2bdc349662aa.png

更详细的标记,可以参考:《中文抽象语义表示标注规范V1.2》,地址:https://www.cs.brandeis.edu/~clp/camr/res/CAMR_GL_v1.2.pdf。

2、开源实现

import hanlp
hanlp.pretrained.amr.ALL # 语种见名称最后一个字段或相应语料库

amr = hanlp.load('MRP2020_AMR_ENG_ZHO_XLM_BASE')
graph = amr(["男孩", "希望", "女孩", "相信", "他", "。"])
print(graph)
(x2 / 希望-01
    :arg1 (x4 / 相信-01
              :arg0 (x3 / 女孩)
              :arg1 x1)
    :arg0 (x1 / 男孩))
381a381ab4cd5f03646e3bac0b8eead2.png
amr(["男孩", "希望", "女孩", "相信", "他", "。"], output_amr=False)
Out[6]:
{'id': '0',
 'input': '男孩 希望 女孩 相信 他 。',
 'nodes': [{'id': 0,
   'label': '男孩',
   'anchors': [{'from': 0, 'to': 2}, {'from': 12, 'to': 13}]},
  {'id': 1, 'label': '希望-01', 'anchors': [{'from': 3, 'to': 5}]},
  {'id': 2, 'label': '女孩', 'anchors': [{'from': 6, 'to': 8}]},
  {'id': 3, 'label': '相信-01', 'anchors': [{'from': 9, 'to': 11}]}],
 'edges': [{'source': 1, 'target': 3, 'label': 'arg1'},
  {'source': 1, 'target': 0, 'label': 'arg0'},
  {'source': 3, 'target': 2, 'label': 'arg0'},
  {'source': 3, 'target': 0, 'label': 'arg1'}],
 'tops': [1],
 'framework': 'amr'}

总结

本文主要本文从基本概念、常用标记以及开源实现三个角度对依存句法分析Dependency Parsing、语义角色标注 Semantic Role Labeling、语义依存分析Semantic Dependency Parsing以及抽象语义表示Abstract Meaning representation几个句法/语义分析方法进行了介绍。

当前,AMR最为火热,当然批评的声音也不少,大家可以多加实践,并具体的任务和业务相结合,解决更多落地问题。

参考文献

1、https://wap.sciencenet.cn/blog-39714-1069586.html
2、https://amr.isi.edu/download.html
3、https://hanlp.hankcs.com/
4、https://github.com/hankcs/HanLP/tree/doc-zh
5、https://blog.51cto.com/u_11142243/2418415
6、http://ltp.ai

最近文章

EMNLP 2022 和 COLING 2022,投哪个会议比较好?

一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA

阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果

ACL'22 | 快手+中科院提出一种数据增强方法:Text Smoothing,非常简单且有效尤其在数据不足的情况下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值