你爱我吗?如何利用BRAT进行中文情感分析语料标注掌握玩家心声

转载 2015年11月19日 14:30:06

原文链接:http://wetest.qq.com/lab/view/?id=31 

1.背景

情感分析是NLP中的一大分支,无论在学术界还是工业界都有广泛的研究,在SemEval语义分析会议中有单独的情感分析任务分支,其中最难的一个任务叫做ABSA:Aspect-Based Sentiment Analysis,面向方面的情感分析。举例来说,就是对以下句子,

新版本英雄的皮肤很不错,但是游戏经常出现掉线

要能识别出这样的情感标注结果:<英雄,视觉性,正面>,<游戏,稳定性,负面>

而其中,[英雄,游戏]为实体(entity),[视觉性,稳定性]为方面(aspect),ABSA的任务就是识别句子中关于某些实体的某些方面的正负面情感。

Semeval 2015的结果来看,目前没有任何技术能够做到无监督解决这一任务,既然需要监督学习就少不了标注。如果借助现有的工具来提高标注效率在工程上具有重要意义。

本文主要介绍如何利用BRAT进行针对ABSA问题的语料标注,后续如何利用这些标注构建模型来解决ABSA问题将在随后的文章中介绍。本系列的所有的工作都来自WeTest舆情团队的努力成果(http://wetest.qq.com/bee/)。

2.BRAT简介

BRAT是一个基于web的文本标注工具,主要用于对文本的结构化标注,用BRAT生成的标注结果能够把无结构化的原始文本结构化,供计算机处理。利用该工具可以方便的获得各项NLP任务需要的标注语料。以下是利用该工具进行命名实体识别任务的标注例子:

http://km.oa.com/files/post_photo/467/260467/a517de0d31b54a93b893eb2aac1cda281447217193.jpg

第一步:安装BRAT

brat的安装非常简单,只需要unix-like系统和web server支持cgi环境即可,具体安装流程官网写的很清楚,http://brat.nlplab.org/installation.html,需要注意的是web server下各个路径的权限需要设置好,python需要支持sqlite

第二步:标注配置

brat通过配置文件来决定对语料的标注可以满足何种任务,包括四个文件

  •           annotation.conf: annotation type configuration
  •           visual.conf: annotation display configuration
  •           tools.conf: annotation tool configuration
  •           kb_shortcuts.conf: keyboard shortcut tool configuration

一般只需要修改annotation.conf即可,该文件用于对标注的数据结构进行配置,典型的配置如下:

[entities]

英雄

技能

 

[relations]

同盟Arg1:英雄, Arg2:英雄

拥有Arg1:英雄, Arg2:技能

 

[events]

1v1Participant1:英雄, Participant2:英雄

 

[attributes]

攻击力Arg:<ENTITY>, 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行,加上中文支持即可:

 = re.sub(u'[^a-zA-Z\u4e00-\u9fa5<>,0-9_-]', '_', n)

第三步:导入数据

brat将需要标注的数据放在data目录下,每个子文件是一个项目,可以看到默认有examples和tutorials两个目录。里面放了各种教程和实例项目,你可以自己定义自己的项目,比如data/project/bee/,每个项目里需要至少包含一个txt文件和一个ann文件,其中ann是标注结果写入的文件,txt是标注数据文件,另外自定义的配置文件也要放在项目目录中,否则系统会采用默认的配置

第四步:标注数据

接下来就可以对语料进行标注了,在第一步安装完成以后就应该可以在webserver配置的地址访问到brat的首页,默认情况下会提示你选择项目路径,如

http://km.oa.com/files/photos/captures/201511/1447216206_64_w518_h516.jpg

你可以根据你的项目路径定位到需要标注的文本文件,打开后,默认加载之前的标注结果,此时你可以对文本进行标注(注意要先登录)

标注的方法很简单直观,首先选中需要标注的一段文本,然后会弹出对该段文本的标注类型:

http://km.oa.com/files/photos/captures/201511/1447216489_73_w769_h642.jpg

这里可以选择实体类型、事件类型和属性,

对于两个标注后的部分,可以从一端拖动到另一端,实现关系的标注:

http://km.oa.com/files/photos/captures/201511/1447216576_7_w368_h166.jpg

3.ABSA标注结构

以上就是使用BRAT进行标注的方法,对于ABSA问题,需要标注各个文本片段的<实体,方面,情感值>,特别的对与semeval 2015中的ABSA问题的slot2,还需要标注文本的观点片段,而我们利用BRAT解决这一标注的方案是:

定义实体为<实体,方面>对

定义实体具有属性<情感>,其值域是[正面,负面,中立]

因此annotation.conf里的内容如下:

[entities]

角色,操作感

角色,视觉

 

[relations]

[events]

 

[attributes]

情感    Arg:<ENTITY>, Value:正面|负面|中立

 为了便于可视,我还特别定义的视觉配置visual.conf(这一部分规则不在此详述,感兴趣请参考官网说明):

[labels]

[drawing]

SPAN_DEFAULT    fgColor:blackbgColor:lightgreenborderColor:darken

ARC_DEFAULT color:black, arrowHead:triangle-5

角色,操作感 bgColor:#ffccaa

情感   

 最终的标注效果如下:

http://km.oa.com/files/photos/captures/201511/1447216953_72_w474_h190.jpg

由此便可以对各个片段进行ABSA任务的标注,最终生成的标注结果格式如下:

T2角色,操作感 23 32艾瑞克,手感很不错

A2情感 T2 正面

T3角色,操作感 36 44操作一般的用沃尔

A3情感 T3 中立

T4角色,操作感 44 54操作不错的可以用隆多

A4情感 T4 中立

T5角色,操作感 59 66SG的精髓是准

A5情感 T5 负面

T1角色,视觉 1091 1102龙时期的啊,发型够吊

A1情感 T1 正面

 以上是对标注工具BRAT进行ABSA问题的标注全过程,目前brat官网上并没有关于情感任务的标注实例,故而有此文章帮助需要的人减少学习成本。

本文和后续的ABSA研究工作主要用于WeTest舆情系统的风向标功能以及后续新增功能,详情请见

http://wetest.qq.com/bee/?action=DataOverview&tag=overview

相关文章推荐

NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...

~~因为不太会使用opencv、matlab工具,所以在找一些比较简单的工具。 . .一、NLP标注工具BRATBRAT是一个基于web的文本标注工具,主要用于对文本的结构化标注,用BRAT生成的...

情感分析系列之《利用BRAT进行中文情感分析语料标注》

情感分析是NLP中的一大分支,无论在学术界还是工业界都有广泛的研究,在SemEval语义分析会议中有单独的情感分析任务分支,其中最难的一个任务叫做ABSA:Aspect-Based Sentiment...

利用 Keras 下的 LSTM 进行情感分析

~~~~~~~我们用 Keras 提供的 LSTM 层构造和训练一个 many-to-one 的 RNN。 网络的输入是一句话,输出是一个情感值(积极或消极)。 所用数据是来自 Kaggle 的情感分...

利用社会关系进行微博情感分析(A10, WSDM2013)

Exploiting social relations for sentiment analysis in microblogging 利用社会关系进行微博情感分析(A10, WSDM2013)文章通...

python机器学习----利用sklearn进行情感分析

import jieba from collections import defaultdict import os from sklearn.feature_extraction.text impo...

基于SVM中文情感分析

  • 2014-07-10 17:12
  • 1.91MB
  • 下载

Moodlens:一个基于表情符号的中文微博情感分析系统(A3, SIGKDD2012)

Moodlens: an emoticon-based sentiment analysis system for chinese tweets Moodlens:一个基于表情符号的中文微博情感分析系...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)