AKB428は荒野を目指す

秋葉原で働くエンジニアなブログ

「ご注文は何のアニメですか?」というアニメ推薦サービスをリリースしました

f:id:rakuda00:20151216224556p:plain

http://tv-anime.biz/

 

Twitterでツイートのデータを三ヶ月ぐらい貯めて、それをBigQueryで加工。

加工するフォーマットは協調フィルタリングにかけられるように

TwitterID,アニメ作品,Rate のCSVにする。

協調フィルタリング(SparkMLlib)はUserIDとProductIDがIntでないといけないので

TwitterIDは内部的にIntにシーケンシャルに付け直す。

Rateはその作品についてつぶやくと+1カウントし、ユーザーごとに数値がかけ離れるのを防ぐため10が限界値とする。(Botとかもいるので)

 

UserID,ProductId,RateのCSVができたらSparkMLlibにかけて

結果をRDD->CSVに保存する。

 

WEBサーバーにmysqlを入れて結果CSV(3000万レコード)を

CSVストレージエンジン▶InnoDB にマイグレーションする。

3000万レコードあるので普通にCSVのImportすると遅すぎて時間がかかるのでCSVエンジンにいれてからマイグレーションするのがよい。

 

あとはSinatraで簡単なWEBアプリを作り、受け取ったTwitterユーザーから機械学習で割り出したお薦めのアニメを推薦する。

f:id:rakuda00:20151216225436p:plain

 

 

 

 

 

f:id:rakuda00:20151216225440p:plain

f:id:rakuda00:20151216225445p:plain

 

ここまで作れるとエンジンはSparkでなく、AmazonMLやAzureMLでも代用は聞くのでかなり応用は効くはず。

 次はオンライン更新できるようにしたいずら。

 

ソースコードはこちら

 

WEBサーバー

https://github.com/Project-ShangriLa/tippy

Sparkエンジン

https://github.com/AKB428/spark_collaborative_filtering_for_tweet_anime