Amazon Web Services ブログ

Amazon Kendra を使用してエンタープライズ検索を強化する

Amazon Kendra は使いやすいエンタープライズ検索サービスです。これにより、アプリケーションに検索機能を追加して、エンドユーザーが社内のさまざまなデータソースに保存されている情報を簡単に見つけることができます。これには、請求書、ビジネス文書、技術マニュアル、販売レポート、企業用語集、社内ウェブサイトなどが含まれます。この情報は、Amazon Simple Storage Service (Amazon S3) や OneDrive などのストレージソリューション、SalesForce、SharePoint、Service Now などのアプリケーション、または Amazon Relational Database Service (Amazon RDS) などのリレーショナルデータベースから収集できます。

質問を入力すると、サービスは機械学習 (ML) アルゴリズムを使用してコンテキストを理解し、正確な回答であろうとドキュメント全体であろうと、最も関連性の高い結果を返します。最も重要なのは、これを行うために ML を使った経験を必要としない点です。AmazonKendra は、新規または既存のアプリケーションと簡単に統合するために必要なコードも提供します。

この記事では、Amazon Kendra の機能を使用して内部エンタープライズ検索を作成する方法を示します。これにより、独自の検索インデックスを作成してクエリを実行するソリューションを構築できます。この記事では、データソースとして HTML 形式の Amazon.com ヘルプドキュメントを使用していますが、Amazon Kendra は MS Office (.doc、.ppt)、PDF、およびテキスト形式もサポートしています。

ソリューションの概要

この記事では、Amazon Kendra を使用して AWS でエンタープライズ検索エンジンを作成するのに役立つ手順を示します。詳細な技術的知識や ML の経験がほとんどなくても、新しい Amazon Kendra インデックスを 1 時間以内にプロビジョニングできます。

この記事では、FAQ の追加、カスタムアプリケーションへの Amazon Kendra のデプロイ、データソースの同期によって、カスタマイズされたエクスペリエンスを得るために Amazon Kendra を設定する方法も示します。この記事の以下のセクションで疑問に対処し、答えていきます。

前提条件

このチュートリアルには、以下の前提条件が必要です。

ドキュメントリポジトリの作成と設定

Amazon Kendra でインデックスを作成する前に、ドキュメントを S3 バケットにロードする必要があります。このセクションでは、S3 バケットを作成し、ファイルを取得して、バケットにロードする手順について説明します。このセクションのすべての手順を完了すると、Amazon Kendra で使用できるデータソースが作成されます。

  1. AWS マネジメントコンソールリージョンの一覧で、[米国東部 (バージニア北部)] または Amazon Kendra が提供されている任意のリージョンを選択します。
  2. [サービス] を選択します。
  3. [ストレージ] で、[S3] を選択します。
  4. Amazon S3 コンソールで、[バケットの作成] を選択します。
  5. [一般設定] で、次の情報を指定します。
    • バケット名: kendrapost-{お客様のアカウント ID}
    • リージョン: Amazon Kendra インデックスのデプロイに使用するのと同じリージョンを選択します (この記事では米国東部 (バージニア北部) us-east-1 を使用しています)。
  6. [ブロックパブリックアクセスのバケット設定] で、すべてをデフォルト値のままにします。
  7. [詳細設定] で、すべてをデフォルト値のままにします。
  8. [バケットの作成] を選択します。
  9. amazon_help_docs.zip をダウンロードして、ファイルを解凍します。
  10. Amazon S3 コンソールで、作成したばかりのバケットを選択し、[アップロード] を選択します。
  11. 解凍したファイルをアップロードします。

バケット内に、amazon_help_docs (3,100 個のオブジェクトを含む) と faqs (1 個のオブジェクトを含む) の 2 つのフォルダが表示されます。

次のスクリーンショットは、amazon_help_docs の内容を示しています。

次のスクリーンショットは、faqs の内容を示しています。

インデックスを作成する

インデックスは、ドキュメントの検索結果とよくある質問を提供する Amazon Kendra コンポーネントです。このセクションのすべての手順を完了すると、さまざまなデータソースのドキュメントを使用する準備ができたインデックスが作成されます。インデックスの詳細については、「インデックス」を参照してください。

