人工智慧論文解讀精選 | PRGC:一種新的聯合關係抽取模型

NLP論文解讀發表於2021-12-26

©NLP論文解讀 原創•作者 | 小欣

 

論文標題:PRGC: Potential Relation and Global Correspondence Based Joint Relational Triple Extraction

論文連結:https://arxiv.org/pdf/2106.09895.pdf

程式碼:https://github.com/hy-struggle/PRGC

 

1、前言

1. 論文的相關背景

關係抽取是資訊抽取和知識圖譜構建的關鍵任務之一,它的目標是從非結構化的文字中抽取形如<頭實體,關係,尾實體>的三元組資料。通常使用Pipeline方法進行抽取:先對句子進行實體識別,然後對識別出的實體兩兩組合進行關係分類,最後把存在關係的實體對輸出為三元組。但這樣的做法存在以下缺點:1. 誤差積累,實體識別模組的錯誤會影響下面的關係分類效能。2. 實體冗餘:沒有關係的實體對會帶來多餘資訊,提升錯誤率,同時降低整個抽取流程的效率。3. 資訊利用不充分:Pipeline方法中兩個子任務相對獨立,無法有效利用兩個子任務的內在聯絡和依賴關係。為了緩解Pipeline方法存在的一些問題,聯合關係抽取模型應運而生。聯合關係抽取模型的設計目的是希望進一步利用兩個任務之間的潛在資訊,加強實體識別模型和關係分類模型之間的互動。早期的聯合關係抽取模型通過模型引數共享、多工和關係資訊融入序列標註等方法進行聯合抽取,但取得的效果並不盡如人意。隨著CasRel、TPLinker等一系列聯合解碼模型的提出,聯合關係抽取模型開始取得SO他的效果。

2. 論文主要解決的問題

CasRel、TPLinker等基於聯合解碼的關係抽取模型在抽取效率上的問題

3. 論文的主要創新和貢獻

  • 通過將關係抽取拆解為關係判斷、實體提取和主客實體對⻬三個子任務,定義了一種新的關係抽取模型方法
  • 有助於緩解CasRel、TPLinker等模型存在的關係冗餘、主客實體對齊效率低等問題

2、論文摘要

實體關係聯合抽取是資訊抽取中的⼀項重要任務。⽬前的聯合抽取⽅法已有了相當可觀的表現,但仍存在冗餘關係預測能⼒差、Span提取泛化不⾜和效率低等問題。本⽂將聯合抽取任務分為三個⼦任務:關係判斷、實體提取和主客實體體對⻬,進⽽提出了⼀種新的聯合抽取模型PRGC。該模型設計了⼀個模組預測潛在的關係,從⽽限制預測規模;使⽤基於關係的序列標註解決實體重疊問題;最後設計⼀個全域性通訊模組將主體和客體整合成三元組。

3、論文模型

PRGC將關係抽取分解成三個任務:關係判斷、實體抽取和主客體對齊。首先通過關係判斷模組獲取文字中蘊含的關係,過濾掉不可能存在的關係。接著,將關係資訊加入到實體抽取模組,每種關係都抽取出相應的主客實體。最後,使用主客體對齊模組獲取的全域性實體相關矩陣將主客實體進行對齊,從而抽取出文字所對應的三元組。

 

 

PRGC整體架構圖

3.1 Relation Judgement

關係判斷可以建模為文字多標籤問題,即定義為給定一段文字,輸出這段文字可能包含的所有關係標籤。如下式所示,作者使用BERT編碼器將句子轉化為向量形式,並通過平均池化獲取句子的向量表徵,進而實現關係判斷。

 

 

 

 假設一個句子對應N個關係標籤,則PRGC在訓練階段會將一個句子樣本拆分成N個句子樣本,每個句子樣本中僅包含一個關係標籤。例如,"九玄珠是在縱橫中文網連載的一部小說,作者是龍馬"這個句子中存在"連載網站"和"作者"兩個關係,則在訓練階段該句子會被分別以<"九玄珠是在縱橫中文網連載的一部小說,作者是龍馬","連載網站">和<"九玄珠是在縱橫中文網連載的一部小說,作者是龍馬","作者">輸入模型進行關係判斷。此時關係判斷模型便是常規的多分類模型,使用交叉熵計算損失即可。

# (bs, h)
h_k_avg = self.masked_avgpool(sequence_output, attention_mask)
# (bs, rel_num)
rel_pred = self.rel_judgement(h_k_avg)

loss_func = nn.BCEWithLogitsLoss(reduction='mean')
loss_rel = loss_func(rel_pred, rel_tags.float())

在預測階段,通過sigmoid函式獲取句子對應的所有關係標籤的概率,並結合預先設定的概率閾值獲取句子蘊含的關係標籤。

