HAYASHI Kentaro
hayas****@clear*****
2013年 4月 29日 (月) 15:39:08 JST
今日は肉の日ですね。 まずはじめに、利用事例の記事を書いてくれる人募集のお知らせです。 これまでも、groonga.orgにて利用事例 http://groonga.org/ja/users/ を 紹介してきましたが、それとは別に、http://gihyo.jp/にてgroonga関連の記事の連載を 隔週連載groongaとしてはじめました。 まだgroongaを知らない人にもWebの連載記事を通じて知ってもらいたいというのが動機です。 現在第2回まで公開しています。 http://gihyo.jp/dev/clip/01/groonga * 第1回 全文検索エンジンgroongaを紹介します! http://gihyo.jp/dev/clip/01/groonga/0001 * 第2回 groongaをRuby On Railsでも使ってみた 〜chikamap.comの事例から http://gihyo.jp/dev/clip/01/groonga/0002 利用事例がつきたら終了なので、実際に使っているユーザーのみなさんに 利用事例を書いてもらえたらいいなぁと思っています! 詳細は「groonga普及のための協力のお願い」を参照してください。 http://sourceforge.jp/projects/groonga/lists/archive/dev/2013-February/001186.html 毎週木曜にQiitaでのgroonga関連の情報提供も続けています。参考までにどうぞ。 http://qiita.com/users/groonga groonga 3.0.3をリリースしました! http://groonga.org/ja/docs/news.html#release-3-0-3 それぞれの環境毎のインストール方法はこちらを見てください。 http://groonga.org/ja/docs/install.html 今回のリリースではデータベースのファイル形式は互換性があるのでデータベースを作りなおす必要はありません。 今回のリリースの主なトピックは4つあります。 * 学習時の重み付けのカスタマイズをサポート * groongaのカスタマイズ版をビルドするためのパラメータの追加 * Fedoraでのリリース方法の変更 * Ubuntu 13.04 Raring Ringtailのサポート ○ 学習時の重み付けのカスタマイズをサポート 今回のリリースでは、学習時の重みづけのカスタマイズをサポートしました。 groongaではサジェスト機能として、補完/補正/提案の3つを提供しています。 http://groonga.org/ja/docs/suggest/introduction.html このサジェスト機能が「それらしい」結果を返すようにするには、適切な学習が必要です。 例えば、4月に「旬の野菜」で夏野菜が候補に出てきては困ります。ちょっと気が早いです。 4月であれば、きちんと春野菜が候補にでてきて欲しいですね。 単純に1度学習するだけだと重みが一緒になってしまうので、時期によって重みづけを変更したい 場合には、より重要なものを複数回同じデータで学習させる必要がありました。 これでは、学習データの規模が巨大になると非常に手間がかかってしまいます。 そこで、学習時の重み付けのカスタマイズをサポートし、同じデータに対して 複数回学習させなくても良いようにしました。 個別に重みをカスタマイズしてからその都度データを学習させれば反映されます。 それでは実際の例で試してみましょう。 旬の野菜を重みつきで学習する例を以下に示します。 最初にテスト用のデータベースを作成します。 % mkdir -p testdb % groonga -n testdb/db shutdown 次に、学習用のテーブルをgroonga-suggest-create-datasetコマンドで作成します。 % groonga-suggest-create-dataset testdb/db query 最後に学習データを用意します。途中でconfigurationテーブルのweightを10にしていますね。 これが、今回サポートした重みづけの指定方法です。 load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)' [ {"sequence": "1", "time": 1312950808.86057, "item": "旬 トマト", "type": "submit"} {"sequence": "1", "time": 1312950808.86057, "item": "旬 さつまいも", "type": "submit"} {"sequence": "1", "time": 1312950808.86057, "item": "旬 はくさい", "type": "submit"} ] load --table configuration [ {"_key": "query", "weight": 10} ] load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)' [ {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, ] 学習させた後で、「提案」機能を使ってみましょう。 クエリは以下のようになります。 suggest --table item_query --column kana --types suggest --frequency_threshold 1 --query 旬 旬というキーワードで提案された結果は4件あって、キャベツのスコアが一番高いことがわかります。 出現頻度を指定するための--frequency_thresholdをうまく調整すれば、より適切な提案ができるでしょう。 [ [0,1366613297.59312,0.000118494033813477], { "suggest":[[4], [["_key","ShortText"],["_score","Int32"]], ["旬 キャベツ",10],["旬 はくさい",1],["旬 さつまいも",1],["旬 トマト",1]] } ] 同じことをそれまで実現するには以下のように複数回学習させないとできなかったので、 だいぶ手間が減りました。 load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)' [ {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, {"sequence": "1", "time": 1312950803.86057, "item": "旬 キャベツ", "type": "submit"}, ] ○ groongaのカスタマイズ版をビルドするためのパラメータの追加 今回のリリースでは、groongaのカスタマイズ版をビルドするための パラメータの追加を行いました。 例えば、groongaが使用するスタックサイズのデフォルト値は 1024になっていますが、これを変更してパッケージをビルドしたい ときには、specファイルを以下のように修正する必要がありました。 %configure \ --disable-static \ --with-package-platform=redhat \ --with-stack-size=4096 \ --with-zlib \ %if %{use_lzo} --with-lzo \ %endif --with-munin-plugins 今回のリリースで、以下のようにrpmbuildコマンドのパラメータとして指定できるようになり、 specファイルそのものを編集する必要がなくなりました。 % rpmbuild --rebuild \ --define 'additional_configure_options --with-stach-size=4096' \ groonga-3.0.3-0.el6.src.rpm ○ Fedoraでのリリース方法の変更 今回のリリースからではありませんが、groonga 3.0.2のリリースから 独自に提供していたyum repositoryでの提供を止め、 Fedora 公式のリポジトリでのパッケージ提供へと一本化するようにしました。 これまで、Fedora 公式のリポジトリからインストールできるgroongaは2.0.9と 古い状態だったのですが、最新のリリースに追従するようになっています。 これによりインストールのときにリポジトリを登録する必要がなくなりました。 ただし、これまでのように独自に提供していた場合と異なり、Fedora 公式のリポジトリへと 反映されるまでにはリリースから2〜3週間程度のタイムラグがあります。 ○ Ubuntu 13.04 Raring Ringtailのサポート 今回のリリースでは 2013/04/25 にリリースされたばかりのUbuntu 13.04の サポートを追加しました。 インストール手順はドキュメントを参照してください。 http://groonga.org/ja/docs/install/ubuntu.html#raring-ringrail ○ 変更点 さて、3.0.2からの変更点は以下の通りです。 http://groonga.org/ja/docs/news.html#release-3-0-3 3.0.3リリース - 2013/04/29 -------------------------- 改良 * [suggest] configuration.weight を使って学習時の重みづけをカスタマイズできるようになりました。 * 位置情報検索のパフォーマンスを改善しました。例えば、 geo_in_rectangle の実行速度が10%程度以前より高速化しています。 * [rpm][centos] additional_configure_options パラメータを追加しました。 groongaをカスタマイズしてビルドするのにspecファイルを修正する必要はありません。 * KyTea 0.4.5をサポート。 * ベクターに対し "vector[N]" という構文でインデックスを指定してアクセスできるようにした。 * groonga-suggest-create-dataset コマンドに --default-tokenizer オプションを追加した。 * groonga-suggest-create-dataset コマンドに --help オプションを追加した。 * Ubuntu 13.04 Raring Ringtailをサポート。 -- HAYASHI Kentaro <hayas****@clear*****>