Amazon OpenSearch Serviceの辞書対応について調査・整理した際のメモ。
そもそも辞書とは
キーワード検索において、形態素解析器が文章をわかち書き(正しい分割単位=トークンに分割すること)する際に使用するのが辞書。
ユーザー辞書
ビルトイン辞書には限界があるので、固有名詞や略称など、ユーザー自身が自らの個別要件に併せて用意した辞書がユーザー辞書。
形態素解析器(アナライザー)に食わせて使用する。
シノニム辞書
類義語、短縮語、表記揺らぎなどを吸収し、同一トークンにヒットさせることを目的とした、グルーピング用の特殊な辞書。
インデックス時やクエリー時(トークンフィルター)に使用する。
Amazon OpenSearch Serviceでの実装
ユーザー辞書、シノニム辞書とも利用可能。S3にテキストファイルを置いて動的に読み込める。
ただしProvisioned Cluster限定で、2025年9月現在、Serverlessでは利用できない。正確には、Serverlessでもシノニム辞書は使えるが、インデックスごとにインラインで直書きする必要があり運用に載りづらい。
2025年9月現在の仕様まとめ
| タイプ | サポート状況 | 実装方法 | トークナイザー |
|---|---|---|---|
| プロビジョンドクラスター (Provisioned Cluster) |
ユーザー辞書、シノニム辞書も対応 | S3に配置して参照 | kuromoji以外(例:sudachi)にも対応 |
| サーバーレス (Serverless) |
シノニム辞書のみ対応 | 直書き | kuromojiのみの対応 |
まとめ
RAGのベクトルストア(正確にはハイブリッド検索を有効化したベクトルストア)にAmazon OpenSearch Serviceを使用した場合に、辞書を使用した精度改善の対応余地を調べた時の内容だが、現状はProvisioned Cluster一択かなという印象。
ただ、RAGの場合はトークンだけでなくチャンク(ベクトル検索における、ベクトルストアに格納するベクトルの元となる単語の分割単位。トークンはキーワード検索におけるインデックス対象単語の分割単位)をどうする問題もあるので、昔ながらのOpenSearch/Elasticsearchの議論に比べて、やや複雑かも知れない。