↓快轉到主要內容
  1. 論文發表/

A Dimensional Valence-Arousal-Irony Dataset for Chinese Sentence and Context

·3 分鐘· ·
論文發表 Paper Nlp Dataset Irony Valence-Arousal Annotation Bert
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

論文資訊
#

項目內容
發表ROCLING 2022(第 34 屆自然語言與語音處理研討會)
作者Sheng-Wei Huang, Wei-Yi Chung, Yu-Hsuan Wu, Chen-Chia Yu, Jheng-Long Wu
連結ACL Anthology · PDF
程式碼沒有公開 repo
期刊延伸版A Chinese Dimensional Valence-Arousal-Irony Detection on Sentence-level and Context-level(IJCLCLP 2022)

2022 年 1 月我以第一作者寫了這個題目的初稿(當時叫 VAI),之後的 ROCLING 版本與期刊版本由共同作者接續修改。標註用的是我在 2021 年做的 Irony Extension 標記網站。

這篇的重點是資料集本身:怎麼定義反諷、怎麼給分、標註品質如何,最後用 BERT 跑一組基準實驗,確認資料可以拿來訓練模型。期刊版則把模型實驗做得更完整。

研究動機
#

反諷的核心特徵是字面意思和實際意思相反。中文反諷最常見的寫法,是用正面的關鍵字包裝負面的事件,例如:

「好棒喔,下雨了又沒帶傘……」

語境「下雨了又沒帶傘」是負面的,關鍵字「好棒喔」是正面的,兩者的情緒落差就構成了反諷。所以要理解一句反諷,一定要把語境一起看。

但過去的資料集大多做不到這件事:

資料集標了什麼缺什麼
Ciron(Xiang et al., 2020)8.7K 則微博貼文的反諷程度沒有語境,也沒有其他情緒維度
NTU Irony Corpus(Tang & Chen, 2014)反諷句與反諷語境的位置沒有任何情緒分數
Xie et al.(2021)的 VAI 語料句子的 Valence、Arousal、Irony沒有考慮語境
英文語料(Senti-TUT、SemEval-2015 Task 11 等)反諷或 VA 其中一部分很少三者一起標;英文的線索(例如全大寫)也不適用中文

另一方面,研究也發現三個指標彼此相關:反諷越強,Valence 往往越低(越負面)、Arousal 越高。所以這篇主張要同時標註 V、A、I,而且句子和語境要分開標,模型才有機會學到反諷裡的情緒轉折。

資料集:CDVAI
#

CDVAI(Chinese Dimensional Valence-Arousal-Irony)以 NTU Irony Corpus 為基礎擴充。NTU 語料是唯一同時提供反諷句和反諷語境的中文資料,所以可以直接在上面加情緒分數。

篩選後保留 1,004 句,其中 843 句有需要標註的反諷語境。

  • 句子層級:標註 Valence、Arousal、Irony 三種強度。
  • 語境層級:標註 Valence、Arousal 兩種強度(語境本身不帶反諷關鍵字,所以不標 Irony)。

反諷的定義
#

論文採用 Li & Huang(2020)的說法:「反諷是一種實際意思和字面意思相反的表達」。在 NTU 語料裡,語境通常是負面描述,代表句子的真正意思;反諷關鍵字通常是正面描述,讓字面意思和語境相反。

標註規範(1~5 分)
#

Valence(正負向)

  • 1~2 分:負面情緒
  • 3 分:中性,或無法判斷
  • 4~5 分:正面情緒

Arousal(激動程度)

分數判斷標準
0完全客觀的描述,例如「我是學生」
1接近客觀描述,或很難判斷有沒有情緒
2感覺得到情緒,但句子裡沒有情緒詞
3有明確的情緒詞,例如難過、煩、失落、開心
4能明顯感受到強烈情緒,例如抓狂、暴怒、興奮;可能含有攻擊性用語
5用詞極端,帶有歧視、仇恨或明顯的躁怒

Irony(反諷程度)

反諷程度取決於反諷關鍵字的正面程度和語境的負面程度之間的落差。論文把語料中的反諷關鍵字依正面程度排成 wonderful > great > very good > good(論文以英文翻譯列出)。

分數判斷標準
1關鍵字和語境的落差很小,或語境接近客觀描述,例如「好,下雨了」
2落差中等
3落差明顯
4落差很大
5落差極大,句子可能含有歧視或違反道德的隱喻

