Tweetだいぶ前になるが、ライブドアのオープンソースレコメンデーションエンジン「Cicindela」の概要とインストールをしたが、今回はもう少し内容について、深くつっこんでみた。ueblogを参考にしよう。準備まずは箱となる、テーブルを用意する。Cicindelaをインストールしたディレクトリ以下の「misc」ディレクトリにあるperlプログラムをたたく。rootこれで「sampledb」というインスタンスがmysql上に作成され、雛形となるテーブルが空の状態で作成される。異なる複数のデータをひとつのCicindelaで処理させることもできる。その場合は別インスタンスを作成し、後述するConfigの設定ファイルで「datasource」を変更することで可能だ。仕組みおさらい仕組みをかなり簡単におさらいすると、WebAPIによりデータ(ユーザID、アイテムID)をためる。バッチにより、上記データを集計してレコメンドデータを作成。(Filter,Recommender)WebAPIによりレコメンドデータを取得する。いうわけだが、2番の集計の仕方がもちろん肝となる。仕組みについては以前のセミナー資料がわかりやすい。PDF資料8ページ目あたりが詳しい。設定ファイルまずやるべきことは、設定ファイルを理解するところからはじまる。設定ファイルはインストールディレクトリの「lib/Cicindela/Config/_common.pm」にある。WebAPIからset=[セット名]として呼ばれる文字列となる。DBの設定、集計セットごとに設定を変更できる。アイテムID、ユーザIDを文字列として扱う場合。下記の場合1時間に1度。1,},[/perl]この1ブロックが1集計セットとなる。「filters」や「recommender」の部分を変更させることによって、同じ元データから違った集計のさせかたができる。違う元データを扱いたいときは、準備で書いたように別インスタンスを作成して「datasource」を変更させたほうが対応しやすい。設定については、Cicindelaのマニュアルを参照すること。設定の例FiltersとRecommenderの種類あらかじめ何種類かのFiltersとRecommenderが用意されている。Filters::CommonTagsCopyPicksCropPicksInverseUserFrequencyItemSimilaritiesPicksExtractorRankingRatingsConverterRawSQL.pmSlopeOneDiffs.pmUserSimilaritiesRecommender::CascadedHybridItemSimilaritiesRankingSlopeOneDiffsUserSimilaritiesサブクラスも含めると、かなりたくさん用意されている。ソース中には説明があるものはあるが、マニュアルはまだないので完成に期待。cicindela2何を集計させるか集計させる元データは、サイトの特性によって違うと思うが、主には、アイテムへのアクセスログアイテムへのブックマークデータ、カートに入れたデータアイテムの購入ログなどが利用できそう。アイテムとユーザが結びつくデータなら何でも使えそう。アイテムのカテゴライズとタグ付けもできるので、絞込みも可能。Cicindelaではカテゴリーとタグの違いは、カテゴリーはアイテムを分類するだけだが、タグはアイテムとユーザを分類する違いがあるようだ。まとめ結局は何のデータをどう集計させて、どうみせるかというところは、自分なりにシナリオを考えないといけないので、そこが一番難しいところであり、面白い部分でもある。先に紹介してPDFで、実際にライブドアのサービスで利用されている部分の紹介は、かなり参考になるでしょう。UedaWeb関連の会社でエンジニアをしています。最近はiOS,Androidの開発を中心に、その他サーバ周りもやってます。当ブログはインターネットテクノロジーを中心に、管理人の備忘録がわりに気づいたことを配信します。