Chapter7-7_Deep Learning for Coreference Resolution
文章目錄
- 1 什么是coreference resolution
- 2 框架
- 2.1 Mention Detection
- 2.2 Mention Pair Detection
- 2.3 End-to-End
- 2.4 Span Representation
- 2.5 Pratical Implementation
- 2.6 Result
- 3 應用
本文為李弘毅老師【Deep Learning for Coreference Resolution】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權,必定刪除。
文章索引:
上篇 - 7-6 Text Style Transfer
下篇 - 7-8 Deep Learning for Constituency Parsing
總目錄
1 什么是coreference resolution
coreference resolution翻譯過來就是指代消解,它的目的是搞清楚一句話中的代詞指的是什么。比如下圖中有兩句話,第一句是"The trophy would not fit in the brown suitcase because it was too big.",這里的it顯然值得是"trophy";第二句是"The trophy would not fit in the brown suitcase because it was too small.",這里的it顯然指的是"suitcase"。我們人很容易區(qū)分出來,但是要機器去找"it"指代的是什么就比較困難了。
剛說的是比較通俗的說法,更準確地說coreference resolution是這樣的。在一個句子中會有很多的mention,mention就是句子中的一些名詞,比如"鍾佳播瞪著樂咖舉起他的拳頭說"這句話中,“鍾佳播”,“樂咖”,“他”,"他的拳頭"都算是mention。這些mention會指向一個實際存在的事物,如果兩個或兩個以上的mention指向了同一個事物,那么這就叫做corefer。第一個出現(xiàn)的corefer叫做antecedent,之后出現(xiàn)的叫做anaphor。如果某個事物只有一個mention指向它,那么就叫做singleton。
總結一下,指代消解需要模型做兩件事情,第一件事情就是把所有的mention都找出來,singletons往往會被忽略掉;第二件事情就是對所有的mention進行分組,把指代同一個事物的mention分到一個組里。
2 框架
2.1 Mention Detection
Mention Detection要做的就是把所有的mention都給找出來,它就是一個Binary Classifier。這個Binary Classifier吃一個span,然后告訴我們這個是不是一個mention。span就是說整個句子中的一段。如果句子的長度為N,那么這個步驟會被重復N(N-1)/2次,也就是概率論中的CN2C_N^2CN2?,從N個tokens當中,任選兩個作為起始token和結尾token。
為什么要這么做?比如“他的拳頭”這個sequence當中,“他”是一個mention,“他的拳頭”整句話也是一個mention,為的就是把這兩者都找出來。
這里起始我還是有點小疑惑,一是sequence是不是按照標點符號切過的,因為有些標點明顯不可能在mention中出現(xiàn),除了老外的名字中的那個"·";二是這個binary classifier只吃一個span嗎?那比如一個人的名字叫做"張小明",那么“張小明”會被當成mention,"小明"也會被當成mention嗎?不過這種其實也能通過后處理解決掉。
2.2 Mention Pair Detection
Mention Pair Detection也是一個Binary classifier。不過它吃兩個mention,然后吐出這兩個mention是不是指向同一個東西,也就是上面所說的cluster的過程。當然這里的mention肯定不知是mention對應的tokens這么簡單,應該是兩個特征。
加入我們根據(jù)上一步得到了K個mentions,那么這里會執(zhí)行K(K-1)/2次。
2.3 End-to-End
像上述這樣分成兩步的過程并不是end-to-end的,我們其實可以把這兩步合成一步。就是train一個Binary Classifier,它吃兩個span,然后在這兩個span都是mentions且指向同一個entity的時候,輸出yes。
如果是這樣的一個模型的話,要運行幾次呢?假設我們有N個tokens,那么會有N(N-1)/2個span,記K=N(N-1)/2的話,就會有跑K(K-1)/2次,也就是復雜度為N4N^4N4。
相信說到這里,大家也都是有點疑惑的。那么,這個Binary classifier究竟長什么呢?它就下長下圖這樣子。先會把整個句子經過一個Pre-trained Model,可以是ELMo或者Bert之類的。然后每個token會有一個對應的輸出,這里的每個輸出都是包含了全局的信息的。然后我們就選擇兩個span,分別去抽取特征,這兩個特征又會分別經過一個輸出Mention分數(shù)的網絡,這兩個特征又會一起進入一個輸出Mention Pair分數(shù)的網絡,然后這三個分數(shù)整合之后,得到最終的分數(shù)。看了這個圖,其實大多數(shù)的疑惑都消失了。
2.4 Span Representation
Span Feature Extraction的做法是如何的呢?一種常見的做法是先把頭尾兩個特征拿出來(下圖中x1x_1x1?和x4x_4x4?),然后對整個span算attention之后,取weighted sum。最后把這三個特征concat起來就是最終的輸出了。需要有weighted sum的步驟,是因為這樣可以讓模型focus在span中講述entity本質的東西上,比如“湖旁小屋”,這里的本質其實是“小屋”。
2.5 Pratical Implementation
剛才我們說了,假設我們有N個tokens,那么會有N(N-1)/2個span,記K=N(N-1)/2的話,就會有跑K(K-1)/2次,也就是復雜度為N4N^4N4。在實際操作的時候,有兩招可以減少運算量。一招是,在inference的時候,先把mentin detection的部分單獨拿出來過一遍,可以大大減小K;另一招是限制一個span的最大長度,這個很容易理解。
2.6 Result
那么,這么做的效果如何呢?下面有一些模型輸出結果的句子,其中小括號括起來的部分,是模型認為是coreference的部分,用顏色highlight的部分,則是attention權重比較大的部分。下面的有正確的例子,也有錯誤的例子,總體來說,還是挺棒的~
3 應用
做coreference resolution主要是為了一下下游的任務。比如chatbot。在chatbot當中,往往需要機器去看歷史內容,指導此刻人說的話,指的是剛才說過的什么東西。在做chatbot的時候,也有用seq2seq的方法去做的,比如有如下對話:
人:“梅西多高?”
機器:“官方說法他是5英尺7英寸。”
人:“他和C羅誰是最好的球員?”
這個時候,最后一句的他,我們希望可以替換成"梅西",這樣機器回答起來會容易很多。這時,有人的做法就是,輸入上面這三個句子,讓機器輸出“梅西和C羅誰是最好的球員?”。
總結
以上是生活随笔為你收集整理的Chapter7-7_Deep Learning for Coreference Resolution的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 2044. 统计按位或
- 下一篇: LeetCode 1650. 二叉树的最