最初の Amazon Kendra インデックスを作成するには、次の手順を実行します。

  1. コンソールで、[Services] を選択します。
  2. [Machine Learning] の下で、[Amazon Kendra] を選択します。
  3. Amazon Kendra のメインページで、[Create an Index] を選択します。
  4. [Index details] セクションの [Index name] に、「kendra-blog-index」と入力します。
  5. [Description] には、「My first Kendra index」と入力します。
  6. [IAM role] では、[Create a new role] を選択します。
  7. [Role name] には、「-index-role」と入力します (ロール名の接頭辞は AmazonKendra-YourRegion- です)。
  8. [Encryption] では、[Use an AWS KMW managed encryption key] を選択しないでください。

(デフォルトでは、データは Amazon Kendra が所有するキーで暗号化されます)。

  1. [Next] をクリックします。

Amazon Kendra が作成する IAM ロールの詳細については、「前提条件」を参照してください。

Amazon Kendra には 2 つのエディションがあります。Kendra Enterprise Edition は、本番ワークロードに高可用性サービスを提供します。Kendra Developer Edition は、概念実証の構築と実験に適しています。この記事では、Developer Edition を使用します

  1. [Provisioning editions] セクションで、[Developer edition] を選択します。
  2. [Create] をクリックします。

各 Amazon Kendra エディションの無料利用枠、ドキュメントサイズの制限、および合計ストレージの詳細については、「Amazon Kendra の料金」を参照してください。

インデックスの作成プロセスには、最大 30 分かかる場合があります。作成プロセスが完了すると、インデックスが正常に作成されたことを示すメッセージがページの上部に表示されます。

データソースを追加する

データソース は、インデックス作成のためにドキュメントを保存する場所です。データソースを Amazon Kendra インデックスと自動的に同期して、検索がソースリポジトリ内の新しいドキュメント、更新されたドキュメント、または削除されたドキュメントを正しく反映していることを確認できます。

このセクションのすべての手順を完了すると、Amazon Kendra にリンクされたデータソースが作成されます。詳細については、「データソースからのドキュメントの追加」を参照してください。

続行する前に、インデックスの作成が完了し、インデックスが [Active] と表示されていることを確認します。

  1. [kendra-blog-index] ページで、[Add data sources] を選択します。

Amazon Kendra は、Amazon S3、SharePoint Online、ServiceNow、OneDrive、Salesforce online、Amazon RDS の 6 種類のデータソースをサポートしています。この記事では、Amazon S3 を使用します。

  1. [Amazon S3] で、[Add connector] を選択します。

Amazon Kendra がサポートするさまざまなデータソースの詳細については、「データソースからのドキュメントの追加」を参照してください。

  1. [Define attributes] セクションの [Data source name] に、「amazon_help_docs」と入力します。
  2. [Description] には、「AWS services documentation」と入力します。
  3. [Next] をクリックします。
  4. [Configure settings] セクションの [Enter the data source location] で、作成した S3 バケット (kendrapost-{your account id}) を入力します。
  5. メタデータファイルのプレフィックスフォルダの場所を残す

デフォルトでは、メタデータファイルはドキュメントと同じディレクトリに保存されます。これらのファイルを別のフォルダに配置する場合は、プレフィックスを追加できます。詳細については、「S3 ドキュメントメタデータ」をご覧ください。

  1. [Select decryption key] では、何も選択しないでください。
  2. [Role name] では、「source-role」と入力します (ロール名の先頭には AmazonKendra- が付きます)。
  3. [Additional configuration] では、特定のフォルダまたはファイルを含めるか除外するパターンを追加できます。この記事では、デフォルト値を保持します。
  4. [Frequency] では、[Run on demand] を選択します。

このステップでは、データソースが Amazon Kendra インデックスと同期される頻度を定義します。このチュートリアルでは、これを手動で行います (1 回のみ)。

  1. [Next] をクリックします。
  2. [Review and create] ページで、[Create] を選択します。
  3. データソースを作成したら、[Sync now] を選択して、ドキュメントを Amazon Kendra インデックスと同期します。

