Home » Programing » レコメンデーションエンジン「Cicindela」少し実践編

Check     このエントリーをはてなブックマークに追加

だいぶ前になるが、ライブドアのオープンソースレコメンデーションエンジン「Cicindela」の概要とインストールをしたが、今回はもう少し内容について、深くつっこんでみた。

インストールについては、以前の記事、

ライブドアのレコメンデーションエンジン「Cicindela」を試す – ueblog

を参考にしよう。

準備

まずは箱となる、テーブルを用意する。Cicindelaをインストールしたディレクトリ以下の「misc」ディレクトリにあるperlプログラムをたたく。

$ cd misc
$ perl create_init_sql.pl –db_name=sampledb | mysql  -u root

これで「sampledb」というインスタンスがmysql上に作成され、雛形となるテーブルが空の状態で作成される。

なお、異なる複数のデータをひとつのCicindelaで処理させることもできる。その場合は別インスタンスを作成し、後述するConfigの設定ファイルで「datasource」を変更することで可能だ。

仕組みおさらい

仕組みをかなり簡単におさらいすると、

  1. WebAPIによりデータ(ユーザID、アイテムID)をためる。
  2. バッチにより、上記データを集計してレコメンドデータを作成。(Filter,Recommender)
  3. WebAPIによりレコメンドデータを取得する。

というわけだが、2番の集計の仕方がもちろん肝となる。仕組みについては以前のセミナー資料がわかりやすい。

Cicindela PDF資料

8ページ目あたりが詳しい。

設定ファイル

まずやるべきことは、設定ファイルを理解するところからはじまる。

設定ファイルはインストールディレクトリの「lib/Cicindela/Config/_common.pm」にある。
[perl]
# 集計名。WebAPIからset=[セット名]として呼ばれる文字列となる。
‘simple_access_log’ => {
# DBの設定、集計セットごとに設定を変更できる。
datasource => [ 'dbi:mysql:sampledb;host=localhost', 'root', '' ],
# filterの指定
filters => [
[ ‘PicksExtractor’, { interval => ’20 year’ } ],
‘InverseUserFrequency’,
‘ItemSimilarities’,
],
# アイテムID、ユーザIDを文字列として扱う場合。
use_user_char_id => 1,
use_item_char_id => 1,
discard_user_id_char2int => ’1 year’,
discard_item_id_char2int => ’1 year’,
# recommenderの指定
recommender => ‘ItemSimilarities::LimitCategory’,
# 集計の間隔。下記の場合1時間に1度。
refresh_interval => 60 * 60 * 1,
},
[/perl]

この1ブロックが1集計セットとなる。

「filters」や「recommender」の部分を変更させることによって、同じ元データから違った集計のさせかたができる。

違う元データを扱いたいときは、準備で書いたように別インスタンスを作成して「datasource」を変更させたほうが対応しやすい。

設定については、Cicindelaのマニュアルを参照すること。(まだ未完成のようだが)

Examples – cicindela2 – 設定の例

FiltersとRecommenderの種類

あらかじめ何種類かのFiltersとRecommenderが用意されている。もちろん自作も可能。

Filters::

CommonTags
CopyPicks
CropPicks
InverseUserFrequency
ItemSimilarities
PicksExtractor
Ranking
RatingsConverter
RawSQL.pm
SlopeOneDiffs.pm
UserSimilarities

Recommender::

Cascaded
Hybrid
ItemSimilarities
Ranking
SlopeOneDiffs
UserSimilarities

サブクラスも含めると、かなりたくさん用意されている。

ソース中には説明があるものはあるが、マニュアルはまだないので完成に期待。

FilterChain – cicindela2

何を集計させるか

集計させる元データは、サイトの特性によって違うと思うが、主には、

  • アイテムへのアクセスログ
  • アイテムへのブックマークデータ、カートに入れたデータ
  • アイテムの購入ログ

などが利用できそう。

アイテムとユーザが結びつくデータなら何でも使えそう。

アイテムのカテゴライズとタグ付けもできるので、絞込みも可能。

Cicindelaではカテゴリーとタグの違いは、カテゴリーはアイテムを分類するだけだが、タグはアイテムとユーザを分類する違いがあるようだ。

まとめ

結局は何のデータをどう集計させて、どうみせるかというところは、自分なりにシナリオを考えないといけないので、そこが一番難しいところであり、面白い部分でもある。

先に紹介してPDFで、実際にライブドアのサービスで利用されている部分の紹介は、かなり参考になるでしょう。

この分野だけでも、会社が存在するくらいなので奥が深い・・・

Check     このエントリーをはてなブックマークに追加
タグ: ,