---
# System prepended metadata

title: '[KGE] Node Pieces'
tags: [Knowledge Graph Embedding]

---

---
title: '[KGE] Node Pieces'
---

[TOC]

# Node Pieces

![imgur](https://imgur.com/Rux9Y0k.png)

## Introduction
[Node Pieces](https://arxiv.org/abs/2106.12144) 是為了減少模型參數量，同時針對「圖結構」進行特徵工程的一種方法。在 [OGB Link Prediction wikikg dataset](https://ogb.stanford.edu/docs/leader_linkprop/#ogbl-wikikg2) 上省下了**15倍的參數量**，同時提升了**20%的[MRR](https://en.wikipedia.org/wiki/Mean_reciprocal_rank)準卻度**，這種方法除了能使用在Knowledge Graph Embedding上，GNN也可以使用此方法來做特徵工程。傳統上我們習慣對節點進行 Shallow Embedding ，此篇論文提出了一個新的想法 ->「給定錨點(Anchor)和正負連接( Relations and Inverse Relations )來表達所有的點」，簡而言之，創造一個圖專用的 Tokenizer 。此外，你也可以參考這篇由共同作者撰寫的[Blog](https://towardsdatascience.com/nodepiece-tokenizing-knowledge-graphs-6dd2b91847aa)。

## Why we need Node Pieces

### 1. Reduce Parameters
KGE 的任務中，每加入一個新的 Entity 都會需要儲存對應的Embedding ，然而知識圖譜常常會有幾十、幾百萬的 Entity ，搭配動輒1000~2000的 Embedding dimension，帶來了很多參數負擔。
 
### 2. OOV( Out Of Vocabulary ) Problem
應用端中常常存在冷啟動的問題，舉例來說如果今天實作一推薦系統，我們也許能將曾經的客戶預測的很精準，然而我們卻沒有辦法給予新客戶一個 Entity。這樣的困境即是 OOV，然而 Node Pieces 卻能很好的解決這個問題，因為 Node Pieces 是由已存在圖譜裡的 Anchor和Relation來描述所有節點，因此新客戶進來時，我們不需要增加新的 Embedding，也就不存在OOV。


## Method

![imgur](https://imgur.com/utI1lpn.png)

### Anchor 
預先選擇M個點做為錨點，給定一點 G 之後用 [BFS](https://en.wikipedia.org/wiki/Breadth-first_search) 演算法鄰近 G 的 K 個錨點的 Embedding 來表示。不過只有這樣容易得到很多相同 Embedding 的點，因此我們必須增加一點特徵，論文在 Embedding 上加上 Anchor Distance ，這邊可以想像成一種 Relative Position Encoding 。


### Relation
除此之外論文中也使用 Relation, Inverse Relation 來增加特徵，所有 Relation Encoding 都是從 G 點向外，因此在使用 Node Pieces 之前，必須要先創造 Inverse Relation 。


### Encoder
將 Anchor 和 Relation 的值 Concat 然後放入 Encoder 裡，這邊的 Encoder 可以是 [MLP](https://en.wikipedia.org/wiki/Multilayer_perceptron) 或者 [Transformer](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model))，整個 Node Pieces 可以看成 Deep Embedding ，有別於傳統 Trans 系列的 look up table 屬於 Shallow Embedding，因此也能放在 Trans 系列乃至 GNN 做 Entity ( Node ) Embedding 。

###### tags: `Knowledge Graph Embedding`