Triple2Vec のバックアップ差分(No.8)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#CONTENTS

**提案論文 [#Papers]
-[[Learning Triple Embeddings from Knowledge Graphs&BR;Fionda, V., & Pirrò, G. (2020). Learning Triple Embeddings from Knowledge Graphs. Proceedings of the AAAI Conference on Artificial Intelligence, 34(04), 3874-3881. https://doi.org/10.1609/aaai.v34i04.5800:https://ojs.aaai.org//index.php/AAAI/article/view/5800]]



**定義等 [#b5ac588f]
-知識グラフ:&Mathjax{G=(V_G,E_G,T_G)};
--&mathjax{V_G};:エンティティ(頂点)の集合
--&mathjax{E_G};:述語の集合
--&mathjax{T_G};:トリプルの集合
-&Mathjax{G=(V_G,E_G)};:無向グラフ (undirected graph)または有向グラフ (directed graph)
-&Mathjax{\mathcal{G}_L=(V_L,E_L)};:線グラフ (line graph)
--&Mathjax{G};のエッジを&Mathjax{\mathcal{G}_L};のノードにする
--&Mathjax{G};のエッジが共通のノードを持つとき、&Mathjax{\mathcal{G}_L};の2頂点は隣接する
--&Mathjax{G};が有向のとき&Mathjax{\mathcal{G}_L};も有向。
**既存Line Graph の問題点 [#f8c0cb4a]
知識グラフからの線グラフ構築の問題点
+意味が抜け落ちる
--主語と述語を共有するトリプルについて、述語がとがっても全く同じようなノードができることがある。
--主語と述語を共有するトリプルについて、述語が違っても全く同じようなノードができることがある。
+孤立ノードができる
--エンティティが主語と述語両方にならないと、(つまり、主語のみ、述語のみの状態だと)孤立グラフになる。

**Triple2Vecの手法 [#cd1b030e]
+Triple Line Graph の作成
+エッジの重みを計算する
+重み付き Triple Line Graph のランダムウォーク
+ Skip-gram を利用したエンベッディングを行う
** Triple Line Graph [#je5555ed]
- Triple Line Graph の動機
--KB上で距離2で接続されているノード同士ならば、そのエッジの方向性・意味に関わらず、変換後のグラフでも接続されるべきだ。
--トリプル間の関係を、述語に基づいて何かの形で保持することが望ましい。
-Triple Line Graphの定義
--&Mathjax{\mathcal{G}_L=(V_L,R_L,w)};
++ノードは&Mathjax{G};のトリプルに対応
++&Mathjax{\mathcal{G}_L};の2つのノード&Mathjax{s_1,p_1,o_1};と&Mathjax{s_2,p_2,o_2};は、&Mathjax{\{s_1,o_1\}\cap\{s_2,o_2\}\neq\emptyset};のとき接続
---つまり、主語同士・目的語同士もしくは主語・目的語間に同じものがあれば接続。
++関数&Mathjax{w};は値域&Mathjax{[0,1]};で、全てのエッジに重みづけをする。
-Triple Line Graphの特徴
--メリット
---知識グラフ上で連結していれば、 Triple Line Graph 上でも連結している。
--デメリット
---エッジ数が多くランダムウォークの計算に影響を与える

*** Triple Line Graph の重みづけ [#scb312f1]
-TF-ITF計算
--トリプル頻度(TF)
---&mathjax{TF(p_i,p_j)=\log(1+C_{i,j})};
ただし&mathjax{C_{i,j}};は、述語&mathjax{p_i,p_j};が同じ主語・目的語で接続される回数
--逆トリプル頻度 (ITF)
---&mathjax{ITF(p_j,E)=\log\frac{|E|}{|{p_i:C_{i,j}>0}|}};
--(symmetric) matrix
---&mathjax{C_M(i,j) = TF(p_i,p_j)\times ITF(p_j,E)};
--述語関連行列
---&mathjax{M_R(p_i,p_j)=Cosine(W_i,W_j)};
ただし&mathjax{W_i};は&mathjax{C_M};の&mathjax{p_i};の行
--トリプル間に関連する述語が多いほど重みが高い
--メリット
---トリプル間の関連性と意味の近さの両方をとらえることができる。


***ベクトル化の方法 [#tfe99274]
-&mathjax{p((e_{v_{i},e_{v_{i+1}}}) \in \mathcal{W})=\sigma(e^T_{v_i},e_{v_{}i+1})};
--&mathjax{\sigma};はソフトマックス関数
--
-ネガティブサンプリング
--&mathjax{p((e_{v_{i},e_{v_{i+1}}}) \notin \mathcal{W})=\sigma(-e^T_{v_i},e_{v_{i+1}})};
-&mathjax{\mathcal{O}(\theta)=\log(e^T_{v_i},e_{v_{i+1}})+\sum_{j=1}^k \mathbb{E}_{v_j}[\log\sigma(-e^T_{v_i},e_{v_{i+1}})]};
--&mathjax{\theta};全パラメータ
--&mathjax{k};ネガティブサンプリングの数
--並列非同期確率的勾配降下法を利用

**実験 [#ta629786]
***比較手法 [#v75afe26]
:[[metapath2vec]], [[node2vec]], [[DeepWalk]]の利用|エンティティをベクトルにする手法。
トリプル中の2つのエンティティベクトルの平均を利用。
:[[ConvE]], [[RotatE]]|[[pykg2vec]]の実装を利用
トリプル中の2つのエンティティベクトルと述語ベクトルの結合

***利用したKB [#za716c50]
-[[DBLP]]
-[[Foursquare]]
-[[Yago]]


***適用された問題 [#d1fb759a]
:トリプル分類|
:推薦機能|