NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...
每天给你送来NLP技术干货!
作者:刘焕勇
来自:老刘说NLP
在上一篇文章《事件Schema生成必读:一种基于AMR与聚类、映射的事件模式生成框架浅析》中,我们讲到了AMR以及依存句法分析在分析触发词与论元之间的关系时所发挥的作用。
当前,语义分析正在从浅层分析到深层分析转变,与此对应的语义分析技术也逐步发生变化,从最开始到句子成分分析,到依存句法分析,到语义角色标注再到依存语义分析,再到抽象语义表示,整个过程也是十分有趣。
本文主要就这几种语义分析方式进行介绍,从基本概念、常用标记以及开源实现三个角度进行介绍,供大家一起思考。 本文充分借鉴了LTP以及Hanlp的一些介绍和相关结果图片,对这两个机构的开源精神表示感谢。
一、依存句法分析Dependency Parsing
依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭示其句法结构,通过分析,可以看到词语之间的依存关系,如SBV主语关系,VOB动宾关系,ATT修饰关系,利用该关系可以进行搭配抽取、短语组块识别,事件抽取等任务。
图-LTP依存分析结果
图-hanlP依存分析结果
直观来讲,依存句法分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系。
1、常用标记
2、开源实现
from ltp import LTPltp = 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 的任务是找出句子中谓词的相应语义角色成分,包括核心语义角色(如施事者、受事者等)和附属语义角色(如地点、时间、方式、原因等)。
图-LTP语义角色分析结果
1、常用标记
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等依存标记不同,其更深入的标记出了词语所担任的角色信息。
使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。
图-LTP语义依存分析结果
图-hanlP语义依存分析结果
语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。
1、常用标记
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、单复数、时、体等等)。
图-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(终点);
非核心语义关系表示除核心语义之外的关系类型
更详细的标记,可以参考:《中文抽象语义表示标注规范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 / 男孩))
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,非常简单且有效尤其在数据不足的情况下
NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...相关推荐
- 利用好手头的资源解决海量语料资源收集以及利用哈工大的LTP云平台解决依存句法和语义依存分析
一.利用好手头的资源解决海量语料资源 基于语料做机器学习需要海量数据支撑,如何能不存一点数据获取海量数据呢?我们可以以互联网为强大的数据后盾,搜索引擎为我们提供了高效的数据获取来源,结构化的搜索结果展 ...
- 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论...
2019独角兽企业重金招聘Python工程师标准>>> 依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖 ...
- pyhanlp 两种依存句法分类器
依存句法分析器 在HanLP中一共有两种句法分析器 依存句法分析 基于神经网络的高性能依存句法分析器 MaxEnt依存句法分析 基于神经网络的高性能依存句法分析器 HanLP中的基于神经网络的高性能依 ...
- 这是 Google 工程师 Amit Singhal 发表在 Google 官方博客的一篇文章,讲述了 Google 搜索排名背后的一些技术,涉及到 Google 对网页,对语义,对用户意图的理解。
XEIM这是 Google 工程师 Amit Singhal 发表在 Google 官方博客的一篇文章,讲述了 Google 搜索排名背后的一些技术,涉及到 Google 对网页,对语义,对用户意图的 ...
- 黄智生教授:大数据时代的语义技术(公号回复“黄智生语义技术”下载彩标PDF论文)
黄智生教授:大数据时代的语义技术(公号回复"黄智生语义技术"下载彩标PDF论文) 原创: 黄智生 数据简化DataSimp 今天 数据简化DataSimp导读:介绍面向大数据环境的 ...
- 淘宝网站的架构技术演进
一.说在前面 本文以淘宝作为示例,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术.希望大家有收获 二.须知技术概念 分布式 系统中的多个模块在不同服务 ...
- 中文 NLP (10) -- 句法解析之 转换生成语法 和 依存句法
多年来 NLP 领域最广泛的两种句法分析理论分别为 转换生成语法和依存句法. 转换生成语法 短语结构文法:形式化定义为 G = (X,V,S,R) 这样一个四元组.X 是词汇集合,称为终结符.V 是标 ...
- AI开发者大会之语音语义技术实践与应用:2020年7月3日《NLP在教育行业的应用》、《AI防疫-语音语义技术在政务联络场景中的应用》、《智能客服机器人在售前导购场景中的应用实践》
AI开发者大会之语音语义技术实践与应用:2020年7月3日<NLP在教育行业的应用>.<AI防疫-语音语义技术在政务联络场景中的应用>.<智能客服机器人在售前导购场景中的 ...
- 基于依存句法与语义角色标注的事件抽取项目
EventTriplesExtraction 项目地址:https://github.com/liuhuanyong/EventTriplesExtraction EventTriplesExtrac ...
最新文章
- 几种常见自动化测试框架
- thinkphp 整合 swiftmailer 实现邮件发送
- J.U.C系列(六)ForkJoin的使用
- asp.net必须要放在form中吗_传闻:已经有人在0.33或0.34集成了Echarts(更新中)
- 四十五、和我一起看看,国外的Python考试到底是怎么样(上篇)
- php二维数组的取值与转换
- 艰难的原创——谈互联网创业
- ssh主机之间建立互信 --免密码
- python爬虫案例——python爬取百度新闻RSS数据
- gdb 调试_一文入门Linux下gdb调试(二)
- jQuery的实用特性扩展类库:jQuery++
- 怎么用c语言表示素数,用C语言编写判断一个数是否是素数的程序
- 利用费马小定理进行素性测试
- 智齿科技B+轮获投1.5亿,为智能云客服领域最大单笔融资
- 读《七周七语言》,感悟其魂
- [转载]耗散结构理论与生住坏灭--开放.平衡.涨落.突变.
- shader 法线UV扭曲(类似金箔纸效果)(SurfaceShader)
- 假期日历服务器无响应,PrimeNg日历日期无法正常工作(示例代码)
- html2canvas+高德地图 截图底图空白问题
- win10右键卡死/导航栏点击文件夹图标无法弹出资源管理器/右键cmd以管理员身份运行无反应
热门文章
- 分布式相关问题总结(精选)
- Tryhackme-Starters
- 一文读懂如何使用FPGA驱动PHY芯片
- 微信小程序授权获取手机号
- Macbook 开发之器,Mac OSX 应用软件,开发工具必备网站推荐
- POJ-2112 Optimal Milking 二分+网络流
- sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务
- [JSOI] 快递服务 [SHOI] 书柜的尺寸 优化dp
- 华南x79 主板说明书下载_主板说明书找不到 机箱连线照样秒安装
- 态℃ |一条毛巾在拼多多的新消费奇遇记