代碼地址
實體關系抽取是信息抽取任務中非常基礎且必要的工作。實體關系主要有一對一、多對一、多對多等。今天從實踐的角度介紹一下實體關系抽取的相關工作。僅為了簡單介紹實體關系抽取相關的實踐過程,模型我沒有進行深度調優,故不適用實際生產中。僅在此介紹下方法,模型主要結構使用的雙向GRU網絡, 以及BERT。
數據來源
百度2019語言與智能技術競賽信息抽取
模型要求
Tensorflow-gpu=2.0.0
transformers
一、實體關系聯合抽取
目的是提取三元組[subject, predicate,object];
基本簡單再簡單的原則,實體標簽{O:0, B:1, I:2}, 進行subject,object提取;
關系部分,是一個多頭選擇策略(本文主要也是介紹這種方法),對任一序列,構建[sequence_length, sequence_length]數組,Subject頭位置[第N行]對應Object頭位置[第M列],該處數字表示第C種關系。
模型一
使用雙向GRU構建實體關系聯合抽取模型。
使用字向量,首先制作字典,選取前4996個字;
構建模型輸入數據,最大長度128,構建文本token,實體label, 關系label;
雙向GRU輸出+softmax提取實體;雙向GRU輸出+sigmoid提取關系。
模型使用64000條訓練數據,最后對測試集前100進行驗證,最大F1值是51%;
主要原因是單靠雙向GRU的學習能力不夠。
模型二
使用BERT構建實體關系聯合抽取模型。
構建模型輸入數據,最大長度128,BERT輸入又三部分構成[文本token, mask_token, segment_token],實體label, 關系label;
BERT輸出+softmax提取實體;BERT輸出+sigmoid提取關系。
模型使用3000條訓練數據,最后對測試集前100進行驗證,最大F1值是81.8%;
模型太重,沒有取過多數據訓練,應該還可以繼續提高的。
二關系抽取
模型一
不進行實體提取,當做已有實體直接進行關系預測。
使用雙向GRU構建關系抽取模型。
使用字向量,首先制作字典,選取前4996個字;
構建模型輸入數據,最大長度128,構建文本token,實體label, 關系label;雙向GRU輸出+sigmoid提取關系。
模型使用64000條訓練數據,最后對測試集前100進行驗證,關系提取最大F1值是81.8%,跟模型一對比,也驗證了單靠雙向GRU進行聯合。
模型二
使用BERT構建關系抽取模型。
構建模型輸入數據,最大長度128,BERT輸入又三部分構成[文本token, mask_token, segment_token],實體label, 關系label;
BERT輸出+sigmoid提取關系。
模型使用3000條訓練數據,最后對測試集前100進行驗證,模型沒有跑完,前10個epoch時,模型F1已經超過85%。
總結
本文的目的就是讓大家了解下多頭選擇策略下的關系抽取問題。