More Related Content
Similar to Deep walk について
Similar to Deep walk について (20)
Deep walk について
- 1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
2019年05月16日
日本オラクル株式会社
クラウド・テクノロジーコンサルティング
玉越 敬典
1
PGX ユーザー勉強会 #12
Deep Walk について
- 2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 2
Agenda
1. Deep Walk とは
2. Deep Walk by PGX
3. Demo
- 3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 3
1. Deep Walk とは
- 4. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 4
Graph データ構造
• Graph の最も基本的なデータ構造(行列表現)は以下の2つ
隣接行列 隣接リスト
B
C
A F
D
E
B
C
A F
D
E
0 1 1 0 0 0
1 0 0 0 1 1
1 0 0 1 0 1
0 0 1 0 1 0
0 1 1 1 0 0
0 1 1 0 0 0
A B C D E F
A
B
C
D
E
F
A
B
C
D
E
F
B C
F
E F
C E
グラフの頂点と頂点の
隣接関係を表す正方行列
各頂点から接続している頂点を
数珠つなぎに保持するリスト構造
- 5. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 5
Graph データ構造の統計手法への適用
• Graph を一般的な統計アルゴリズムで処理しようとすると、
スパース性からうまくいかないことが多い…
クラスタリング異常検知
ノードの数が増えれば増えるほど
0 が増えてスパースになる
0 1 … 0
0 0 … 0
.. .. … …
0 0 … 0
グラフ 隣接行列
B
C
A F
D
E
- 6. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 6
潜在表現 (latent representation)
• そこで、Graph データの特徴 (ノードとノードのつながりの情報)をある程度保持したまま、
Graph 構造に関する潜在的な情報を抽出したデータ表現を使う
グラフ 隣接行列
B
C
A F
D
E
クラスタリング異常検知
潜在表現
0 1 … 0
0 0 … 0
.. .. … …
0 0 … 0
- 7. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 7
Deep Walk
• Deep Walk は 潜在表現を獲得するためのアルゴリズム
– Deep Learning を使って Graph の潜在的な情報を学習する
0 1 1 0
1 0 0 0
1 0 0 1
0 0 1 0
グラフ 隣接行列
B
C
A F
D
E
Deep Walk!!
Random Walk
Word2vec
(Skip-gram)
潜在表現
2つのステップ
A のベクトル
B のベクトル
….
各ノードごとに
同次元のベクトル表現が得られる
- 8. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 8
Deep Walk 詳細の前に – NLPとの関連①
• 自然言語処理 (NLP) 界隈でも Graph と同様の問題があった
– 文章、パラグラフ、単語といった情報を ①コンテキスト情報を踏まえた、②密なデータを表す表現の
方法がなかった
A. One-Hot ベクトル B. TF-IDF によるベクトル化
これ
は
ペン
です
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
これ
は
ペン
です
単語の出現頻度等を
重み付けして計算
0.2333
0.7685
0.2311
0.4562
語彙が増えれば増えるほど
スパースになる
コンテキスト情報を
考慮できていない
古典的な 単語ベクトル表現獲得手法
- 9. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 9
Deep Walk 詳細の前に – NLPとの関連②
• そこで word2vec という手法が生み出された
– 「各単語はその周辺の単語と何らかの関係性がある」と仮定して、ある単語が与えられたときの周辺の単語
を予測するというタスクから、単語の潜在表現ベクトルを獲得する方法
潜在表現
引用: Xin Rong. word2vec Parameter Learning Explained
https://arxiv.org/pdf/1411.2738.pdf
- 10. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 10
Deep Walk の発想とアルゴリズム
• 「ノードを適当に(ランダムに)たどっていけば、ノードの順序をもった集合ができる」
これは “文” とみなして、word2vec を適用できるのではないか?
B
C
A F
D
E
G
H
I J
2. word2vec
Random Walk
Word2vec
(Skip-gram)
Start
適当な ノードを出発起点として
ランダムにノードをたどる
辿ったノードの集合を順に
リストする
1. Random Walk
H I E B F[ ]
潜在表現
これを文とみなす
- 11. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 11
Deep Walk で何ができるか
• Graph の潜在表現 = 「各ノードのベクトル集合」なため、ノード間の関係を計算できる
Aさん 商品1
Bさん
Cさん
商品2
商品3
リコメンドエンジン
比較対象 類似度
Bさん 0.987665
Cさん 0.87721
Aさんとの類似度が高いユーザ
• Aさんと類似度が高い
ユーザを導出
• そのユーザが買っている商品
をリコメンド
クラスタリング
DeepWalk によって計算された各ノードの
ベクトルを Kmeans 等のクラスタリング
アルゴリズムにくわせて、Graph のクラスタを
算出
- 12. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 12
[参考] Deep Walk パフォーマンス
• 論文によると他の手法よりもパフォーマンスは高く、特にラベル付きデータがまばらである場合、
Deep Walk は競合する方法よりも最大10%高いF 1スコアになっている
(出典) Bryan Perozzi, Rami Al-Rfou, Steven Skiena. DeepWalk: Online Learning of Social
Representations
- 13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 13
2. Deep Walk by PGX
- 14. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 14
PGX での Deep Walk の利用
• PGX 3.2 から Deep Walk が利用可能に
– https://docs.oracle.com/cd/E56133_01/latest/tutorials/mllib/deepwalk.html
• 以下のようなフローで Deep Walk を利用する
Graph データ準備 モデル構築 モデル学習 モデル利用
- 15. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 15
PGX Deep Walk – 1. データの準備
• 通常の PGX の使用通りにまずは Graph データをロードして PgxGraph オブジェクトを
生成する
• そのあと、PgxGraph#undirect() で無向グラフ化する
PGX> G = session.readGraphWithProperties(“test.json”)
==> PgxGraph[name=sub-graph_13,N=4483,E=10000,
created=1557815262110]
# Deep Walk を適用するグラフは無向グラフである必要がある
PGX> uG = G.undirect()
- 16. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 16
PGX Deep Walk – 2. モデルの構築
• ハイパーパラメータを設定して DeepWalk モデルを構築
– 各種ハイパーパラメータの意味は 以下の JavaDoc で確認
PGX> model = analyst.deepWalkModelBuilder()
.setWindowSize(3)
.setWalksPerVertex(6)
.setWalkLength(4)
.build()
==> oracle.pgx.api.beta.mllib.DeepWalkModel@50027e64
https://docs.oracle.com/cd/E56133_01/latest/javadocs/oracle/pgx/api/beta/mllib/DeepWalkModelBuilder.html
- 17. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 17
PGX Deep Walk – 3. モデルの学習
• DeepWalkMode#fit(PgxGraph) で DeepWalk のモデルを学習させる
PGX> model.fit(uG)
# 学習後の損失を算出する (現在は 学習過程の損失は取得できない)
PGX> model.getLoss()
==> -1.1363721109080635E-6
# 学習後の 各ノードのベクトルは以下のように取得する
PGX> model.getTrainedVertexVectors()
==> oracle.pgx.api.beta.frames.internal.PgxFrameImpl@b2954e
- 18. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 18
PGX Deep Walk – 4. モデル使用
• 学習さ (せたモデルで特定ノードの類似性を測定できる
– DeepWalkMode#computeSimilars を使用
– 現在はノードIDを元にした類似性の算出 API しか用意されていない
# 第一引数で比較元のノードIDを指定
# 第二引数で上位何件を取得するかを指定
PGX> sim = model.computeSimilars(111, 3)
PGX> sim.print()
+--------------------------------+
| dstVertex | similarity |
+--------------------------------+
| 111 | 1.0000001192092896 |
| 112 | 0.9316596984863281 |
| 113 | 0.9065075516700745 |
+--------------------------------+
- 19. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 19
PGX Deep Walk – その他
• もちろんモデルの再利用を可能にするための API も備えている
– モデルの保存/モデルのロード
# モデルの保存
PGX> model.store("/tmp/dw.model")
==> null
# モデルのロード
PGX> model2 = analyst.loadDeepWalkModel("/tmp/dw.model")
==> oracle.pgx.api.beta.mllib.DeepWalkModel@ac91282
- 20. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 20
3. Demo
- 21. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 21
Demo 内容
• DBpedia の人物情報を使用して、各人物ノードの類似性をみる
- 22. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 22
まとめ
• DeepWalk は Graph データ構造を汎用的な統計手法に適用させるための潜在表現を
得るための手法
– Graph をランダムウォークして、得られたノード列を文章とみなして、word2vec モデルに適用させる
• PGX 3.2 から DeepWalk が使え、一連のフローを実行するための API が提供されている