一文了解语义角色标注

2019 年 6 月 28 日 AINLP

作者乐雨泉,公众号:AI小白入门(id: StudyForAI),欢迎关注,点击文末"阅读原文"可直达原文链接,也欢迎大家投稿,AI、NLP相关即可。






本文记录自然语言基础技术之语义角色标注学习过程,包括定义、常见方法、例子、以及相关评测,最后推荐python实战利器,并且包括工具的用法。



定义


先来看看语义角色标注在维基百科上的定义:Semantic role labeling, sometimes also called shallow semantic parsing, is a process in natural language processing that assigns labels to words or phrases in a sentence that indicate their semantic role in the sentence, such as that of an agent, goal, or result. It consists of the detection of the semantic arguments associated with the predicate or verb of a sentence and their classification into their specific roles.


语义角色标注(Semantic Role Labeling,简称 SRL)是一种浅层的语义分析。给定一个句子, SRL 的任务是找出句子中谓词的相应语义角色成分,包括核心语义角色(如施事者、受事者等) 和附属语义角色(如地点、时间、方式、原因等)。根据谓词类别的不同,又可以将现有的 SRL 分为动词性谓词 SRL 和名词性谓词 SRL。



常见方法


语义角色标注的研究热点包括基于成分句法树的语义角色标注和基于依存句法树的语义角色标注。同时,根据谓词的词性不同,又可进一步分为动词性谓词和名词性谓词语义角色标注。尽管各任务之间存在着差异性,但标注框架类似。


目前 SRL 的实现通常都是基于句法分析结果,即对于某个给定的句子,首先得到其句法分析结果,然后基于该句法分析结果,再实现 SRL。这使得 SRL 的性能严重依赖于句法分析的结果。



例子


以基于成分句法树的语义角色标注为例,任务的解决思路是以句法树的成分为单元,判断其是否担当给定谓词的语义角色:


角色剪枝:通过制定一些启发式规则,过滤掉那些不可能担当角色的成分。

角色识别:在角色剪枝的基础上,构建一个二元分类器,即识别其是或不是给定谓词的语义角色。

角色分类:对那些是语义角色的成分,进一步采用一个多元分类器,判断其角色类别。



相关评测


CoNLL会议2008、 2009 年对依存分析和语义角色标注联合任务进行评测。

  • CoNLL 2008:https://www.clips.uantwerpen.be/conll2008/

  • CoNLL 2009:http://ufal.mff.cuni.cz/conll2009-st/task-description.html



工具推荐


Nlpnet

一个基于神经网络的自然语言处理任务的Python库。 目前提供词性标注,语义角色标记和依存分析功能。该系统的灵感来自SENNA。

Github地址:https://github.com/erickrf/nlpnet

预训练模型地址:http://nilc.icmc.usp.br/nlpnet/models.html#


# 安装:pip install nlpnet
# 国内源安装:pip install nlpnet -i https://pypi.tuna.tsinghua.edu.cn/simple
# 1.nlpnet是一个基于神经网络的自然语言处理任务的Python库。 目前,它支持词性标注、依存分析以及语义角色标记。
# 2.首先要下载预训练模型:http://nilc.icmc.usp.br/nlpnet/models.html#srl-portuguese 目前语义角色标注只提供了葡萄牙语的预训练模型
import nlpnet
tagger = nlpnet.SRLTagger('nlpnet-model\srl-pt', language='pt')
sents = tagger.tag(u'O rato roeu a roupa do rei de Roma.')[0]
print(sents.arg_structures)

[('roeu',
 {'A0': ['O''rato'],
  'A1': ['a''roupa''do''rei''de''Roma'],
  'V': ['roeu']})]


Pyltp

语言技术平台(LTP) 是由哈工大社会计算与信息检索研究中心历时11年的持续研发而形成的一个自然语言处理工具库,其提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术。

Github地址https://https://github.com/HIT-SCIR/pyltp


# pyltp安装有点麻烦-.-,这里记录window 10下的安装方法
# 1.首先,pip install pyltp安装报错:error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe' failed with exit status 2
# 安装cmake,下载地址,https://cmake.org/download/ 
# 安装VS2008 EXPRESS,下载网址:https://visualstudio.microsoft.com/zh-hans/vs/express/
# 2.然后,我选择使用python setup.py install安装
# 下载pyltp,地址:https://github.com/hit-scir/pyltp
# 下载ltp,地址:https://github.com/hit-scir/ltp  
# 解压ltp,然后将解压之后文件命名为ltp,覆盖pyltp文件夹中的ltp
# 打开cmd,进入到pyltp目录下,找到setup.py
# 先执行命令:python setup.py build  
# 然后执行命令:python setup.py install

