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.

Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

2,590 views

Published on

研究発表で検証用に開発したSpark Streaming+Spark GraphXによるレコメンドシステムの発表資料です。ソースコードの詳細は資料のgithubのリンクを参照ください。

Published in: Engineering
  • Be the first to comment

Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

  1. 1. ‹#› ! Spark Streaming & Spark GraphX を使用したTwitter解析による レコメンドサービス例 GMOインターネット株式会社 次世代システム研究室 野田純一 2015.6.25
  2. 2. ‹#› Overview 1.自己紹介 2.研究目的 3.検証サービス説明 4.Spark Streamingを使用したオンラインTwitter解析によるレコメンドシステム 「Mikasa」-三 笠 5.Sparkについて 6.Spark Streamingについて 7.Spark Streaming + Spark GraphXを使用したTwitter解析とレコメンドシステム 「Ikazuchi」- 雷 8.Spark GraphXについて 9.参考文献紹介 10.まとめ
  3. 3. ‹#› 1. 自己紹介 野田純一 ■結構前 Java2EEによる業務オペレーションシステム ■ちょっと前 Perl/Rubyでソーシャルゲーム フレームワー ク開発 ■最近 Hadoopでアドテク ! Github: https://github.com/AKB428 Twitter: @n428dev Qiita: http://qiita.com/AKB428 Hatena: http://akb428.hatenablog.com/ 本部: http://akibalab.info/ Junichi Noda Larry Wall
  4. 4. ‹#›
  5. 5. ‹#› 2. 研究目的 • ストリーミング処理でTwitterオンライン解析がしたい ▶Spark Streaming • Twitterのソーシャル・ネットワークグラフを解析した い▶Spark GraphX • SparkをScalaで書いてScalaの知見をためる。 • Sparkを利用したサービスの事例が少ないため実際に 検証用のマイクロ サービスを設計、実装、運用を行い リファレンス的なサービスを作って業界に還元する。
  6. 6. ‹#› 3. 検証サービス説明
  7. 7. ‹#›
  8. 8. ‹#› 4. Spark Streamingを使用したオンライン Twitter解析によるレコメンドシステム 「Mikasa」-三笠 ! ! https://github.com/AKB428/mikasa_ol https://github.com/AKB428/mikasa_rs !
  9. 9. ‹#›
  10. 10. ‹#› 動画デモ ! ! ! ! ! ! ! ! http://youtu.be/o6xq_RdNv6s これがこのプレゼンを聞くと作れるようになります。
  11. 11. ‹#›
  12. 12. ‹#›
  13. 13. ‹#› • Twitterストリームからデータを取得する。 • Twitter Streaming APIを使う。 • 400の検索キーワードが指定可能。 • Spark Stremingでリアルタイム集計を行う。
  14. 14. ‹#› ! • 日本語文章を単語にわけて分解して集計 • 日本語を分解するため形態素解析ライブラリ kuromojiを使う。 • アニメ作品など標準辞書にない単語はユーザー辞 書(CSV)を用意。
  15. 15. ‹#› 形態素解析ライブラリの必要性について
  16. 16. ‹#› ユーザー辞書の必要性について
  17. 17. ‹#› Spark Streamingによるウィンドウ集計の活用 Mikasaは直近5分、直近60分のデータ集計を毎 分行っている。(合計60*2=120回) 少ないソースコードで、ウィンドウ集計が可能。
  18. 18. ‹#› • ソースコード • https://github.com/AKB428/mikasa_ol/blob/ master/src/main/scala/mikasa.scala
  19. 19. ‹#›
  20. 20. ‹#› 画面デモ(直近5分を毎分集計) (F1)2015年2期 TVアニメ http://tv-anime.xyz/5/ (F1)ラブライブ http://tv-anime.biz/5/ (F2)ラブライブ http://lovelive-net.com/5/ (F2)秋葉原 http://akiba-net.com/5/ (F2)関東TV番組 http://telev.net/5/ F1=ユーザー辞書に登録してある単語のみ集計 F2=ユーザー辞書外の単語も集計
  21. 21. ‹#› 画面デモ(直近60分を毎分集計) (F1)2015年2期 TVアニメ http://tv-anime.xyz/60/ (F1)ラブライブ http://tv-anime.biz/60/ (F2)ラブライブ http://lovelive-net.com/60/ (F2)秋葉原 http://akiba-net.com/60/ (F2)関東TV番組 http://telev.net/60/ F1=ユーザー辞書に登録してある単語のみ集計 F2=ユーザー辞書外の単語も集計
  22. 22. ‹#› 画面デモ 過去の履歴キャプチャ
  23. 23. ‹#› デモ:リコメンドTwitterボット https://twitter.com/Akihabaara_itso https://twitter.com/AuctionMadoka !
  24. 24. ‹#› サーバーデモ 動作中のサーバーのコンソールを公開
  25. 25. ‹#› ユーザー体験デモ(直近5分集計)携帯でアクセス! (F1)2015年2期 TVアニメ http://tv-anime.xyz/5/ (F1)ラブライブ http://tv-anime.biz/5/ (F2)ラブライブ http://lovelive-net.com/5/ (F2)秋葉原 http://akiba-net.com/5/ (F2)関東TV番組 http://telev.net/5/ F1=ユーザー辞書に登録してある単語のみ集計 F2=ユーザー辞書外の単語も集計
  26. 26. ‹#› ユーザー体験デモ(直近60分集計)携帯でアクセス (F1)2015年2期 TVアニメ http://tv-anime.xyz/60/ (F1)ラブライブ http://tv-anime.biz/60/ (F2)ラブライブ http://lovelive-net.com/60/ (F2)秋葉原 http://akiba-net.com/60/ (F2)関東TV番組 http://telev.net/60/ F1=ユーザー辞書に登録してある単語のみ集計 F2=ユーザー辞書外の単語も集計
  27. 27. ‹#› • Mikasa Twitter のデータ収集解析の2つのアプ ローチについて • ①Twitter Filter + ユーザー辞書のみの単語で絞る • 1のメリット▶集計しやすい、後続の処理も設計し やすい。 • 1のデメリット▶未知の単語を拾えない、ユーザー 辞書にひもづく別のワードを拾えない • 結論:ある程度、解析対象のドメインが固定されて いるものにはこのアプローチは有効
  28. 28. ‹#› • ② Twitter Filter + ユーザー辞書を使いつつ全ての単語を集計 • メリット▶ 未知のワードが拾える、リアルなネットワーク 解析ができる。 • デメリット▶ ジャンクワードが多く出現するのでデータクレ ンジングの作業にコストがかかる。 • 結論:解析対象が不明なドメインの場合、まずこのアプロー チで回す。計測対象のネットワークが変動しやすいドメインの 場合はこのアプローチが有効。ある程度アプローチ2で回し てアプローチ1に切り替える、もしくはアプローチ1を追加 した二段のサービスに設計する。
  29. 29. ‹#› Mikasaは申請ConoHaと お名前.comのドメインで動いています。
  30. 30. ‹#› 4. Spark Streaming ∼ソースコード補足 • TwitterUtilは実体はJavaのTwitterライブラリで あるtwitter4j • Twitter解析にはTwitterAPI特有のAPIレートリ ミット、単一IPによる高負荷時のアクセス制 限があるので注意 • Twitter開発者アカウントには電話番号が必須 になったので気軽に開発はできなくなりつつ ある。
  31. 31. ‹#› 5. Sparkについて ! ! ! ! ! • HadoopのMapReduceとは別アプローチ(DAG)での並列分散集計処理を行う • インメモリー処理 • Hadoopエコシステムの一部として扱われるがHadoopと直接的な関係はない • 2015年6月11日に 1.4.0 がリリース。https://spark.apache.org/releases/spark-release-1-4-0.html • 1.4.0でSparkRが追加(R言語でSparkを利用できる) • APIを利用できる言語はScala, Java, Python SparkR
  32. 32. ‹#› 5. Sparkについて ∼Spark処理でのDAG
  33. 33. ‹#› 5. Sparkについて∼最近の情勢 • 2015年6月15日 IBMが開発者と研究者を3500人Spark関連プロ ジェクトに投入 http://japan.zdnet.com/article/35065964/ • 2015年 6月15∼17日 Spark summit 2015 開催 (サンフランシスコ) • NTTデータが定期的に勉強会を実施 • 国内のサービス実例は少ない • 2大Hadoopディストリビューション CDHとHDPにはSparkが搭 載 • Spark1.4からはUIでモニタリングも行えるようになった。 http://qiita.com/AKB428/items/71900eecdf2350e1e45f
  34. 34. ‹#› 6. Spark Streaming について ! ! ! ! ! • Sparkサブシステムの一つでファイルからでなくリアルタイ ムに流れてくるストリームソースに対しての集計を対象とし ている。 • 直近1時間のツイート数を毎分集計する、直近3時間でアクセ スが多いIPを集計する・・などのウィンドウ集計が可能。
  35. 35. ‹#› 6. Spark Streaming ∼データソースについて ! ! ! ! ! ! その他、ssc.socketTextStream(" localhost", 7777) とするとローカルポートをソースにできるのでサーバーのログを流 し込んでリアルタイムにエラー、クラックIPの集計などが可能。
  36. 36. ‹#› Mikasaインストールについて インストールマニュアル https://gist.github.com/AKB428/c30bc6a979e05fa3a022 • TwitterAPIとAmazonAPIのアカウントがあれば1時間でセット アップ完了。 • AmazonAPIはリコメンドしない場合は不要。 • TwitterAPIのアカウント取得も10分程度で可能。 Mikasa OL https://github.com/AKB428/mikasa_ol Mikasa RS https://github.com/AKB428/mikasa_rs
  37. 37. ‹#› 8. Spark Streaming + Spark GraphXを使 用したTwitter解析とレコメンドシステム 「Ikazuchi」-雷 ! https://github.com/AKB428/ikazuchi_ol https://github.com/AKB428/ikazuchi_rs
  38. 38. ‹#›
  39. 39. ‹#›
  40. 40. ‹#› ロジックを単純化するため ACOOUNT:単語を”:”で連結したものをカウントしていく。 @akb428:ラブライブ,@akb428:アイマス,@odaken:俺物語
  41. 41. ‹#›
  42. 42. ‹#› • Kafkaをソースとして受け取りストリーム処理 • 受け取ったものを順次GraphXに渡していく
  43. 43. ‹#› 関連商品の2階層目までを取得
  44. 44. ‹#› グラフ解析の適用範囲について • 元々はTwitterのソーシャルグラフを解析する想定 でした。 • しかしTwitterのソーシャルグラフをAPIで取得す るのは困難と判明。 • あるアカウントのフォロワーを取得するAPIは1 callにつき5000人まで取得可能だが、そのAPIは 15分に15回しか実行できない。 • 今回は商品グラフデータをダミーで用意して実施。
  45. 45. ‹#› 8.Ikazuchi 実行中コンソール デモ
  46. 46. ‹#› Ikazuchi セットアップ https://github.com/AKB428/ikazuchi_ol ! https://github.com/AKB428/ikazuchi_rs ! • 必要なサーバー、ソフトウェアはMikasaと同じ • 商品グラフデータはAmazonAPIなどオープン系 のプロダクトAPIを使い「あなたにお勧め」商品 を紐付けるか、自社のユーザー購買履歴から構築。
  47. 47. ‹#› 8. Spark GraphXについて • Sparkでグラフデータを解析するサブシステム • グラフデータを解析できるがコードは直感的ではない • またあまり開発も盛り上がっておらず、Spark1.4では唯 一更新がないサブシステム https://spark.apache.org/releases/spark-release-1-4-0.html • Spark Packageにアドオンが唯一ない http://spark-packages.org/ ・オライリーの「Lerning Spark」にもサブシステムで唯 一解説がない。
  48. 48. ‹#› 8. Spark GraphXについて グラフを自前で処理するコードは直感的ではないが実装 されているアルゴリズム(例えばページランクアルゴリ ズム)は使用しやすく数行で利用できる。 http://qiita.com/AKB428/items/bf1cd05d6cf3e23986d9
  49. 49. ‹#› val graph: Graph[Int, Int] = GraphLoader.edgeListFile(sc, args(0)).cache() val ranks = graph.pageRank(0.0001).vertices val users = sc.textFile(args(1)).map { line => val fields = line.split(",") (fields(0).toLong, fields(1)) } val ranksByUsername = users.join(ranks).map { case (id, (username, rank)) => (username, rank) } println(ranksByUsername.collect().mkString("n"))
  50. 50. ‹#› 8. Spark GraphXについて GpaphXが需要がない理由は以下が考えられる • RDBからグラフデータ処理への頭の変換のコスト • そもそもグラフデータを持っている企業が少ない • グラフデータをオープンで公開してる企業が少ない • 現実の問題に適用しにくい、RDB・表概念で事たりて いる。 • GraphXが活性化するにはページランクアルゴリズム並 に簡単に使えるライブラリの充実が不可欠。 !
  51. 51. ‹#› • 9. 参考文献紹介-1 ! ! ! ! 「Scala逆引きレシピ」 • 他言語経験者でScalaが初心者の方にお奨め、情 報も新しく、PlayフレームワークやSBTの説明も 豊富。
  52. 52. ‹#› • 9. 参考文献紹介-2 ! ! ! ! 「Learning Spark」 • Sparkのコーディングはこれを読めば理解可能。 • 英語初心者でもかなり読みやすい本なのでお奨 め。今年日本語化されるらしい。
  53. 53. ‹#› • 10. まとめ • Twitterストリームのリアルタイムな集計にSpark Streamingは最適だった。(SQLだとデータを一度DB に格納し日付系の長いSQLを打つ必要がある。) • 日本語データを解析するためには形態素解析ライブラ リの使い方の把握、ユーザー辞書のチューニング、デー タクレンジングが重要で、ある程度は時間がかかる。 • Spark GpaphXは対象となるグラフデータを持ってい ないとグラフデータの構築から準備するコストが発生。
  54. 54. ‹#› 研究に2週間の時間を頂きました。 チームの皆様、ご協力本当に ありがとうございました。 素晴らしい試みなので続けていき たいと思います。
  55. 55. ‹#› ご清聴ありがとうございました

×