# (bs, rel_num)
rel_pred_onehot = torch.where(
torch.sigmoid(rel_pred) > rel_threshold,
torch.ones(rel_pred.size(), device=rel_pred.device),
torch.zeros(rel_pred.size(), device=rel_pred.device)
)

3.2 Entity Extraction

實體抽取模組與一般的序列標註任務的不同在於:輸入的向量是融合了關係資訊的句子向量。作者提供了兩種融合方式,一種是直接拼接兩個向量,另一種是通過向量相加進行融合。此外,實體抽取模組會將主體實體抽取和客體實體抽取分開進行抽取

if ex_params['emb_fusion'] == 'concat':
decode_input = torch.cat([sequence_output, rel_emb], dim=-1)
# sequence_tagging_sub就是個普通的序列標註模組
output_sub = self.sequence_tagging_sub(decode_input)
output_obj = self.sequence_tagging_obj(decode_input)
elif ex_params['emb_fusion'] == 'sum':
decode_input = sequence_output + rel_emb
# sequence_tagging_sum裡面主客實體抽取也是分開進行的
output_sub, output_obj = self.sequence_tagging_sum(decode_input)

3.3 Subject-object Alignment

主客實體對齊模組本質上就是生成字元與字元的相關矩陣。

 

 

 

程式碼實現

# batch x seq_len x seq_len x 2*hidden
corres_pred = torch.cat([sub_extend, obj_extend], 3)
# (bs, seq_len, seq_len)
corres_pred = self.global_corres(corres_pred).squeeze(-1)

# global_corres的類程式碼
class MultiNonLinearClassifier(nn.Module):
def __init__(self, hidden_size, tag_size, dropout_rate):
super(MultiNonLinearClassifier, self).__init__()
self.tag_size = tag_size
self.linear = nn.Linear(hidden_size, int(hidden_size / 2))
self.hidden2tag = nn.Linear(int(hidden_size / 2), self.tag_size)
self.dropout = nn.Dropout(dropout_rate)

def forward(self, input_features):
features_tmp = self.linear(input_features)
features_tmp = nn.ReLU()(features_tmp)
features_tmp = self.dropout(features_tmp)
features_output = self.hidden2tag(features_tmp)
return features_output

由於採用了拼接向量後通過全連線生成對齊矩陣,故而會佔用較多的視訊記憶體。筆者在這部分嘗試了使用biffine機制進行向量的交叉融合,可以在不降低效能的情況下有效地節約視訊記憶體。

3.4 Loss Function

PRGC的損失採用了三個子任務加權的形式,本質上都是交叉熵,只是針對不同維度進行了處理。作者在論文中並未詳細討論不同的加權方式對模型的影響,在程式碼實現中也是採用了常規的三個損失直接相加的結構。筆者認為由於三個損失的收斂情況不同,可以嘗試根據訓練輪數動態調整三個損失之間的加權關係。

 

 

 

4、論文實驗

PRGC主要在NYTWebNLG上進行實驗,NYTWebNLG都有兩個版本,一個版本是標註出整個實體,另一個版本是僅標註出實體的最後一個字元,作者將僅標註出實體的最後一個字元的版本記為NYT*WebNLG*。如下例中實體North CarolinaNYT中是整體標出的,而在NYT*中則是僅標出Carolina

  • NYT的資料格式:
{
"text": "North Carolina EASTERN MUSIC FESTIVAL Greensboro , June 25-July 30 .",
"triple_list": [
[
"North Carolina",
"/location/location/contains",
"Greensboro"
]
]
}
  • NYT*的資料格式:
{
"text": "North Carolina EASTERN MUSIC FESTIVAL Greensboro , June 25-July 30 .",
"triple_list": [
[
"Carolina",
"/location/location/contains",
"Greensboro"
]
]
}
  • WebNLG的資料格式:
{
"text": "Alan Bean , who graduated in 1955 from UT Austin with a B.S . and was selected by NASA in 1963 , spent 100305.0 minutes in space .",
"triple_list": [
[
"Alan Bean",
"was selected by NASA",
"1963"
]
]
}
  • WebNLG*的資料格式:
{
"text": "Alan Bean , who graduated in 1955 from UT Austin with a B.S . and was selected by NASA in 1963 , spent 100305.0 minutes in space .",
"triple_list": [
[
"Bean",
"was selected by NASA",
"1963"
]
]
}

評價指標採用了常見的精準率(Prec.)、 召回率(Rec.)和F1-score。實驗結果如下圖,可以看出PRGC在四個資料上都取得了不錯的效果。

 

 

 

此外,作者還對PRGC的效率進行了實驗,得益於PRGC可以通過關係判斷去除掉句子中不包含的關係標籤和整個模型不存在過於複雜的解碼方式,PRGC在複雜度和推理速度上相比於CasRel和TPLinker都有明顯的優勢:

 

相關文章