![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3AjM0AjM1EjM3IjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- Title:《Translating Embeddings for Modeling Multi-relational Data》
- 比較經典的embedding算法,做個筆記一起學習。
文章目錄:
Abstract
- Introduction
- Translation-based model
- Algorithm 僞代碼
- Experiments
- Conclusion and future work
Abstract
- 第一句就說明:本文針對的問題 在低緯向量空間中,多關系資料的實體和關系的Embedding問題,換句話說就是将實體和關系用低緯向量表示。于是有了TransE,别看它訓練容易,處理大型資料也不在話下,又確定了實驗效果出色,作者還在FB15k和WN18上進行了link prediction,真的是“可鹽可甜“了。
Introduction
- 論文主要面向多關系資料(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
- 公式:
- 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′)]+
- 正确三元組的距離: 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
- 錯誤三元組的距離:同理
- 錯誤三元組生成:将正确三元組的頭或者尾替換成其他的(每次隻能選擇頭或者尾進行替換,不同時替換),得到錯誤的三元組。
- 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 僞代碼
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