# 使用里面的预训练模型,需要先下载,然后指定相应目录
# 下载地址:http://ltp.ai/download.html
# 要先进行分词,词性标注,依存分析
sentence = "我爱自然语言处理技术!"
from pyltp import Segmentor
seg = Segmentor() #生成对象
seg.load("pyltp-model\ltp_data_v3.4.0\cws.model"#加载分词预训练模型
seg_words = seg.segment(sentence)
print(" ".join(seg_words))
seg.release() #释放资源
我 爱 自然 语言 处理 技术 !
from pyltp import Postagger  
pos=Postagger()
#加载词性预训练模型
pos.load("pyltp-model\ltp_data_v3.4.0\pos.model")
words_pos=pos.postag(seg_words)
for k,v in zip(seg_words, words_pos):
   print(k+'\t'+v)
pos.release()

我   r
爱   v
自然  n
语言  n
处理  v
技术  n
!   wp

from pyltp import Parser
parser=Parser()
parser.load("pyltp-model\ltp_data_v3.4.0\parser.model")
arcs=parser.parse(seg_words,words_pos)
print([(arc.head,arc.relation) for arc in arcs])
parser.release()
[(2'SBV'), (0'HED'), (4'ATT'), (5'FOB'), (2'VOB'), (5'VOB'), (2'WP')]
from pyltp import SementicRoleLabeller
labeller = SementicRoleLabeller()
labeller.load("pyltp-model\ltp_data_v3.4.0\pisrl_win.model")
roles = labeller.label(seg_words,words_pos,arcs)
for role in roles:
   print(role.index, "".join(
       ["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments]))
labeller.release()

1 A0:(0,0)A1:(2,5)
4 A1:(5,5)


代码已上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/SRL.ipynb


参考:

1.统计自然语言处理

2.中文信息处理报告-2016



作者乐雨泉,京东研发工程师,研究方向机器学习与自然语言处理,曾在IJCAI、TASLP等会议/期刊发表文章多篇。本文系作者学习过程中的整理总结,欢迎志同道合的朋友关注作者公众号"AI小白入门",一起交流学习,探讨成长

长按二维码关注~
AI小白入门

ID: StudyForAI

学习AI学习ai(爱)

期待与您的相遇

登录查看更多
1

相关内容

【论文推荐】文本摘要简述
专知会员服务
68+阅读 · 2020年7月20日
实体关系抽取方法研究综述
专知会员服务
176+阅读 · 2020年7月19日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
专知会员服务
155+阅读 · 2020年4月21日
专知会员服务
103+阅读 · 2020年3月12日
[综述]基于深度学习的开放领域对话系统研究综述
专知会员服务
78+阅读 · 2019年10月12日
什么是语义角色标注?
人工智能头条
18+阅读 · 2019年4月28日
一文读懂依存句法分析
AINLP
16+阅读 · 2019年4月28日
一文了解成分句法分析
人工智能头条
15+阅读 · 2019年4月24日
一起来看看词性标注
AINLP
8+阅读 · 2019年4月9日
综述 | 事件抽取及推理 (上)
开放知识图谱
87+阅读 · 2019年1月9日
Arxiv
4+阅读 · 2019年9月5日
UPSNet: A Unified Panoptic Segmentation Network
Arxiv
4+阅读 · 2019年1月12日
3D-LaneNet: end-to-end 3D multiple lane detection
Arxiv
7+阅读 · 2018年11月26日
Arxiv
3+阅读 · 2018年5月11日
Arxiv
5+阅读 · 2018年5月10日
VIP会员
相关VIP内容
【论文推荐】文本摘要简述
专知会员服务
68+阅读 · 2020年7月20日
实体关系抽取方法研究综述
专知会员服务
176+阅读 · 2020年7月19日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
专知会员服务
155+阅读 · 2020年4月21日
专知会员服务
103+阅读 · 2020年3月12日
[综述]基于深度学习的开放领域对话系统研究综述
专知会员服务
78+阅读 · 2019年10月12日
相关资讯
什么是语义角色标注?
人工智能头条
18+阅读 · 2019年4月28日
一文读懂依存句法分析
AINLP
16+阅读 · 2019年4月28日
一文了解成分句法分析
人工智能头条
15+阅读 · 2019年4月24日
一起来看看词性标注
AINLP
8+阅读 · 2019年4月9日
综述 | 事件抽取及推理 (上)
开放知识图谱
87+阅读 · 2019年1月9日
Top
微信扫码咨询专知VIP会员