天天看點

(2020)TransE論文筆記

(2020)TransE論文筆記
  • Title:《Translating Embeddings for Modeling Multi-relational Data》
    • 比較經典的embedding算法,做個筆記一起學習。

文章目錄:

Abstract

  1. Introduction
  2. Translation-based model
  3. Algorithm 僞代碼
  4. Experiments
  5. Conclusion and future work

Abstract

  • 第一句就說明:本文針對的問題 在低緯向量空間中,多關系資料的實體和關系的Embedding問題,換句話說就是将實體和關系用低緯向量表示。于是有了TransE,别看它訓練容易,處理大型資料也不在話下,又確定了實驗效果出色,作者還在FB15k和WN18上進行了link prediction,真的是“可鹽可甜“了。

Introduction

(2020)TransE論文筆記
  • 論文主要面向多關系資料(wordnet,freebase)
    (2020)TransE論文筆記
  • 提到很多年前的模型,比如基于向量分解model,矩陣分解model;然後還有最近的模型,比如貝葉斯聚類model,基于能量的模型model,這些模型表面上是提高了模型的表示能力,實際上一個能打的都沒有,都是以提高模型複雜度和加重計算效率為代價的,還容易出現過拟合和拟合不足。既然這樣作者提到,還不如用簡單的線性model,效果也挺好!是以作者最後提到合适的模型要在準确性和擴充性之間做trade-off。--------TransE model 呼之欲出
    (2020)TransE論文筆記
  • 這句話個人了解:TransE整體是Translation distance model(在許多綜述中都是這麼說的),這裡提到它的實體的embedding是基于能量模型的。
    (2020)TransE論文筆記
  • 提出了重要的思想:如果三元組(h, l, t)成立,則頭實體embedding和關系embedding相加約等于尾實體的embedding。
    • 即: h+l ≈ t

Translation-based model

(2020)TransE論文筆記
  • 公式:
    1. loss function: L = ∑ ( h , ℓ , t ) ∈ S ( h ′ , ℓ , t ′ ) ∈ S ( h , ℓ , t ) ′ [ γ + d ( h + ℓ , t ) − d ( h ′ + ℓ , t ′ ) ] + \mathcal{L}=\sum_{(h, \ell, t) \in S\left(h^{\prime}, \ell, t^{\prime}\right) \in S_{(h, \ell, t)}^{\prime}}\left[\gamma+d(\boldsymbol{h}+\ell, \boldsymbol{t})-d\left(\boldsymbol{h}^{\prime}+\ell, \boldsymbol{t}^{\prime}\right)\right]_{+} L=∑(h,ℓ,t)∈S(h′,ℓ,t′)∈S(h,ℓ,t)′​​[γ+d(h+ℓ,t)−d(h′+ℓ,t′)]+​
    2. 正确三元組的距離: d ( h , l , t ) = ∥ h + l − t ∥ 1 / 2 2 d(h, l, t)=\|\mathbf{h}+\mathbf{l}-\mathbf{t}\|_{1/2}^{2} d(h,l,t)=∥h+l−t∥1/22​
    3. 錯誤三元組的距離:同理
  • 錯誤三元組生成:将正确三元組的頭或者尾替換成其他的(每次隻能選擇頭或者尾進行替換,不同時替換),得到錯誤的三元組。
    • S ( h , ℓ , t ) ′ S_{(h, \ell, t)}^{\prime} S(h,ℓ,t)′​ : 錯誤三元組
    • ( h ′ , ℓ , t ) \left(h^{\prime}, \ell, t\right) (h′,ℓ,t):替換了頭的三元組
    • ( h , ℓ , t ′ ) \left(h, \ell, t^{\prime}\right) (h,ℓ,t′):替換了尾的三元組

Algorithm 僞代碼

(2020)TransE論文筆記
algorithm步驟
input: 設定初始的三元組集S,正負樣本之間的距離 γ \gamma γ,embedding緯度k
1.對每個關系指派,并做歸一化處理
2.同理,對每個實體指派,并作歸一化處理
3.設定從整個S集合抽取子集的次數,分批進行處理,每一批為 S b a t c h S_{b a t c h} Sbatch​
4.初始化所有三元組,一開始 T b a t c h T_{b a t c h} Tbatch​是空的
5.對每批 S b a t c h S_{b a t c h} Sbatch​做疊代,每個 ( h , ℓ , t ) (h, \ell, t) (h,ℓ,t),根據前面提到,替換頭 ( h ′ , ℓ , t ) \left(h^{\prime}, \ell, t\right) (h′,ℓ,t)或者替換尾 ( h , ℓ , t ′ ) \left(h, \ell, t^{\prime}\right) (h,ℓ,t′) ,得到錯誤三元組,将正确的和錯誤的三元組 { ( ( h , ℓ , t ) , ( h ′ , ℓ , t ′ ) ) } \left\{\left((h, \ell, t),\left(h^{\prime}, \ell, t^{\prime}\right)\right)\right\} {((h,ℓ,t),(h′,ℓ,t′))} 加到一開始空的 T b a t c h T_{b a t c h} Tbatch​中。
第5步,需要注意:實際代碼在替換頭尾時,需要先做一個deep copy,不然替換了錯誤三元組,正确三元組就沒了。
6.利用SGD更新損失函數(這步也有很多學習的地方)

Experiments

名額說明
FB15K 14951個entity,1345個relation,592213個三元組
WN18 40943個entity,18個relation,151442個三元組
FB1M 25000個relation,1千7百萬個三元組
raw 在替換錯誤三元組中,會出現替換完對的情況。 raw是不處理這種情況下的結果
filt filt就是去掉替換完後仍然正确的三元組
[email protected] 每個給定的(h,l,t),對原來(h,l,t)和替換後(h’,l,t’)求得分,再從小到大排序,排在前10的比例
  • 論文實驗結果:
    (2020)TransE論文筆記
  • 用openke架構跑FB15k的實驗結果(k=50,epoch=1000,學習率0.01)
    (2020)TransE論文筆記

Conclusion and future work

  • TransE的不足:在處理複雜關系(1-N,N-1,N-N)時,性能顯著下降,比較适合處理1-1 的關系。

    為了滿足複雜的關系,才有了後面的好多好多Trans**…

  • 需要論文、資料或者代碼(自己下不下來),可以留言郵箱,我會發的哈

參考學習:

  • SGD更新
  • http://nathanliuyolo.com/2017/12/09/TransE論文知識總結/
  • 代碼推薦:
    • https://github.com/wuxiyu/transE
    • 有pytorch版也有tensorflow版:https://github.com/thunlp/OpenKE

繼續閱讀