このプロセスの期間は、インデックスを作成するドキュメントの数によって異なります。このユースケースの場合、15 分かかることがあります。その後、同期が成功したというメッセージが表示されます。

[Sync run history] セクションで、3,099 個のドキュメントが同期されたことがわかります。

検索コンソールを使用して検索インデックスを探索する

このセクションの目的は、組み込みの Amazon Kendra コンソールを介して利用できる検索クエリを探索できるようにすることです。

上記で作成したインデックスを検索するには、次の手順を実行します。

  1. [Indexes] で、[kendra-blog-index] を選択します。
  2. [Search console] を選択します。

Kendra は、ファクトイド、説明、およびキーワードという 3 つのタイプの質問に答えることができます。詳細については、「Amazon Kendra のよくある質問」を参照してください。以前にアップロードした Amazon.com ヘルプドキュメントを使用して、質問をすることができます。

検索フィールドに「Amazon music unlimited?」と入力します。

ファクトイドの質問 (誰が、何を、いつ、どこで) を使用して、Amazon Kendra は回答し、ソースドキュメントへのリンクも提供できます。

キーワード検索として、「shipping rates to Canada」を入力します。次のスクリーンショットは、Amazon Kendra の答えを示しています。

FAQ の追加

また、FAQ のリストをアップロードして、エンドユーザーが尋ねる一般的な質問に直接回答することもできます。これを行うには、質問に関連する情報を含む .csv ファイルをロードする必要があります。このセクションには、そのファイルを作成して設定し、Amazon Kendra にロードする手順が含まれています。

  1. Amazon Kendra コンソールで、インデックスに移動します。
  2. [Data management] で、[FAQs] を選択します。
  3. [Add FAQ] を選択します。
  4. Define FAQ project セクションでFAQ name に、「kendra-post-faq」と入力します。
  5. [Description] には、「My first FAQ list」と入力します。

Amazon Kendra は、各行が質問で始まり、その後に回答が続く形式の.csv ファイルを受け入れます。たとえば、次の表を参照してください。

質問 回答 URL (オプション)
スペースニードルの高さは?  605 フィート  https://www.spaceneedle.com/
スペースニードルはどれぐらい高いの?  605 フィート  https://www.spaceneedle.com/
CN タワーの高さは? 1815 フィート https://www.cntower.ca/
CN タワーはどれぐらい高いの? 1815 フィート https://www.cntower.ca/

このユースケースに含まれる .CSV ファイルは次のようになっています。

「Amazon Prime 無料利用枠にサインアップするにはどうすればよいですか?」、「Amazon Prime 無料利用枠にサインアップするには、アカウントに最新の有効なクレジットカードが登録されている必要があります。Amazon.com の Corporate Line of Credit、当座預金、プリペイドクレジットカード、ギフトカードなどの支払いオプションは使用できません"、"https://www.amazon.com/gp/help/customer/display.html/ref=hp_left_v4_sib?ie=UTF8&nodeId=201910190”
  1. [FAQ settings] の [S3] で、「s3:// kendrapost- {お客様のアカウント ID}/faqs/kendrapost.csv」と入力します。
  2. [IAM role] では、[Create a new role] を選択します。
  3. [Role name] には、「faqs-role」と入力します (ロール名の先頭には AmazonKendra- が付きます)。
  4. [Add] をクリックします。
  5. ステータスが [Active] と表示されるまで待ちます。

これで、FAQ が検索コンソールでどのように機能するかを確認できます。

  1. [Indexes] で、インデックスを選択します。
  2. [Data management] で、[Search console] を選択します。
  3. 検索フィールドに「How do I sign up for the Amazon Prime free Trial?」と入力します。
  4. 次のスクリーンショットは、Amazon Kendra が以前にアップロードした FAQ を結果リストに追加し、回答と関連ドキュメントへのリンクを提供していることを示しています。

独自のアプリケーションで Amazon Kendra を使用する

