NLP(四十二)人物關(guān)系分類的再次嘗試
??兩周前的周末,筆者決定對人物關(guān)系分類進行再次嘗試。
??為什么說是再次嘗試呢?因為筆者之前已經(jīng)寫過一篇文章NLP(二十一)人物關(guān)系抽取的一次實戰(zhàn),當(dāng)時的標注數(shù)據(jù)大約2900條,使用的模型也比較簡單,為BERT+Bi-GRU+Attention+FC結(jié)構(gòu),其中BERT用作特征提取,該模型在原有數(shù)據(jù)集上的F1為79%。
??經(jīng)過筆者一年斷斷續(xù)續(xù)的努力,現(xiàn)在的標注樣本已經(jīng)達到3900多條。鑒于筆者已做過BERT微調(diào)相關(guān)工作,當(dāng)然希望在此數(shù)據(jù)集上進行再次嘗試。
??現(xiàn)有的人物關(guān)系數(shù)據(jù)集大約3900多條,分布如下圖:

??首先,我們只使用BERT分類模型,對輸入數(shù)據(jù)進行格式改造,進行簡單地嘗試。
??我們以樣本
親戚 1837年6月20日,威廉四世辭世,他的侄女維多利亞即位。為例,其中親戚為人物關(guān)系,威廉四世為實體1,維多利亞為實體2,來演示輸入的文本格式。下面的部分我們統(tǒng)一使用chinese-RoBERTa-wwm-ext作為預(yù)訓(xùn)練模型,數(shù)據(jù)集分為訓(xùn)練集和測試集,比例為8:2。??第一種方法,我們與文章NLP(二十一)人物關(guān)系抽取的一次實戰(zhàn)一樣,在文本中將實體1替換為同樣數(shù)量的
#,實體2替換為同樣數(shù)量的#,再將實體1、實體2、文本用$連接,輸入格式為:威廉四世$維多利亞$1837年6月20日,####辭世,他的侄女####即位。。使用BERT+Bi-GRU+Attention+FC模型,在測試集上的評估結(jié)果如下:| 模型名稱 | 訓(xùn)練1 | 訓(xùn)練2 | 訓(xùn)練3 | 訓(xùn)練4 | 訓(xùn)練5 | Avg |
|---|---|---|---|---|---|---|
| BiGRU+Attention | 0.7726 | 0.7974 | 0.7935 | 0.7908 | 0.7941 | 0.7897 |
??第二種方法,輸入格式與第一種方法一致。使用文章NLP(三十五)使用keras-bert實現(xiàn)文本多分類任務(wù)中的多分類模型進行訓(xùn)練,在測試集上的評估結(jié)果如下:
| 模型名稱 | 訓(xùn)練1 | 訓(xùn)練2 | 訓(xùn)練3 | 訓(xùn)練4 | 訓(xùn)練5 | Avg |
|---|---|---|---|---|---|---|
| Bert_cls | 0.8246 | 0.8110 | 0.8282 | 0.8448 | 0.8218 | 0.8260 |
可以看到,有了預(yù)訓(xùn)練模型的幫助,模型效果有了顯著提升,F(xiàn)1值平均高了3.6%。
??第三種方法,在文本中將實體用#包圍,輸入格式為:1837年6月20日,#威廉四世#辭世,他的侄女#維多利亞#即位。使用BERT_cls模型,在測試集上的評估結(jié)果如下:
| 模型名稱 | 訓(xùn)練1 | 訓(xùn)練2 | 訓(xùn)練3 | 訓(xùn)練4 | 訓(xùn)練5 | Avg |
|---|---|---|---|---|---|---|
| Bert_cls2(實體用#圍繞) | 0.8175 | 0.8259 | 0.8275 | 0.8335 | 0.8299 | 0.8269 |
可以看到,該輸入格式與第二種方法相比,在模型效果上并沒有太大的提升。
??也許,是時候嘗試新的模型了。
??上周一晚上,筆者無意中看到一篇論文,名稱為Enriching Pre-trained Language Model with Entity Information for Relation Classification,顧名思義為使用實體信息將預(yù)訓(xùn)練模型用于關(guān)系分類(RC)。其模型結(jié)構(gòu)如下圖:

該模型被稱為
R-BERT,模型結(jié)構(gòu)在此不多介紹,后面有機會再介紹。在Github上有R-BERT模型的Torch框架實現(xiàn)方式,在Semeval 2010 Task 8 Dataset取得了不錯的效果。??筆者將
R-BERT用于人物關(guān)系分類數(shù)據(jù)集中,在測試集上的評估結(jié)果如下:Model: chinese-roberta-wwm-ext, weighted avgage F1 = 85.35%
該項目筆者已上傳至Github,網(wǎng)址為:https://github.com/percent4/R-BERT_for_people_relation_extraction。
??本周,筆者下定決心使用Keras實現(xiàn)R-BERT。第一天,無果。第二天,實現(xiàn)關(guān)鍵Keras層的突破,進行簡單模型訓(xùn)練,發(fā)現(xiàn)離Torch版本的結(jié)果尚有一定差距。第三天,對照Torch版本,不斷調(diào)整模型,加入Warmup機制,發(fā)現(xiàn)終于取得了與Torch版本一樣的效果。在測試集上的評估結(jié)果如下:
# Model: chinese-RoBERTa-wwm-ext, weighted avgage F1 = 85.27%
precision recall f1-score support
unknown 0.7930 0.8612 0.8257 209
上下級 0.7188 0.7419 0.7302 31
親戚 0.8824 0.6250 0.7317 24
兄弟姐妹 0.8378 0.9118 0.8732 34
合作 0.8600 0.7288 0.7890 59
同人 1.0000 0.9487 0.9737 39
同學(xué) 0.8800 0.9167 0.8980 24
同門 0.9615 0.9615 0.9615 26
夫妻 0.8333 0.8861 0.8589 79
好友 0.8065 0.8333 0.8197 30
師生 0.8857 0.8378 0.8611 37
情侶 0.9231 0.7742 0.8421 31
父母 0.9062 0.9062 0.9062 128
祖孫 0.9524 0.8000 0.8696 25
accuracy 0.8531 776
macro avg 0.8743 0.8381 0.8529 776
weighted avg 0.8566 0.8531 0.8527 776
該項目已上傳至Github,網(wǎng)址為:https://github.com/percent4/Keras_R_BERT。后面有機會筆者再詳細介紹。
??至此,筆者不僅用Keras實現(xiàn)了R-BERT,并且比最初的BERT+Bi-GRU+Attention+FC模型,在測試集上的F1值提升了6.3%。
??實現(xiàn)模型的過程是痛苦的,筆者一度想放棄,但當(dāng)模型成功復(fù)現(xiàn)后,那種快樂,是簡單枯燥的工作中的一抹絢麗的陽光!這也是筆者第一次復(fù)現(xiàn)模型,雖然只是深度學(xué)習(xí)框架不同,但對我來說是極其重要的一步!
??最近又發(fā)現(xiàn)一個很不錯的關(guān)系分類的模型:Mul-BERT,但由于該模型的論文并未公布,Github也沒有公開源碼,筆者只好按自己的理解,簡單地實現(xiàn)了近似Mul-BERT模型,已上傳至Github,網(wǎng)址為:https://github.com/percent4/Keras_quasi_Mul_BERT。等論文出來后,再用Keras去復(fù)現(xiàn)Mul-BERT模型。
??本文到此結(jié)束,感謝閱讀~
??2021年3月25日于上海浦東,此日陽光明媚~
