「ご注文は何のアニメですか?」というアニメ推薦サービスをリリースしました
Twitterでツイートのデータを三ヶ月ぐらい貯めて、それをBigQueryで加工。
加工するフォーマットは協調フィルタリングにかけられるように
TwitterID,アニメ作品,Rate のCSVにする。
協調フィルタリング(SparkMLlib)はUserIDとProductIDがIntでないといけないので
TwitterIDは内部的にIntにシーケンシャルに付け直す。
Rateはその作品についてつぶやくと+1カウントし、ユーザーごとに数値がかけ離れるのを防ぐため10が限界値とする。(Botとかもいるので)
UserID,ProductId,RateのCSVができたらSparkMLlibにかけて
WEBサーバーにmysqlを入れて結果CSV(3000万レコード)を
CSVストレージエンジン▶InnoDB にマイグレーションする。
3000万レコードあるので普通にCSVのImportすると遅すぎて時間がかかるのでCSVエンジンにいれてからマイグレーションするのがよい。
あとはSinatraで簡単なWEBアプリを作り、受け取ったTwitterユーザーから機械学習で割り出したお薦めのアニメを推薦する。
ここまで作れるとエンジンはSparkでなく、AmazonMLやAzureMLでも代用は聞くのでかなり応用は効くはず。
次はオンライン更新できるようにしたいずら。
ソースコードはこちら
WEBサーバー
https://github.com/Project-ShangriLa/tippy
Sparkエンジン
https://github.com/AKB428/spark_collaborative_filtering_for_tweet_anime