標註品質
#

每句由三位標註者獨立評分(研究生與大學生,都是 20~25 歲的中文母語者),取三人平均作為標準答案。

論文沒有用 Cohen’s kappa 這類分類一致性指標,因為這裡的分數是連續的強度,標註規範的目的是「定出分數的基準線」,不是要求每個人給出一樣的類別。所以改用標註者之間的 MAE 衡量一致性:

層級指標三位標註者之間的 MAE
句子Valence0.05~0.31
句子Arousal0.25~0.41
句子Irony0.22~0.56
語境Valence0.07~0.40
語境Arousal0.15~0.65

差距都在 1 分以內,代表標註規範有效。Irony 和語境 Arousal 的分歧最大,這也合理:反諷程度本來就最主觀。

一個標註例子
#

論文舉了一則抱怨工廠同事的貼文:開頭是「很好(鼓掌)」,接著抱怨同事上班很多年卻不會用 Outlook 發會議通知,最後還罵了髒話,說「薪水給我,我就幫你發」。

  • Valence 1 分:髒話和抱怨都非常負面。
  • Arousal 5 分:有明顯的辱罵和躁怒。
  • Irony 4 分:「很好」本身只是微弱的正面詞,但事件讓發文者非常不舒服,落差很大;而且「薪水給我就幫你發」本身也是另一段反諷,所以給高分。
  • 語境:語境的情緒和整句一致,所以 V 和 A 也是 1 分和 5 分。

分數分布
#

以下是三人平均後四捨五入的分數分布:

層級指標012345
句子Valence0380624000
句子Arousal06040636915046
句子Irony01814283107520
語境Valence03025162500
語境Arousal562792641617626
  • 資料都是反諷句,所以句子的 Valence 全部落在負面(1~2 分)。
  • 句子 Arousal 集中在 2~4 分,因為大部分句子都帶情緒。
  • 語境的 Arousal 明顯比句子低:拿掉反諷關鍵字之後,誇張的語氣也跟著不見了。這正好說明反諷關鍵字會拉高激動程度。
  • Irony 分布比較平均,但高分很少,因為高分代表事實落差很大。

模型架構
#

語境 VA 的三種預測方式

為了驗證標註的可用性,論文用 BERT 當編碼器,預測句子的 VAI 和語境的 VA。

句子層級:句子進 BERT,取隱藏向量接一層 Linear,輸出 Valence、Arousal、Irony 三個分數。

語境層級:資料已經標好語境在句子中的位置,因此比較三種預測語境 VA 的方式:

方法做法想驗證什麼
M1整句進 BERT,直接接 Linear 預測語境的 VA整句的資訊夠不夠
M2整句進 BERT,只取語境那一段位置的隱藏向量,平均後接 Linear只看語境位置會不會更準
M3句子和語境分別進 BERT,把兩個隱藏向量串接後接 Linear同時給整句和語境會不會更好

實驗設定
#

資料切分:以分層抽樣切出訓練和測試集(7:3),再從訓練集切 1/10 當驗證集。

層級訓練驗證測試
句子63271301
語境53159253

超參數:Adam,訓練 50 個 epoch。句子層級的學習率試 4e-4、4e-5、4e-6;語境的資訊比整句少,所以試更小的 4e-5、4e-6、4e-7。

比較的六個預訓練模型:

代號模型預訓練語料
PM1ckiplab/albert-base-chinese中文維基
PM2hfl/chinese-macbert-base簡體與繁體中文維基
PM3shibing624/macbert4csc-base-chineseSIGHAN 錯字更正語料
PM4uer/chinese_roberta_L-4_H-256UER-py 預訓練
PM5bert-base-multilingual-uncased多語維基
PM6flax-community/alberti-bert-base-multilingual-cased多語詩歌語料

實驗結果
#

句子層級(MAE,越低越好)
#

模型ValenceArousalIrony
PM10.3190.5320.548
PM20.3470.5220.522
PM30.3390.5260.532
PM40.3340.5320.533
PM50.3530.5360.520
PM60.3320.5290.526
  • Valence 最好學:所有模型的 MAE 都低於 0.4。
  • Arousal 和 Irony 都超過 0.5。論文的解釋是:Arousal 不只看用詞的強度,而是看整件事的嚴重程度;Irony 也不只來自單一個反諷關鍵字,一句話裡可能有好幾段反諷。這些都很難只從字面學到。

