SemEval語義分析ABSA任務及BRAT

2021-08-22 02:26:54 字數 3615 閱讀 9143

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

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

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

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

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

本文主要介紹如何利用brat進行針對absa問題的語料標註,後續如何利用這些標註構建模型來解決absa問題將在隨後的文章中介紹。本系列的所有的工作都來自wetest輿情團隊的努力成果(

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]

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:正面|負面|中立

[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 66 sg的精髓是準

a5 情感 t5 負面

t1 角色,視覺 1091 1102 猛龍時期的啊,髮型夠吊

a1 情感 t1 正面

以上是對標註工具brat進行absa問題的標註全過程,目前brat官網上並沒有關於情感任務的標註例項,故而有此文章幫助需要的人減少學習成本。本文和後續的absa研究工作主要用於wetest輿情系統的風向標功能以及後續新增功能,詳情請見

語義分析 一

語義分析一般是和語法分析組合在一起執行的,語法分析完成前一步語法樹分析的構建 呼叫某個產生式完成一步規約,形成當前的樹節點 然後語義分析便接著呼叫相應產生式配備的語義動作或子程式,完成屬性文法所要求的語義動作 比如型別轉換或生成中間 所以對於屬性文法而言,屬性的加工和使用過程便是語義處理的意義。乙個...

編譯語義分析實驗

單詞的種別編碼方案 單詞符號 種別編碼 單詞符號 種別編碼 單詞符號 種別編碼 begin 1 13 23 if 2 14 24 then 3 15 25 while 4 16 26 do 5 17 29 l l d 10 0dd 11 21 演算法思想 1 設定語義過程。1 emit char r...

潛在語義分析LSA

lsa和傳統向量空間模型 vector space model 一樣使用向量來表示詞 terms 和文件 documents 並通過向量間的關係 如夾角 來判斷詞及文件間的關係 不同的是,lsa 將詞和文件對映到潛在語義空間,從而去除了原始向量空間中的一些 噪音 提高了資訊檢索的精確度。1 一詞多義...