SelfORE: Self-supervised Relational Feature Learning for Open Relation
導讀:
4月6號掛在arXiv上,要投哪個會不用我多說了8。
閱讀原因:
方向match,掛出來了總得引他。
Abstract
OpenRE是開放場景下的關係抽取,目前的工作主要是用一些啓發式的方法去訓練監督分類器,或者設定一些假設上使用無監督的方法。本文提出一種自監督的OpenRE,使用預訓練語言模型抽取弱監督,自監督的信號,用於自適應聚類,並且在自監督過程中增加上下文特徵用於關係分類,三個數據集上的實驗證明了SelfORE的有效性和魯棒性。
Introduction
第一段介紹了RE是什麼
第二段介紹了標註數據繁瑣,Distant Supervision的提出和作用(這段的意義應該是爲強調自監督的有效性做一個鋪墊)
第三段說明了OpenRE的作用,Yao 認爲OpenRE是完全無監督的,Simom在無監督條件下訓練了關係抽取表達式,但仍然需要預先抽取一定數量的關係。(這段的意義是描述了現有的一些OpenRE的問題,需要預先準備一些 prototype的relation坐scheme
第四段,引出了自己的論文:
爲了進一步減輕手工標註
獲取高質量的監督
提出一種自監督框架:
- 從數據中自己獲取監督
- 提升特徵表徵
- 進一步提高監督質量
以上三步是一個迭代式的過程。
提出的模型主要有三個模塊:
- Contextualized Relation Encoder
- Adaptive Clustering
- Relation Classification
簡單來說需要的模塊:
- 一個encoder(深度學習方法,是個人那都是要的)
- 一個聚類(OpenRE,是個人那還是要的)
- 關係分類器,不算特別新穎,具體還要往下看看是怎麼一個分類形式。
看到這裏感覺有點Neural Snowball + Open RE那味
如圖1,
首先1用BERT坐entity pair去encode句子和entity,生成feature representation
然後2通過representation進行聚類。聚類的結果會生成假標籤,
最後3讓關係分類器模塊去進行分類,輸入當然應該是BERT生成的特徵表徵了,標籤就是2中生成的假標籤。
分類器的誤差會幫助Encoder部分進行訓練,這樣會導致生成的representation更優秀,然後優化聚類結果,聚類結果重新再此再次生成假標籤,再優化。達到一個iterative的過程。
筆者:假不假標籤無所謂,能區分出他們之間的類別就行,畢竟OpenRE本身就沒有標籤的。但是聚類的結果作爲類別,那麼聚類的效果如何保證呢?聚類出來的結果完全按照語義空間中的相似度的話,那麼這樣的結果再作爲label,不會起到一個非常有效的監督吧,因爲本身就是通過BERT產生的特徵,然後利用特徵的距離度量出他們屬於哪些類別。個人感覺這樣沒有一個很強的有效的監督性,如果是我,應該會在聚類那個地方做一些處理,讓其對後續的結果產生影響,這樣纔能有效的起到訓練的作用。
目前還沒有發現讓人覺得特別合理的地方。下面的解釋應該會讓我眼前一亮。
Contribution:
- 開發SelfORE
- 使用預訓練語言模型去調整representation(其實講的還是SelfORE的內容
- 結果不錯
Proposed Model
BERT就不講了,自適應聚類這一塊,不像以往的傳統聚類會賦值一個hard label
(hard label就是多類別中,僅屬於某一個單類別
即使預測爲label1 概率0.7,label2概率0.3
按照hard label,則其屬於label1。
但是按照soft label,他應該是多個label單獨計算概率:
例如label1 概率0.7, label2 概率0.65 所以這個instance就屬於 label1也屬於label2概率超過0.5就賦值上去。)
自適應聚類使用軟賦值,鼓勵高概率的賦值並且與類別數量無關。
(筆者:我不太明白他說的軟賦值有沒有什麼特殊的地方,但是按照與類別數量無關這句話來看,應該是我上面解釋的soft label賦值的方法。
2.1 Encoder
這塊還是BERT,暫時略過不表,在token的標註上做了一些非常常規的處理
2.2 Adaptive Clustering 自適應聚類
在這一處講述的和之前是一樣的。
具體內容包括:
-
- 將representation映射爲一個新的表徵(具體代碼表現應該就是用一些全連接)
-
- 學習一堆的聚類中心(注意這裏是學習出來的)
(筆者:這個idea挺有道理的,之前我去思考這個的時候,是覺得這個中心爲其中句子向量的某種加權和,其實用個attn去做更好,因爲某些句子更標準之類的。)
- 學習一堆的聚類中心(注意這裏是學習出來的)
上述的表徵和聚類中心的向量維度相同,上述全連接的初始化是用是預訓練auto encoder的參數筆者:預訓練是自己去訓練的
AE的訓練方式是使用的最小化重建loss,AE學習的就是分佈,因此會對其映射產生一定的有效性。(但是如何保證AE的輸入就是滿足某些分佈呢,應該與bert連接起來吧?)
聚類的核心就是標準的K-means算法
使用自由度爲1的學生t分佈去進行相似度的度量。
具體公式爲:
其中爲聚類中心, 爲經過mapping的representation。
計算二者的距離平方,以其所爲參數通過學生t分佈。
筆者:公式下方的距離,難道不是與中心數量,聚類數量有關的嗎可以理解爲第個sample屬於第個聚類的概率。這是soft的
實驗中自由度設定爲1.
通過頻率normalize每個cluster作爲分佈的目標。
上述的兩個和分佈,可以用於計算自適應聚類的loss,也就是爲KL散度的loss
筆者:這邊看上去非常的nb,其實和2016年ICML Unsupervised Deep Embedding for Clustering Analysis 這篇文章中DEC的特點也是一樣的。值得注意的是代碼也是從那邊抄的,nb
然後將最大概率的cluster,賦值一個樣例爲這個cluster的假label。
2.3 關係分類
使用假label作爲關係分類,cross entropy,沒什麼新穎的
loss記爲
2.4 循環迭代優化
更新完了, 用更新好了的encoder,再去編碼relation,循環的優化。停止的條件是:假label和分類預測的差距小於10
筆者:這挺正常的,甚至我覺得這個條件可能還會導致過擬合,上一輪分類的結果導致的假標籤居然和此時的一模一樣,只要label數據隨便標錯一個順序,都會導致誤差巨大無比的
實驗
做了NYT+FB, T-REx SPO, T-REx DS數據集上的信息。