アプリケーションの検索コンソールから次のコンポーネントを追加できます。

  • メイン検索ページ すべてのコンポーネントを含むメインページ。ここで、アプリケーションを Amazon Kendra API と統合します。
  • 検索バー 検索用語を入力し、検索機能を呼び出すコンポーネント。
  • 検索結果 Amazon Kendra からの結果を表示するコンポーネント。提案された回答、FAQ の結果、推奨されるドキュメントの 3 つのコンポーネントがあります。
  • ページ付け Amazon Kendra からの応答にページ番号を付けるコンポーネント。

Amazon Kendra は、ウェブサイトにデプロイできるソースコードを提供します。これは、変更された MIT ライセンスの下で無料で提供されるため、そのまま使用することも、自分のニーズに合わせて変更することもできます。

このセクションには、Amazon Kendra 検索をウェブサイトにデプロイする手順が含まれています。マシンでローカルに実行される Node.js デモアプリケーションを使用します。このユースケースは、MacOS 環境に基づいています。

このデモを実行するには、次のコンポーネントが必要です。

  1. amazon_aws-kendra-sample-app-master.zip をダウンロードして、ファイルを解凍します。
  2. ターミナルウィンドウを開き、aws-kendra-sample-app-master フォルダに移動します。
    cd /{folder path}/aws-kendra-sample-app-master
  3. .env.development.local.example ファイルのコピーを .env.development.local として作成します。
    cp .env.development.local.example .env.development.local
  4. .env.development.local ファイルを編集して、次の接続パラメータを追加します。
    • REACT_APP_INDEX – Amazon Kendra インデックス ID (この番号はインデックスのホームページで確認できます)
    • REACT_APP_AWS_ACCESS_KEY_ID – アカウントアクセスキー
    • REACT_APP_AWS_SECRET_ACCESS_KEY – アカウントのシークレットアクセスキー
    • REACT_APP_AWS_SESSION_TOKEN – このユースケースでは空白のままにします
    • REACT_APP_AWS_DEFAULT_REGION – Kendra インデックスのデプロイに使用したリージョン (例: us-east-1)
  5. 変更を保存します。
  6. 以下のように Node.js 依存関係をインストールします。
    npm インストール
  7. ローカル開発サーバーを起動します。
    npm 開始
  8. http:// localhost:3000/ でデモアプリを表示します。次のスクリーンショットが表示されます。
  9. FAQ のテストに使用したのと同じ質問を入力します。Amazon Prime 無料利用枠にサインアップするにはどうすればよいですか?

次のスクリーンショットは、デモウェブページがローカルでマシンで実行されているにもかかわらず、結果が Amazon Kendra コンソールから取得したものと同じであることを示しています。

クリーンアップ

今後の料金の発生を回避し、未使用のロールとポリシーを一掃するには、作成したリソース (Amazon Kendra インデックス、S3 バケット、対応する IAM ロール) を削除します。

 

  1. Amazon Kendra インデックスを削除するには、[Indexes] で [kendra-blog-index] を選択します。
  2. [index settings] セクションの [Actions] ドロップダウンメニューから、[Delete] を選択します。
  3. 削除を確定するには、フィールドに [Delete] と入力し、[Delete] を選択します。

確認メッセージが表示されるまで待ちます。このプロセスには最大 15 分かかる場合があります。

S3 バケットを削除する手順については、「S3 バケットを削除する方法を教えてください」を参照してください。

まとめ

この記事では、Amazon Kendra を使用してエンタープライズ検索サービスをデプロイする方法を学びました。Amazon Kendra を使用すると、ML を利用して、会社の検索エクスペリエンスを向上させることができます。これまで ML/AI の経験がなくても、自然言語を使用してドキュメントをすばやく検索できます。Amazon Kendra の詳細については、YouTube の「AWS re:Invent 2019 – Keynote with Andy Jassy」、「Amazon Kendra FAQ」、および「What is Amazon Kendra?」をご覧ください。


著者について

LeonardoGómez は、AWS のビッグデータスペシャリストソリューションアーキテクトです。カナダのトロントを拠点とし、カナダ全土のお客様と協力してビッグデータアーキテクチャの設計と構築を行っています。