Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

DMM.com - DMMのビッグデータ分析のご紹介 ~Sparkによるリアルタイムレコメンド~

No description
by

DMM Tokyo-des

on 4 August 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of DMM.com - DMMのビッグデータ分析のご紹介 ~Sparkによるリアルタイムレコメンド~



なんか盛り上がってる、おもしろい
楽しそう
SparkStreamingとかは去年あそんだ。
しかも本気で遊んだ

Sparkとは?
GraphXとは
こんな感じのを考えた
受け取ったデータに
マイクロバッチ処理
テキストから単語抽出
ワードに関連する商品情報を取得
商品をクラスタリングして可視化
今回はデータソースにTwitterを使った
T -> SparkStreaming
Twitterの内容を5秒毎に処理
SparkStream-> Kuromoji
ソーシャルストリームからデータ取得
取得データから単語の抽出
Kuromojiでの単語抽出はあまり意味ない単語も含まれる
トレンドの抽出
形態素解析で抽出したワードでDMMの商品検索
-> ここでも辞書がんばった
-> 単語と商品の関連度をスコアリング
単語と商品の関連度をGraph化して、Graph上でクラスタを形成
クラスタ毎に商品、ワードを可視化
Graph処理
->あとはクラスタとユーザーのマッピングをしてレコメンド!
-> 諸事情あってクラスタは御見せできないので・・・
レコメンド
やってみて出来た事・ダメだった事 1
ラオウとトキも6個消しで3.75倍って考えると
データソースの多様化
-> どうやって沢山データを集めるか?

解析結果 => CCさくら,どれみ,犬夜叉,ヒカルの碁,ガンダム,ハルヒ,ローゼンメイデン,シャナ,ギアス,らきすた,とある,化物語,イカ娘,まどマギ,ニャル子
取得データから単語の抽出
ユーザー辞書を使う事でほぼアニメタイトルの取得が可能になった
どれみ,らきすた,とある,まどマギ,ニャル子など略称も抽出可能になった => ガンダム種(ガンダムSEED)は無理だった・・・
結果
kuromojiを使ってtweetの内容から単語を抽出
-> 普通に作ったら、全然意味ある単語抽出できなかった
-> ユーザー辞書を作った
-> 不要な単語は落としたい
-> ついでにDMMに関連度の高い単語だけ抽出したい
-> SVMでフィルタリング
スコアリングについて
スコアリング結果
ラオウ,トキ,消し,
くない
生tweet
解析結果
悪くない
=> たぶんこれのこと
=> 文脈を全然考慮してくれない
Tweet -> 単語抽出 -> スコアリング ->
教師データ作成 -> フィルタ作成
フィルタの作成
0 -> DMMに関係ないtweet
1 -> DMMに関係ありそうなtweet
教師データの作成は
手作業

