情感分析是NLP中的一大分支,无论在学术界还是工业界都有广泛的研究,在SemEval语义分析会议中有单独的情感分析任务分支,其中最难的一个任务叫做ABSA:Aspect-Based Sentiment Analysis,面向方面的情感分析。举例来说,就是对以下句子,
新版本英雄的皮肤很不错,但是游戏经常出现掉线
要能识别出这样的情感标注结果:<英雄,视觉性,正面>,<游戏,稳定性,负面>
而其中,[英雄,游戏]为实体(entity),[视觉性,稳定性]为方面(aspect),ABSA的任务就是识别句子中关于某些实体的某些方面的正负面情感。
从Semeval 2015的结果来看,目前没有任何技术能够做到无监督解决这一任务,既然需要监督学习就少不了标注。如果借助现有的工具来提高标注效率在工程上具有重要意义。
本文主要介绍如何利用BRAT进行针对ABSA问题的语料标注,后续如何利用这些标注构建模型来解决ABSA问题将在随后的文章中介绍。本系列的所有的工作都来自WeTest舆情团队的努力成果(http://wetest.qq.com/bee/)。
BRAT是一个基于web的文本标注工具,主要用于对文本的结构化标注,用BRAT生成的标注结果能够把无结构化的原始文本结构化,供计算机处理。利用该工具可以方便的获得各项NLP任务需要的标注语料。以下是利用该工具进行命名实体识别任务的标注例子:
第一步:安装BRAT
brat的安装非常简单,只需要unix-like系统和web server支持cgi环境即可,具体安装流程官网写的很清楚,http://brat.nlplab.org/installation.html,需要注意的是web server下各个路径的权限需要设置好,python需要支持sqlite
第二步:标注配置
brat通过配置文件来决定对语料的标注可以满足何种任务,包括四个文件
一般只需要修改annotation.conf即可,该文件用于对标注的数据结构进行配置,典型的配置如下:
[entities]
英雄
技能
[relations]
同盟 Arg1:英雄, Arg2:英雄
拥有 Arg1:英雄, Arg2:技能
[events]
1v1 Participant1:英雄, Participant2:英雄
[attributes]
攻击力 Arg:, Value:1|2|3|4|5
每个文件需要包含四类模块:entities、relations、events、attributes。各个模块都可以定义为空,其中
entities用来定义标注的实体名称,其格式为每行一个实体类型,比如:人名、地名、英雄名、技能名等
relations用来定义实体间的关系,格式为每行定义一种关系,第一列为关系类型,随后是用逗号分隔的ArgN:实体名,用来表示关系的各个相关者。比如例子中,同盟关系是存在于英雄之间
events用来定义事件,每行定义一类事件,第一列为事件名,随后是用逗号分隔的Participant:实体名,用来表示事件的各个参与者。比如例子中,1v1事件需要多个英雄参加
attributes用来定义属性,每行一个属性,第一列为属性名,随后是用逗号分隔的Arg:<模块类型>, Value:属性值,注意属性值可以有多个,比如例子中,定义了实体类型可以有攻击力,值从1-3
特别说明:brat本身是不支持中文的,如果在配置文件里定义中文会报错,解决办法是修改./server/src/projectconfig.py文件的第163行,加上中文支持即可:
n = re.sub(u'[^a-zA-Z\u4e00-\u9fa5<>,0-9_-]', '_', n)
第三步:导入数据
brat将需要标注的数据放在data目录下,每个子文件是一个项目,可以看到默认有examples和tutorials两个目录。里面放了各种教程和实例项目,你可以自己定义自己的项目,比如data/project/bee/,每个项目里需要至少包含一个txt文件和一个ann文件,其中ann是标注结果写入的文件,txt是标注数据文件,另外自定义的配置文件也要放在项目目录中,否则系统会采用默认的配置
第四步:标注数据
接下来就可以对语料进行标注了,在第一步安装完成以后就应该可以在webserver配置的地址访问到brat的首页,默认情况下会提示你选择项目路径,如
你可以根据你的项目路径定位到需要标注的文本文件,打开后,默认加载之前的标注结果,此时你可以对文本进行标注(注意要先登录)
标注的方法很简单直观,首先选中需要标注的一段文本,然后会弹出对该段文本的标注类型:
这里可以选择实体类型、事件类型和属性,
对于两个标注后的部分,可以从一端拖动到另一端,实现关系的标注:
以上就是使用BRAT进行标注的方法,对于ABSA问题,需要标注各个文本片段的<实体,方面,情感值>,特别的对与semeval 2015中的ABSA问题的slot2,还需要标注文本的观点片段,而我们利用BRAT解决这一标注的方案是:
定义实体为<实体,方面>对
定义实体具有属性<情感>,其值域是[正面,负面,中立]
因此annotation.conf里的内容如下:
[entities]
角色,操作感
角色,视觉
[relations]
[events]
[attributes]
情感 Arg:, Value:正面|负面|中立
为了便于可视,我还特别定义的视觉配置visual.conf(这一部分规则不在此详述,感兴趣请参考官网说明):
[labels]
[drawing]
SPAN_DEFAULT fgColor:black, bgColor:lightgreen, borderColor:darken
ARC_DEFAULT color:black, arrowHead:triangle-5
角色,操作感 bgColor:#ffccaa
情感
最终的标注效果如下:
由此便可以对各个片段进行ABSA任务的标注,最终生成的标注结果格式如下:
T2 角色,操作感 23 32 艾瑞克,手感很不错
A2 情感 T2 正面
T3 角色,操作感 36 44 操作一般的用沃尔
A3 情感 T3 中立
T4 角色,操作感 44 54 操作不错的可以用隆多
A4 情感 T4 中立
T5 角色,操作感 59 66 SG的精髓是准
A5 情感 T5 负面
T1 角色,视觉 1091 1102 猛龙时期的啊,发型够吊
A1 情感 T1 正面
以上是对标注工具BRAT进行ABSA问题的标注全过程,目前brat官网上并没有关于情感任务的标注实例,故而有此文章帮助需要的人减少学习成本。本文和后续的ABSA研究工作主要用于WeTest舆情系统的风向标功能以及后续新增功能,详情请见http://wetest.qq.com/bee/?action=DataOverview&tag=overview
著于2015/11/11