レコメンドエンジンCicindelaの要求スペックが意外と高くてビビった

http://www.cirrusimage.com/McCann/Cicindela%20dorsalis.jpg
ライブドアのレコメンドエンジンのCicindelaをためしてみました。

ライブドアのレコメンデーションエンジン Cicindela | livedoor labs EDGE:
http://labs.edge.jp/cicindela/

デモを動かそうとしたのですが、mysqlのMemoryエンジンを1GBほど使うので、メモリがいっぱい乗っかったPCでないと無理っぽいです。私の環境では配布されているデモデータを1/3程度に削って、やっと動作確認することができました。


インストールは日本語の詳細なドキュメントが以下にあるので、基本的にこれに従えば問題ないです。

Install - cicindela2 - セットアップ方法 / How to setup - Google Code:
http://code.google.com/p/cicindela2/wiki/Install

とりあえず、お手軽にためすためにVmware上のUbuntu8.04にセットアップしたときのメモとして、

  • mysqlはSynapticパッケージマネージャでインストール(設定ファイルは/etc/mysql/以下にできる)
  • perlモジュールも同じくSynapticでインストール。Text::CSV_XSも、後でデモデータをセットアップするときに必要になるのでインストール


続いて、デモデータをセットアップします。最初にmysqlにデータベースを作成します

cd /home/cicindela/misc
perl create_init_sql.pl --db_name=cicindela_clip_db | mysql -uroot

次にデモデータとして提供されているLivedoorクリップCSVデータをmysqlに登録します。

cd misc/clip_data
gunzip -c ldclip_demo_dataset.csv.gz | perl importer.pl --work_dir=`pwd` >tmp.txt

importer.plはSQL文をtmp.txtに出力しつつ、csvをパーズしてDBに登録する2つのファイルclips.txtとtaggs.txtを出力します。この2つのファイルは、mysqlユーザから見えるところ移動する必要があります。

mv clips.txt taggs.txt tmp.txt /tmp
cd /tmp
vi tmp.txt

ファイルを移動してからtmp.txtの中の"load data infile"のパスを移動先ものに書き直します。ここで、mysqlでtmp.txtのSQLを実行します

cat tmp.txt |mysql -uroot cicindela_clip_db

このコマンドの実行は結構時間がかかります。Vmwareだと10分から数十分かかりました。


さて、次にデモデータを使って解析を実行します。上述のドキュメントにしたがって、レコメンドの設定を定義したファイルを編集します。

cd /home/cicindela
vi lib/Cicindela/Config/_common.pm

集計セットを起動します。

bin/batch.pl --track=1


ここで、問題発生!なぜか集計セットの計算でmysqlのテーブル"item_similarities”でデータの追加ができないそうな。

DBD::mysql::st execute failed: The table 'item_similarities' is full [for Statement "
insert into item_similarities (item_id1, item_id2, score)
...

item_similaritiesテーブルはMemoryエンジンを利用しており、Memoryエンジンはetc/mysql/my.cnfで

max_heap_table_size = 1024M

と、最大1GBに設定されていますが、そんなにメモリを積んでいない(Vmwareにそんなに割り当ててない)ので、テーブルにinsertできない状況になったようです。



結局、デモデータのCSVファイルをパーズする前に、ファイルサイズを1/3程度(それでも20万件)に削減してセットアップをやりなおすことで、正常動作が確認できました。