用BRAT進行中文情感分析語料標註

2021-10-02 01:21:03 字數 3594 閱讀 4130

1.背景

情感分析是nlp中的一大分支,無論在學術界還是工業界都有廣泛的研究,在semeval語義分析會議中有單獨的情感分析任務分支,其中最難的乙個任務叫做absa:aspect-based sentiment analysis,面向方面的情感分析。舉例來說,就是對以下句子,

新版本英雄的**很不錯,但是遊戲經常出現掉線

要能識別出這樣的情感標註結果:《英雄,視覺性,正面》,《遊戲,穩定性,負面》

而其中,[英雄,遊戲]為實體(entity),[視覺性,穩定性]為方面(aspect),absa的任務就是識別句子中關於某些實體的某些方面的正負面情感。

從semeval 2015的結果來看,目前沒有任何技術能夠做到無監督解決這一任務,既然需要監督學習就少不了標註。如果借助現有的工具來提高標註效率在工程上具有重要意義。

2.brat簡介

brat是乙個基於web的文字標註工具,主要用於對文字的結構化標註,用brat生成的標註結果能夠把無結構化的原始文字結構化,供計算機處理。利用該工具可以方便的獲得各項nlp任務需要的標註語料。以下是利用該工具進行命名實體識別任務的標註例子:

第一步:安裝brat

brat的安裝非常簡單,只需要unix-like系統和web server支援cgi環境即可,具體安裝流程官網寫的很清楚,需要注意的是web server下各個路徑的許可權需要設定好,python需要支援sqlite

第二步:標註配置

brat通過配置檔案來決定對語料的標註可以滿足何種任務,包括四個檔案

一般只需要修改annotation.conf即可,該檔案用於對標註的資料結構進行配置,典型的配置如下:

[entities]

英雄技能

[relations]

同盟arg1:英雄, arg2:英雄

擁有arg1:英雄, arg2:技能

[events]

1v1participant1:英雄, 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的首頁,預設情況下會提示你選擇專案路徑,如

你可以根據你的專案路徑定位到需要標註的文字檔案,開啟後,預設載入之前的標註結果,此時你可以對文字進行標註(注意要先登入)

標註的方法很簡單直觀,首先選中需要標註的一段文字,然後會彈出對該段文字的標註型別:

這裡可以選擇實體型別、事件型別和屬性,

對於兩個標註後的部分,可以從一端拖動到另一端,實現關係的標註:

3.absa標註結構

以上就是使用brat進行標註的方法,對於absa問題,需要標註各個文字片段的《實體,方面,情感值》,特別的對與semeval 2015中的absa問題的slot2,還需要標註文字的觀點片段,而我們利用brat解決這一標註的方案是:

定義實體為《實體,方面》對

定義實體具有屬性《情感》,其值域是[正面,負面,中立]

因此annotation.conf裡的內容如下:

[entities]

角色,操作感

角色,視覺

[relations]

[events]

[attributes]

情感    arg:, value:正面|負面|中立

[labels]

[drawing]

span_default    fgcolor:black, bgcolor:lightgreen, 

bordercolor:darken

arc_default color:black, arrowhead:********-5

角色,操作感 bgcolor:#ffccaa

情感   

最終的標註效果如下:

由此便可以對各個片段進行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官網上並沒有關於情感任務的標註例項,故而有此文章幫助需要的人減少學習成本。

Mac OS 下用Tex Shop 進行中文排版

作為新手,在mac os下用texshop剛開始學latex排版時,總是無法顯示中文,很是無奈。折騰了一會,終於可以實現中文排版了。分享一下自己的一點經驗。首先配置texshop 使用ctex包 begin 你好 latex end documentclass usepackage 或者用xecjk...

用雙向最大匹配法進行中文分詞

中文分詞任務,採用的是sighan2004 backoff2005微軟資料 資料。給出訓練集和測試集,對測試集進行中文分詞,要求給出的分詞結果f score盡量大。以選出匹配的單詞盡可能長為目標分詞,具體操作是從乙個方向不斷嘗試匹配出最長單詞,再進行下一次匹配,直到匹配完成為止。同樣以選出匹配的單詞...

使用pymmseg進行中文分詞

python分詞模組,基於mmseg演算法編寫,核心 c 提供python介面。code example coding utf 8 from pymmseg import mmseg import os import sys def cws pymmseg shortdeslist,wordlist...