語境層級(MAE)
#

模型V-M1V-M2V-M3A-M1A-M2A-M3
PM10.4380.4520.4560.8130.8350.787
PM20.4310.4510.4220.8190.8170.793
PM30.4010.4510.4220.7430.8170.793
PM40.4170.4630.4380.7670.8570.788
PM50.4250.4380.3880.8290.8240.799
PM60.4290.4330.4320.8470.8400.806
  • 語境 Valence:不管哪種方法,MAE 都在 0.45 左右。多數模型還是 M1 最好,M2 並沒有比 M1 好,論文推測只取語境位置或額外串接,反而帶進更多雜訊。最佳是 PM5 搭配 M3(0.388)。
  • 語境 Arousal:整體比 Valence 難很多,MAE 約 0.8。這裡 M3 在多數模型上最好,代表同時看整句和語境,對判斷激動程度有幫助;M2 則幫助不大。

錯誤分析
#

「很好……連喇叭都壞了 X-(」,語境是「連喇叭都壞了」

句子 V句子 A句子 I語境 V語境 A
標註23123
預測1.713.451.941.631.97
  • 模型把 Valence 判得太負面,可能是「連」、「壞了」被當成強烈的負面詞。但喇叭壞掉通常不會讓人那麼生氣,模型缺乏這種常識。
  • Irony 預測偏高:模型看到「很好」(正面)和偏負面的 Valence 落差很大,就給了高分;但這句沒有其他加強反諷的片段,所以標註分數其實很低。

整體來看,BERT 的主要困難是推斷說話者的意圖,以及判斷事件到底有多嚴重。

結論與限制
#

  • CDVAI 是第一個替反諷語境標註情緒強度的中文資料集,讓模型有機會學到句子和語境之間的情緒反差。
  • 基準實驗顯示資料可以學,而 M3(串接句子和語境)對語境 Arousal 有幫助。
  • 限制是資料量對機器學習還不夠大,也無法涵蓋所有領域與反諷句型。比較適合當作擴充樣本的種子資料、標註規範的範本,或和其他反諷語料合併使用。

後續的期刊版把 M1/M2/M3 也用在句子層級、換了一組中文預訓練模型,並加上自動預測語境位置的實驗,整理在期刊版那篇。

相關文章

DVA-BERT: Sentiment-Based Masked Language Modeling for Valence–Arousal Prediction
·4 分鐘
論文發表 Paper Nlp Sentiment-Analysis Bert Masked-Language-Model Valence-Arousal
Applied Intelligence 2022:把 BERT 的隨機遮罩改成依情緒強度遮情緒詞,當作輔助任務來提升句子層級的 Valence–Arousal 預測
碩士論文:基於實體表徵學習與密度估計於指代消解
·4 分鐘
論文發表 Paper Nlp Coreference-Resolution Spanbert Representation-Learning Thesis
在 SpanBERT 指代消解模型上加入實體表徵估計、群內密度與群間密度三個組件,F1 提升約 0.9
A Dynamic Embedding Method for Passenger Flow Estimation
·3 分鐘
論文發表 Paper Traffic-Flow Transfer-Learning Bert Embedding Spatio-Temporal
IIAI-AAI 2021:用 BERT 預訓練動態捷運站嵌入,取代 GMAN 的靜態站點特徵,獲 Competitive Paper Award
LeetCode 1337: The K Weakest Rows in a Matrix
·1 分鐘
LeetCode Easy Array Binary-Search Sorting Heap-Priority-Queue
LeetCode 1337 解題筆記:每列的士兵都在前面,用二分找第一個 0 就是士兵數;照(士兵數, 列號)排序取前 k 個
LeetCode 1464: Maximum Product of Two Elements in an Array
·1 分鐘
LeetCode Easy Array Sorting Heap-Priority-Queue
LeetCode 1464 解題筆記:值都是正數,取最大的兩個數 a、b,答案是 (a - 1)(b - 1)
LeetCode 2357: Make Array Zero by Subtracting Equal Amounts
·1 分鐘
LeetCode Easy Array Hash-Table Greedy Sorting
LeetCode 2357 解題筆記:每次操作會讓最小的正數那一群變成 0,所以次數就是不同的正數有幾種