Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Deep walk について

353 views

Published on

PGX ユーザ会#12

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Deep walk について

  1. 1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 2019年05月16日 日本オラクル株式会社 クラウド・テクノロジーコンサルティング 玉越 敬典 1 PGX ユーザー勉強会 #12 Deep Walk について
  2. 2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 2 Agenda 1. Deep Walk とは 2. Deep Walk by PGX 3. Demo
  3. 3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 3 1. Deep Walk とは
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 13 2. Deep Walk by PGX
  14. 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. 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. 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. 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. 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. 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. 20. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 20 3. Demo
  21. 21. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 21 Demo 内容 • DBpedia の人物情報を使用して、各人物ノードの類似性をみる
  22. 22. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 22 まとめ • DeepWalk は Graph データ構造を汎用的な統計手法に適用させるための潜在表現を 得るための手法 – Graph をランダムウォークして、得られたノード列を文章とみなして、word2vec モデルに適用させる • PGX 3.2 から DeepWalk が使え、一連のフローを実行するための API が提供されている

×