機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

24
秋葉原IT戦略研究所 野田純一

Transcript of 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Page 1: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

秋葉原IT戦略研究所

野田純一

Page 2: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

秋葉原IT戦略研究所のご紹介

形態アニメに関するデータ解析が主体の同人サークル 兼 ITコミュニティ

メンバー

現在11名

活動オープンソースカンファレンス出展、コミケC89出展、デブサミ等のイベントで発表

合計7回

Page 3: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

自己紹介

所属GMOインターネット

業務分野ビッグデータ、機械学習アドテク

Page 4: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

コミュニティコンセプト

オタク業界のIT化促進ビッグデータからアニメに関するトピックを解析する際に必要となる今期アニメ作品のマスターが取得できるAPIの開発。今までの手作業を自動化。

オタク産業のIT化は黒船企業に勝ちたい「僕(日本人)が一番アニメをうまく扱えるんだ!!」

IT界のトレンド技術のアニメへの適用ビッグデータ、機械学習、AIを使った解析

Page 5: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

目的:これのアニメ版が作りたい

Page 6: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

作ったシステムhttp://tv-anime.biz/

Page 7: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

ご注文は何のアニメですか?

Page 8: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

今回のシステム「tippy」

Page 9: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Anime APIの必要性について

Wikipediaやまとめサイトから今期のアニメのタイトル名、タイトル略称、ハッシュタグなどを取得

今期の人気アニメを解析、統計、レポート出力

5時間

Page 10: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Anime APIの必要性について

Anime API で今期のアニメのタイトル名、タイトル略称、ハッシュタグなどを取得

今期の人気アニメを解析、統計、レポート出力

10秒

Page 11: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

• HadoopのMapReduceとは別アプローチ(DAG)での並列分散集計処理を行う

• インメモリー処理

• Hadoopエコシステムの一部として扱われるがHadoopと直接的な関係はない

• APIを利用できる言語はScala, Java, Python

Sparkについて

Page 12: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

• 機械学習用のSparkライブラリ

• 協調フィルタリングやAssociation Ruleなどが簡単に使えるようになっている。

• Sparkクラスタを構築し実行することでビッグデータに対して機械学習演算を処理できるようになる。

Spark MLlibについて

Page 13: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

•TwitterのStreamingAPIで今期アニメ作品43作品に関するワードを拾ってくる。•とりあえずCSVに記録

•1ヶ月半で4G、1500万レコード程度

status.getId()

status.getUser().getScreenName()

status.getText()

status.getSource()

status.getRetweetCount()

status.getFavoriteCount()

status.getCreatedAt()

記録した要素

Twitterからデータを収集

Page 14: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

UserName Tweet

tanaka おそ松さん面白い

mika ガンダム面白い

tanaka おそ松最高

daken ガンダム面白い

mika ラブライブ見る

UserID Product Rate

1 1 2

2 2 1

2 3 1

3 2 1

• 協調フィルタリングに読み込ませるため右表のフォーマットに

BigQueryで加工する。(AmazonMLもAzureMLなどもこの形式)

• SparkMLlibがUserIDがIntでないといけないという制限があるためTwitterIDは内部的にシーケンスな番号を付ける。

データの加工

Page 15: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Spark MLlib code

Page 16: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Spark MLlib code

モデルを作成

Page 17: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Spark MLlib code

モデルを使って予測(predict)

Page 18: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Sparkクラスタで実行

./bin/spark-submit --master spark://managerhost:7077 --executor-memory 25G--conf spark.driver.memory=4Ganime_collaborative_filtering_assembly-1.0.jar /var/data/anime.csv

Page 19: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

Spark WEB UI

Page 20: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

80万Twitterユーザー x 43 (2015年冬期アニメ作品数)

3440万レコードが推薦データとしてMySQLに格納

されている

MLlibで処理した結果

UserID ProductID Rate

354796 242 1.8322849817902473

354796 243 -2.5666437672644378

354796 244 0.385125554296764

354796 245 0.9550722901486512

Page 21: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

実演

Page 22: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

実演 補足

Page 23: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

検証結果

• とらのあなは「うたわれるもの」を作っているアクアプラスと業務提携しているので発言数が多くなっている。▶それなりの正しい推薦であることが確認できた。

Page 24: 機械学習ライブラリ「Spark MLlib」で作る アニメレコメンドシステムver 1.1

4/9「IT x アニメ」で勉強会します

http://akibalab.connpass.com/event/28293/