|
Examples
設定の例 (例えばこんなことができます) / config examples (and what you can do with cicindela) [not finished]
JPシンプルな設定例
'test' => {
datasource => [ 'dbi:mysql:cicindela_test;host=localhost', 'cicindela', 'japana' ],
filters => [
'PicksExtractor',
'InverseUserFrequency',
'ItemSimilarities',
],
recommender => 'ItemSimilarities',
refresh_interval => 60 * 60 * 1,
},フィルタのオプションを指定する
'test' => {
datasource => [ 'dbi:mysql:cicindela_test;host=localhost', 'cicindela', 'japana' ],
filters => [
[ 'PicksExtractor', { out_table => 'extracted_picks2' } ],
[ 'InverseUserFrequency', { in_table => 'extracted_picks2' } ],
[ 'ItemSimilarities', { in_table => 'extracted_picks2' } ],
],
recommender => 'ItemSimilarities',
refresh_interval => 60 * 60 * 1,
},複数のセッティングを同居させる & 同時に複数のセッティングを並列で処理する
'clip' => {
datasource => [ 'dbi:mysql:clip;host=master-host', 'cicindela', 'japana' ],
slave_datasource => [ 'dbi:mysql:clip;host=slave-host', 'cicindela', 'transbaicalica' ],
filters => [
[ 'PicksExtractor', {
interval => '3 month',
in_table => 'picks',
out_table => 'extracted_picks',
} ],
[ 'InverseUserFrequency', {
in_table => 'extracted_picks',
out_table => 'iuf',
} ],
[ 'ItemSimilarities', {
in_table => 'extracted_picks',
in_table_iuf => 'iuf',
out_table => 'item_similarities',
} ],
],
recommender => [ 'ItemSimilarities', { in_table => 'item_similarities_online' } ],
refresh_interval => 60 * 60 * 3,
calculation_track => 1,
},
'clip_express' => {
datasource => [ 'dbi:mysql:clip;host=master-host', 'cicindela', 'japana' ],
slave_datasource => [ 'dbi:mysql:clip;host=slave-host', 'cicindela', 'transbaicalica' ],
filters => [
[ 'PicksExtractor', {
interval => '3 month',
in_table => 'picks',
out_table => 'extracted_picks2',
} ],
[ 'InverseUserFrequency', {
in_table => 'extracted_picks2',
out_table => 'iuf2'
} ],
[ 'ItemSimilarities::Express', {
recent_interval => '1 day',
in_table => 'extracted_picks2',
in_table_iuf => 'iuf2',
out_table => 'item_similarities_ex',
} ],
],
recommender => [ 'ItemSimilarities', { in_table => 'item_similarities_ex_online' } ],
refresh_interval => 60 * 10,
calculation_track => 2,
},複数のセッティングで計算したレコメンデーション結果を合成する。
'clip_hybrid' => {
datasource => [ 'dbi:mysql:clip;host=master-host', 'cicindela', 'japana' ],
slave_datasource => [ 'dbi:mysql:clip;host=slave-host', 'cicindela', 'transbaicalica' ],
recommender => [ 'Hybrid', {
settings => [
{ factor => 1, set_name => 'clip_hybrid_stage2' },
{ factor => 1, set_name => 'clip_express' },
]
} ],
},
'clip_hybrid_stage2' => {
datasource => [ 'dbi:mysql:clip;host=master-host', 'cicindela', 'japana' ],
slave_datasource => [ 'dbi:mysql:clip;host=slave-host', 'cicindela', 'transbaicalica' ],
recommender => [ 'Hybrid', {
settings => [
{ factor => 0.6, set_name => 'clip' },
{ factor => 0.4, set_name => 'clip_tags' },
]
} ],
},user id と item id を整数ではなく文字列で入出力するセッティングに 'some_setting' => {
...
use_user_char_id => 1,
use_item_char_id => 1,
...と書いておくと,整数値以外の user id, item id が利用できるようになります。 この場合は数値idと文字列idの変換テーブルをcicindela側で持つことになります。user id や item id が無限に増えてしまう可能性がある場合 (例えば,アクセスログの cookie値をユーザid として入力し,おすすめページを生成する場合など) は,古すぎる変換テーブルを破棄するように ...
discard_user_id_char2int => '1 year',
discard_item_id_char2int => '1 year',
...といった設定をいれておくことを推奨します。上の例は 1年で破棄する設定です。('1 year' のところは,mysql の interval 指定で使う文字列を指定します。) 具体例は↓の「レコメンデーションの候補をカテゴリで絞る」のところを参照してください。 レコメンデーションの候補をカテゴリで絞る
前者は,「アダルトカテゴリにはアダルトの商品しか出しちゃダメ!」というふうに,推薦する範囲を表示時に厳しく制限したい場合用。 後者は,例えばお店のレコメンドをするときに「同じ最寄り駅」とか「同じジャンル」の店を優先して表示したい場合用。 以下は,
というセッティングの例。(これも,あるサイトで実際に使用しているセッティングを多少簡略化したもの。) 'limit_category' => {
datasource => [ 'dbi:mysql:cicindela;host=master-host', 'cicindela', 'japana' ],
use_user_char_id => 1,
use_item_char_id => 1,
discard_user_id_char2int => '1 year',
discard_ratins => '1 year',
filters => [
'CopyPicks::WithRatings',
'RatingsConverter::ZScore',
'RatingsConverter::InverseUserFrequency',
['PicksExtractor::WithRatings', { in_table => 'converted_ratings', use_simple_set => 1, limit => 1000000 } ],
'SlopeOneDiffs',
],
recommender => 'SlopeOneDiffs::LimitCategory',
refresh_interval => 60 * 60 * 1,
},別サーバ上の apache ログをスキャンして、おすすめページを計算する [あとで書く]タグを考慮したレコメンデーション [あとで書く]ただのランキングから,マニアックに偏ったオススメまで [あとで書く]「興味がありません」の実装 [あとで書く]古くなったデータを自動的に削除する [あとで書く]MySQL をマスターとスレーブに分割する [あとで書く]webAPI を使わずに、perlから直接利用する [あとで書く]ENwow I have to translate all these... |
► Sign in to add a comment