出遅れたけど Amazon CloudSearch のアップデートと日本語ユーザー辞書を試してみる。
どうも!
かなり出遅れ感ありますが、Amazon CloudSearch のアップデートの確認と、特に目玉機能の日本語用ユーザー辞書を試してみました。ところで、他の CJKV のユーザー辞書に先駆けて日本語で・・というのはちょっと嬉しいですね。
リリースノート
Release: Amazon CloudSearch on 2014-10-16 http://aws.amazon.com/releasenotes/8599231268618266
Enhanced Japanese Language Processing
日本語の形態素解析用のユーザー辞書を追加することができるようになりました。これによって、検索結果の精度を向上させることができるようになります。マニュアルは以下。
CloudSearch の弱点である、ユーザー辞書の追加ができるようになったのはとても素晴らしいですね!
AWS CloudTrail Integration
CloudTrail を使って、API のコール記録のログをS3上に残せるようになりました。マニュアルは以下。
http://docs.aws.amazon.com/cloudsearch/latest/developerguide/logging-config-api-calls.html
ちょっとだけ調べてみたところ、クエリのログは取れないようです。あくまで、サービスのAPIコールということで、例えばドメインの作成やアクセスポリシーの変更などの操作が記録の対象になります。データの登録・更新・削除も同様です。以下、記録の対象になるアクションのリストです。
http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Operations.html
クエリのログが残せない、ということで若干残念な気持ちもありますが、監査、監視目的ということであれば、とても有効なアップデートかと思います。*1
形態素解析用の辞書をいじってみる
ユーザー辞書は、Analysis Schema のページで定義することができます。ちなみに、対応言語は日本語だけなので、日本語を選ぶと、タブが出てきます。text もしくは text-array フィールドにのみ適用ができます。また、ユーザー辞書の適用後やエントリの編集時は、再インデキシング (rebuild index) が必要になります。(=別途料金がかかる・・)
以下、スクリーンショットたち。
こんなかんじで定義します。Text には解析対象の文字列、Tokens は、空白スペース区切りでどのように区切るかを指定。Readings は読みを、Part of Speech には、品詞を設定します。調査不足で Readings と Part of Speech がどのように影響するかは不明です。。スイマセン。なお、JSON で書いて、CLI で登録する、ということも可能なので、SVN などでバージョン管理もやりやすいです。
Analysis Scheme の定義後は、以下のように Index Field の定義画面で選択できるようになります。
やってみた。
というわけで、動作確認。まずはデフォルトの状態で検索。body_n が自作した Analysis Scheme で、ユーザー辞書を適用するフィールド。下記の結果は、登録前の状態です。以前の検証と同じように、なんか変なのがヒットしているようです。「お」と「にく」が切れている。。
ユーザー辞書に、以下のようにエントリーを登録して再インデキシング。「おにく」を登録しました。*2 ちなみに、ユーザー辞書に限らずですが、Rebuild Index はかなり時間がかかりすま。m1.small で1回15分はかかっていました。ドキュメントの数が 0 件でもこのぐらいはかかります。
インデックス完了後に、確認のため Query Parser を Lucene にして、辞書を適用した body_n にのみ検索を実行したところ、ちゃんと改善されていることが確認できました!ちゃんと「おにく」と入っているドキュメントのみがヒットしました。
素晴らしいですね!
その他、気がついたアップデート
いつの間にか(?)バイナリーファイルの全文検索ができるようになっていました。csv / pdf / html / excel / word / txt 。csv の場合、CloudSearch がデータをパースして、カラムごとに適当なフィールドにデータを入れてくれます。他のファイル種別についても、ファイルの本文およびメタデータを展開し、各値をフィールドに入れることができます。
Expression という機能について、この機能は独自のソートのルールを定義しておくことができ、検索時にしようすることができる。ソートのルールでは、検索対象の数値型と日付型(int/doble/date)のフィールドと現在時刻、スコア、ランダム値に対して、四則演算や、対数、絶対値、最大値、最長値、ビット演算などを使用することができる。以下は、ドキュメントに記載されている利用例。
例1:popularity(人気)フィールドの値と、スコア(一致度)に応じて検索結果をソートする。
(0.3*popularity)+(0.7*_score)
例2:スコア(一致度)が高く、リリース日が新しいものの順でソートする。
_score/(_time - release_date)
https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-expressions.html
以上、ご参考まで。