label index:score [index:score]
約1000件程仕分た。
sample data
0 10:3.405879 11:0.017378246
1 1090:12.566508 1091:3.7658813 1092:5.5017815 1093:0.017378246
すごく大変だった...
やってみて出来た事・ダメだった事 2
⇒それでもゴミが多少乗ってしまう
⇒教師データの作成方法
手作業で教師データ作成
効率が悪い上、途中で心が折れそうだった。
Spark ハマりどころ
Map#filterKeys and Map#mapValues not serializable
Scala 2.11 では修正されているが、Spark 1.1のScalaは2.10なので、SparkContext中に Map#filerKeys, Map#mapValuesは使えない
地味に面倒・・・
Spark ハマりどころ
Output Operations on DStreams
DStreamのOutput Operationは非常に限られる
print
saveAsTextFiles
saveAsObjectFiles
saveAsHadoopFiles
foreachRDD
上記以外のメソッド内で、副作用のあるコードは実行できない
例えば、map functionの中でprintlnなどを実行しても、コンソール出力は表示されない
デバッグしづらい・・
Spark ハマりどころ
DStreamとRDD
DStreamは、時間的に連続したRDDの列のようなもの
このRDDを分割したり、変形したりすることは可能だが、全く新しいRDDをStreamContextの中で生成することは難しい
GraphXのような、Vertex用のRDDとEdge用のRDDで2種類の異なるRDDを扱うことが難しい
今回は、Edge用のRDDのみを用いてGraphXを使用した。
Spark ハマりどころ
GraphX Pregel
Edge単位でメッセージの送信を行い、メッセージを受信したVertexの状態を更新していく
Edgeの状態を更新することはできない?
ニューラルネットワークのような、Edgeの重みを学習していくようなアルゴリズムは難しそう
とあるツイートの解析結果(UserDict)
生tweet
CCさくらから15年 どれみから14年 犬夜叉から13年 ヒカルの碁から12年 ガンダム種から11年 ハルヒから10年 ローゼンメイデンから9年 シャナから8年 ギアスから7年 らきすたから6年 とあるから5年 化物語から4年 イカ娘から3年 まどマギから2年 ニャル子から1年
CCさくらから15年 どれみから14年 犬夜叉から13年 ヒカルの碁から12年 ガンダム種から11年 ハルヒから10年 ローゼンメイデンから9年 シャナから8年 ギアスから7年 らきすたから6年 とあるから5年 化物語から4年 イカ娘から3年 まどマギから2年 ニャル子から1年,
[CCさくら,どれみ,犬夜叉,ヒカルの碁,ガンダム,ハルヒ,ローゼンメイデン,シャナ,ギアス,らきすた,とある,化物語,イカ娘,まどマギ,ニャル子],
[0,2.1460426,6.2406964,8.911885,7.173064,3.8099463,14.895457,3.7040513,2.4836164,0.010106178,2.8307076,2.8487782,27.086662,0.007196478,6.5375576]
[スコアリング]
[辞書解析],
生tweet,
CTO室とは?
新しい技術の検証や研究開発をしています。
仕事にどういうふうにつなげていっているかのご紹介をします。
大規模データを、リアルタイムに分析!
sparkを選んだ理由
データのリアルタイム性
-> Hadoopでは遅い
リアルタイム分析に特化。
取得したデータソースを
そのまま分析可能。
graphXを選んだ理由
mahout
-> おっそい、おっもい、spark対応してねぇ
Spark上で動作するgraphX,MLlibのどちらかが候補。
時間無かったので慣れてるgraphX採用。
HadoopにおけるSparkの位置
Sparkの詳細
SparkStreaming?
SparkStreamingはストリームデータをリアルタイムに処理するためのSparkCoreの拡張

今まで、scalaとjavaのみサポートしてたけど、Spark1.2.0からpythonを一部サポートし始めた。
※ただ、PythonでSparkStreamingを使う時はDocumentを確認しながらじゃ無いとscalaである関数がpythonでは無かったりするよ!
SparkStreamingとは?
大きいデータストリームを
リアルタイムに処理したいとき
・ウェブサイトのモニタリング
・不正検知
・広告のマネタイゼーション
どんな所で使えるだろうか?
SparkStreamingとは?
データを小さく分割してマイクロバッチ処理
SparkStreamingの処理方法
商品検索
Graph処理結果の保存
-> GraphDB 良さそう -> Neo4J
-> kafka
いい意味で、なんでも、あり。
並列グラフ処理のためのSpark API
RDDを拡張したResilient Distributed Property Graph
基本的なグラフ操作(サブグラフの作成、グラフの結合など)や、Pregelに似たAPIを提供
GraphXとは
グラフデータの大規模化
並列グラフ処理の重要性
Webグラフ
ソーシャルネットワーク
グラフを並列に分散できなければ、スケーラブルな処理は不可能
GraphXとは
グラフ処理に必要なイテレーションに向いていない
ノード間でメッセージをやりとりできない
ネットワーク転送がボトルネックとなる
MapReduceではダメ?
GraphXとは
Pregel
他の分散処理は?
バルク同期並列 (BSP) モデルのグラフ特化版
Apache Giraphが実装
GraphLab
グラフベースの分散コンピューティングフレームワーク
C++で実装されており、非常に高速
GraphXとは
グラフ処理と他の処理を同一システム上に統合
GraphXのデータ構造はRDDを拡張したものであり、RDDのもつAPIをそのまま使用できる
GraphXの目的
DMMに関連度の高いワードのみに絞り込む
つぶやきをStreaming
表記揺れを修正
分類・特徴抽出
関連性を作成
Sparkとは?
並列グラフ処理に特化したデータ構造やアルゴリズム
効率的な実行が可能となった
しかし
グラフ専用のデータ構造・アルゴリズム
グラフ処理の周辺プロセスが複雑化
グラフの作成やアウトプット
機械学習や統計解析
可視化
など
データを毎回変換したり、二重管理したりする必要も出てきた
https://spark.apache.org/docs/latest/graphx-programming-guide.html
Full transcript