BERT-MRC论文笔记
1、NER任務概述
ner(named entity recognization),命名實體識別旨在提取句子中預先定義的不同類型的實體,如person,location,organization等等。從概念上來講,ner任務有點類似于目標檢測任務,ner首先需要detect實體空間(entity span),然后分類實體類型(classification)。
ner方法分類:
ner方法上從解決的ner問題出發,大致分為2種類型[ps:看的文章不多,總結或許有誤]:
-
Flat ner
-
Nested ner
Flat ner: 解決常見的標準的ner任務,實體之間不存在嵌套關系,每個句子token只會屬于一種實體類型。對于這種類型的ner任務,通常采用序列標注模型,典型的如: BiLSTM+CRF、bert+biLSTM+CRF,在輸出層,每個token進行softmax分類,因此每個token只會輸出一個標簽,無法解決實體嵌套的問題。
Nested ner: 解決實體嵌套的ner任務。實體嵌套大體上可以分成2類:1)不同實體類型間嵌套; 2) 同種實體類型間嵌套。不同實體類型間嵌套,如例子"chinese"屬于contury類型,"chinese embassy in France"屬于facility類型,chinese這個token即存在不同類型實體間的嵌套;類似的,同類型間實體的嵌套,"chinese"屬于person類型, "chinese girls"屬于person類型,chinese這個token即存在同種類型之間的嵌套
2、BERT-MRC綜述
2.1 motivation
BERT-MRC為了解決嵌套的ner任務,提出了一個基于MRC(機器閱讀理解)的QA框架來統一的解決flat ner以及nested ner任務,并取得了SOTA的性能。
個人感覺這個文章很有開創性,后續一些信息抽取的文章"CASREL"等jointly方法都有這篇文章的影子,遂記錄一下。
2.2 method
??2.2.1 解決不同類型間的實體嵌套
????????前面提到,序列標注模型不能解決嵌套問題。而這篇文章提出了基于問答的框架來解決嵌套實體識別的問題,對于每種類型的實體,都會構造一個相關的query,也可以把它當作一個"prompt"。例如,假如要抽取person類型的實體,我們可以構造一個query: "which people did mention in this sentence?",于是ner任務就變成了基于給定的句子來回答query這個問題,答案就是對應的實體文本,是連續的文本空間(注意是連續的)。
-
訓練:
????????首先訓練集會事先構造成(Query, Context, Answer)三元組的形式,query是和實體類型相關的,編碼了實體類型信息,query到實體類型是一一對應的。context是原始句子,answer即該類型下的實體。entity通過text span表示,即在一個句子通過實體的開始位置索引(start)和結束位置索引(end)來表示一個實體。
????????模型上使用Bert模型, query和context concat后輸入bert中獲取每個token的向量表示,輸入形式: CLS "query" SEP context ,每個token后面接2個二分類任務,一個用來分類是否是start索引,一個是用來分類是否是end索引。這里本質上是N個2分類任務, N是序列長度,而不是2個N分類任務。前者使用sigmoid loss,后者使用softmax loss,前者可以在一個句子中輸出多個start索引,而后者只能輸出一個start索引[即一個實體]。一個句子中,同種類型的實體可能不止一個,因此本文采用n個2分類任務。
-
解碼:
????????這里還存在一個特殊的解碼問題,基于MRC的QA框架只能解決不同類型間的實體嵌套問題,對于不同類型的實體,構造一個特殊的query,獨立地去獲取該類型下的實體。而對于同種類型的嵌套問題,一個句子中有多個start index和對應的多個end index,如何解碼?如果不存在同類型實體嵌套問題,我們可以直接使用基于啟發式的就近匹配原則,start index尋找最近的end index進行匹配即可。對于同類型嵌套,如句子"chinese girls", 有2個實體, "chinese" ,和"chinese girls",start index 只有1個1,而end index有2個1,基于上述啟發式匹配就會漏識別。因此為了cover這個問題,本文提出了match網絡,將start向量和end向量concat后,進行一個二分類任務,判斷start和end是否是match的
-
推理:
? ????????每種類型構造的query拼接原始句子,輸入到網絡中,獲取每種類型下得到的entity span。
??2.2.2 一些問題點討論
?????????首先簡單說一下效果,在flat ner以及nested ner上任務上都取得了SOTA
????2.2.2.1 如何構造query
????????這一點在論文中有反復的提到,構造的query很重要,且對最終的性能影響很大。其實也不難理解,套用QA的框架也能知道,Question是核心要素之一,沒有好的問題怎么能得到你想要的答案呢?原文做了一些詳細的實驗對比,感興趣的可以仔細閱讀原文對應的章節。
????????其實在沒有看到這篇文章的時候,心中有一個想法,那就是不去構造query,而是使用實體的類型,比如說"OGR","PER"等作為一個special token放在句子的開頭,這個特殊的token編碼了具體的實體類型信息,引導模型輸出對應類型的entity。這樣也能完成統一建模,但是這種想法其實也剛好在構造query這一節被作者實驗過了。但是按照我的理解還是有一點點不同,其中keyword方式就是使用類型的關鍵詞,比如"person","organization"等,本質上其實還是想query具有一定的語義信息[去套用qa的框架],但是想person, organization這種類型在句子中可能很常見,導致embedding不能唯一去編碼任務信息,可能會影響性能。
-
TODO: 后續有ner相關的任務,可以嘗試一下這個想法,感興趣的讀者也可以試試吧~
????2.2.2.2 MRC框架的好處
????????MRC框架的好處在論文中也被反復提及,主要有以下好處: 1) 能夠解決嵌套的實體識別問題;2)通過構造query的方式,其實編碼了需要提取的實體的類型信息,這是以往序列標注模型做不到的;3)具有很好的zero-shot能力(很nice~),由于query通過自然語言的方式編碼實體類型信息,即使訓練集中沒有出現的實體類型,通過理解query的語義,能夠得到正確的答案(entity)。個人覺得prompt方式是解決zero-shot的一種很好的方式,prompt(也即query的構造)就很重要。
????????回到前面那個點,如果使用實體的類型作為special token這種范式,那模型就完全不具有zero-shot能力了
總結
以上是生活随笔為你收集整理的BERT-MRC论文笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巴身小(leng)一族作为夜郎后裔的历史
- 下一篇: 树莓派项目实践 [1] —— 编程控制继