相關文章

1. Neural Architectures for Fine-grained Entity Type Classification

2. Neural Fine-Grained Entity Type Classification with Hierarchy-Aware Loss

3. Fine-grained Entity Typing through Increased Discourse Context and Adaptive Classification Thresholds

文章1

模型圖

這是相對來說比較早的一篇利用神經網路來解決NET問題的工作,從模型中大致可以看出該模型的基本框架,1)預訓練的詞向量進行embedding,2)針對entity mention周邊的context,分別使用不同的Bi-LSTM進行處理,並在其隱層狀態上使用attention,最後得到context的向量表示,針對entity mention,直接使用平均的方法,將所有詞的向量加起來,得到entity mention的向量表示,最後使用一個MLP進行分類。

亮點

文章在考慮label的時候,使用了hierarchical label encoding的方法,具體來講,fine-gained label具有先天的層次化特徵,例如person/artist/actor,如果預測entity mention的label為actor,那麼理論上是可以回溯上去的,得到person/artist,因此作者考慮將這些信息進行層次化聯合編碼,還是使用one-hot的表示方法,不過對應的label都會得到1,因此一個label中不只有一個1,然後乘以一個embedding矩陣,得到label的低維表示,然後將得到的低維表示作為最後分類層的參數,進行分類,這個就很有意思了,具體實現過程,可以參見下圖:

文章2

問題

1. 雜訊問題

NET任務有一個很大的問題,那就是數據的問題,目前常用的幾個數據集,FIGER,OntoNote,WiKi基本上都是通過如下步驟生成的:

1. 在句子或者文檔中使用NER等工具標記entity mention

2. 將得到的entity mention和知識圖譜中的entities做關聯

3. 找到知識圖譜中每個entity的類型,將其作為目標entity mention的候選類型

從這個流程中就可以看出來一個問題,得到的type類型有很高的雜訊,而且針對一句特定的句子或文檔,這些候選類型中後很多是不符合情境的,也就是說上面的方法在做標註的時候是無法考慮情境的,例如下圖

如果只考慮句子s1,那麼得到的type就應該是person/coach,如果只考慮句子s2,那能得到的type就應該是athlete,

2. 標註過細問題

還是上圖的例子,如果只考慮句子s3,那麼得到的就只能是person,但是由於這個人是個名人,因此在知識圖譜上會給他標記上很多很細的type,這會導致在訓練的時候,模型會更喜歡分這些很細的類別,而不是一般的,但是符合句子情境的類別。

針對以上問題,作者提出了自己的模型,關鍵的地方在於作者設計的loss function

模型

這個模型還是很簡單的,相對於上一個模型,在該模型中,作者將考慮的重點放在了entity mention上邊,具體流程如下:

1. embedding layer將句子中的每個詞進行embedding

2. 針對entity mention,a)將所有詞的向量做平均,得到 一個表示;b)在entity mention的基礎上左右各擴展一個詞,然後將得到的這個短語通過一個LSTM,然後將最後一個狀態作為entity mention的另一種表示

3. 針對context,不再是考慮使用不同的LSTM來處理兩邊的內容,而是處理整個句子,然後在隱層狀態上做attention,最後得到一個加權和作為context的表示,這裡的attention是在整個句子上做self-attention。

4. 將得到的三個向量作拼接,然後將結果送給分類器進行分類

損失函數

針對數據上存在的兩個問題,作者在損失函數上做了一些巧妙地調整。

1. out-of-context noise

針對這個問題,作者在計算損失時,不是考慮所有類別上的損失,即傳統的loss function

J(	heta) = frac{1}{N}sum_{i=1}^{N}y_ilog(p(y_i|m_i, c_i)) + lambda||	heta||^2, quad 	ag{1}

在這個公式里,$y_i$是一個向量。作者只考慮其中概率最大的類別,即 y_i^{} = argmax_{yin y_i^t}p(y|m_i, c_i) ,這樣損失函數就變成了

J(	heta) = frac{1}{N}sum_{i=1}^{N}(y_i^{}log(p(y_i^{}|m_i, c_i)))+ lambda||	heta||^2, quad 	ag{2}

作者這麼做,是假設在訓練集中獲得概率最高的類別是真正符合情境的類別,而概率比較低的類別就和情境不太搭了,這其實也是有一定 道理的,而且很巧妙地將情境信息的作用引入進了模型。

2. overly-specific noise

針對這個問題,作者提出了一種Hierarchcical Loss Normalization的損失函數,因為越細粒度的類別,他們所佔的比重應該是不一樣的,例如如果選擇了athlete這個標籤,那麼較粗的粒度肯定要選擇person,而不是location之類的,而傳統的loss function在優化時,就是將他們平等對待的,因此作者希望損失函數能夠更少的懲罰那麼相關聯的那些標籤,即

p^{}(y|m,c) = p(y|m, c) + etasum_{tinGamma}p(t|m,c), quad 	ag{3}

其中, Gamma 就是在類型路徑上屬於 y 的祖先節點,這樣對類型進行分類處理,這樣在最後的分類預測時就可以降低不同類別的雜訊的影響了。

這就是這篇文章的大體框架,主要是在雜訊處理上一些措施,感覺還是值得借鑒的

文章3

這篇文章也是針對第一篇文章進行的一些改進,主要在以下的幾個地方:

1. context不再是獨立處理

2. 針對context的attention,要考慮到和entity mention之間的對齊關係

3. 增加了文檔級別的context

4. 不再考慮人工特徵,並通過實驗證明人工特徵加進去對模型的提升並不大

模型

從模型圖裡可以看出來整個模型的框架,

1. entity encoder:相同的方法,首先embedding,然後進行進行平均,得到entity的表示

2. sentence-level context:就是entity所處的句子,將其通過一個L層Bi-LSTM,然後利用隱層狀態和entity表示之間的dot product計算attention,最後對所有的隱層狀態做加權,得到句子級別的context表示

3. document-level context:這部分相對簡單一些,做著先使用了一個預訓練好的模型(gensim.doc2vec)得到文檔的表示,然後通過一個多層感知機,得到文檔級別的context表示

4. 拼接起來,得到輸入的特徵表示,在此基礎上,將類別也進行embedding,最後通過一個邏輯回歸得到該entity輸入每個類別的概率,

5. 這點獨立寫出來,算是作者的一個亮點,作者不是使用一個統一的閾值來決定eneity mention屬於哪個類別,而是使用了 一種自適應的閾值,每個不同的類別都有一個屬於自己的閾值,該閾值是通過模型學出來的,然後預測出來的概率只有超過該閾值才能說屬於該類別。

分析

作者對結果進行了一些分析,得到以下兩點:

1. 人工構建的特徵作用並不大,可能是因為這些人工特徵大多都是關於語法或者主題的一些信息,而這些信息都通過注意力機制和文檔級別的context已經得到了,因此再補充這些信息的意義不大

2. 對類別進行層次化編碼的效果也很小,並做作者通過一些例子展示,說明entity mention是依賴情境的,屬於不同粗粒度的類別可能由於情境的原因而被標記為entity mention的類別,也就是說類別的層次化信息其實意義不太大,(對這點我持保留態度)

總結

從這三篇文章中基本上可以看到目前使用神經網路做NET的一些基本方法以及面對的一些問題,個人感覺可以從以下幾點考慮新的方法:

1. entity mention的表示

2. context的選擇及表示

3. label的表示,包括雜訊的處理,層次化信息的運用等,

目前基本上只想到這些,感覺從這個地方搞起來還是有很多可以做的東西,?(^?^●)?


推薦閱讀:
相关文章