My favorites | Sign in
Project Logo
          
Search
for
Updated Dec 26, 2008 by tsukue
Labels: Phase-Implementation
FilterChain  
心臓部である FilterChain まわりの構造 / about FilterChain, the central architecture [not finished]

JP

基本

Cicindelaが受け取るデータのうち,もっとも基本になるのは以下の二つのうちの いずれか一方

Id はすべて整数値。従って,cicindela とそれを利用するアプリケーションの間では基本的にidだけがやりとりされるため,シンプルでかつ汎用性が高い。

オプションとして,整数以外のユーザid/アイテムidも扱うことができる。この場合は、user_id_char2int, item_id_char2int という変換テーブルによって,入出力の手前で内部id <=> オリジナルid の変換が行われる。

これに加えて,以下の情報も扱うことができる。

それらのデータを各種フィルタに通して順次変換していき、最終的にアイテム間の類似度データを作るのが解析の心臓部にあたる「filter chain」

結果を返すために参照されるテーブルは,オンライン用 (表) と裏の二つのテーブルがセットになっている。解析は裏側でやっておき,バッチ処理が終了したら一気に rename table で二つのテーブルをいれかえる仕組み。入力バッファも解析バッチからは隔離されているため,web api は,解析用に走っている重いsqlの影響をうけない。

解析のながれ

 嗜好データ入力
  
 ↓ (Handlers/Record.pm が http経由で受け取ったデータを IncomingData.pm にわたす)
 
 入力バッファ
 picks_buffer, ratings_buffer, ...
  
 ↓ (bin/flush_buffer.pl により定期的にバッファがフラッシュされる)
 
 一次(生)データ
 picks, ratings, tagged_relations, ...
 
 ↓ (batch.pl から FilterChain.pm が呼ばれ,Filters/ 以下の各種プラグインフィルタが順に適用される)
 
 二次(中間)データ
 converted_ratings, extracted_ratings, iuf, ...

 集計結果テーブル
 item_similarities, slope_one_diffs, ...
 
 ↓ (集計がすべて終わったら、rename table により一挙に古いテーブルと入れ替わる)
 
 オンラインテーブル
 converted_ratings_online, item_similarities_online, slope_one_diffs_online, ...
 
 ↓ (Handlers/Recommend.pm が Recommender/ 以下の各種レコメンダの結果を http経由で出力)
 
 レコメンデーション出力

APIで受信した嗜好データは、それぞれ以下のテーブルに格納される。

※実際には、競合防止のため、いったん picks_buffer などのバッファに格納され、bin/flush_buffers.pl が定期的にバッファの内容を本テーブルに移動している。 ※また、数値ではないuser_id /item_id を内部用の数値idにマッピングする処理もこのバッファ内で行われる。[詳細はあとで書く]

定期的に、config の定義に従って、複数のフィルタが順に起動される。フィルタは Cicindela::Filters の子クラスで、それぞれ「あるテーブルからデータを読み出し、あるテーブルに書き出す」という動作をする。

例えば...

全てのフィルタリングが終了すると、Recommender が利用するテーブル(ここでは、最終段のフィルタが書き出した item_similarities テーブル) は item_similarities_online という名前に変更される。それ以外の中間テーブル、および、それまであった item_similarities_online テーブルの内容は破棄される。

レコメンド出力APIは、Cicindela::Recommender の子クラスのどれかを使って出力される。

例えば Recommender::ItemSimilarities クラスは Filters::ItemSimilarities と対になっており、Filters::ItemSimilarities が書き出した類似度データ (item_similarities_online テーブル) を元に item別のレコメンドを計算する。

現在実装されているフィルタとレコメンダ

→ [あとで書く]

config の書き方の例

Examples


Sign in to add a comment
Hosted by Google Code