Amazon Web Services ブログ

Amazon Kendra で日本語の類義語検索を実現する方法

はじめに

みなさんこんにちは。AWS Japan ソリューションアーキテクトの関谷侑希です。
AI/ML の技術が大好きで、現在は交通・物流・旅行・不動産・建設業界のお客様に対し技術支援をしています。

このブログでは Amazon Kendra で類義語検索を実現する方法についてご紹介します。

Amazon Kendra とは

ところでみなさんは Amazon Kendra というサービスをご存知でしょうか。

Kendra は全文検索エンジンです。お手持ちのドキュメント (Microsoft Word, PDF など) を全文検索することができます。置き場所も Amazon S3 や Amazon FSx, Salesforce などを同時に横断検索できます。

AWS を活用されている皆さんであれば、知らず知らずのうちに触ったことがあるかもしれません。というのも 英語版の AWS Documantation の裏側にも Kendra が使われているんです。

そんな便利な Kendra ですが日本語と英語ではサポートされている機能に差があります。日本語で使う場合の強みとしてはカスタマイズを効かせた独自の検索エンジンが作り込めることです。

できること

  • セマンティックサーチ
  • FAQ を設定すること
  • メタデータによる高度な検索
  • チューニング

できないこと (2022/11/30現在の対応状況です。最新の情報は Kendra のドキュメント履歴をご確認下さい。)

  • 日本のリージョンで使う
  • インクリメンタルラーニング
  • カスタムシノニム

また今、対応していない機能も、他のサービスとの連携でそれが実現できます。

日本語の類義語検索を実現するには

このブログでは日本語で対応していないカスタムシノニムをどのように実現するかについてお伝えします。

日本語未対応の機能の1つにカスタムシノニムが挙げられます。カスタムシノニムでできることは類義語検索です。例えば、「DNS と調べるときに Route 53の記事も同時に検索結果に入れたい」「首相と検索するときに内閣総理大臣の記事も同時に入れたい」こういった検索体験を実現するための手段としてカスタムシノニムが使えます。しかし2022/10/19時点で未対応です。

そこで今回紹介するのが、あいまい検索モードのサンプル実装です。

このサンプルは GitHub から見ることができ、皆様のお手元の AWS アカウントで動かすことができます。

https://github.com/aws-samples/kendra-ambiguous-search-app.git

このサンプルアプリの実装では、次のアーキテクチャを採用しています。

本来 Kendra で FAQ を利用する場合、S3 バケットにシノニムファイルを入れる必要があります。このサンプルでも同様にシノニムファイルの保存先は S3 です。ただ今回は 検索アプリケーションから頻繁にシノニムを参照するため、S3 put トリガーを使い DynamoDB に同様のデータを格納しています。

検索の流れ

もしユーザーが 「Route53 使い方」のようなクエリを検索アプリケーションに投げたとします。その次に検索アプリケーションは「Route53」と「使い方」という単語のシノニムが DynamoDB に存在するかを問い合わせます。さらにその結果を考慮して検索クエリを書き換えます。ここでは Kendra の検索演算子という機能を活用します。カッコと OR 演算子を使いそれぞれのシノニムの包含関係を表します。そして書き換えられたクエリをKendraへ渡しカスタムシノニムのような機能を再現しています。

メリット/デメリット

またこのサンプルのメリットとデメリットは次のとおりです

メリット

  • 類義語検索ができる
  • 切り替えボタンがついている
  • 正規機能を有効にする場合と運用オペレーションが似ている
  • 本家機能がサポートした後もシノニムファイルが使えるので移行しやすい

デメリット

  • スペースを含むシノニムトークンは未対応
  • 大量のシノニム用語があるとパフォーマンスが下がる可能性がある
  • シノニムファイルを S3 に再度アップロードすると、DynamoDB に大量のリクエストが飛ぶので、運用の際はタイミングを見計らう必要がある

私が技術支援をしているお客様には特に、FAQの更新のしやすさ、本家機能がサポートした後の移行の容易性が高く評価されていました。
ここまでの内容でサンプルに興味を持った方は、ぜひ下記の手順書を元にお手元でお試し下さい。

https://github.com/aws-samples/kendra-ambiguous-search-app.git

最後に

このブログでは Amazon Kendra で類義語検索を実現する方法について紹介しました。AWS では 無料の技術相談窓口もご用意しており、要件がまとまっていないところからでも AWS のプロフェッショナルが無料で技術相談を承っています。このブログのように、今対応していない機能のワークアラウンドに関するディスカッションにもぜひご活用下さい。

このブログが皆さんのビジネスを加速させる一助になれば幸いです。


著者について

セキヤユウキ

関谷侑希

このブログの執筆はソリューションアーキテクトの関谷侑希が担当しました。