🔍

Azure OpenAI Service On your data でベクトル検索を行う

2023/09/07に公開
3

はじめに

2023 年 8 月の更新で Azure OpenAI Service On your data でベクトル検索ができるようになったため、使い方や勘所をまとめました。
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/whats-new#august-2023

On your data ベクトル検索で何が変わる?

2023 年 6 月に On your data のナレッジベースとして使われている Azure Cognitive Search にてベクトル検索のパブリックプレビューが開始しました。これに伴い、On your data にも以下の検索方法が新たに追加されました。

イメージ図

これまでは従来の全文検索セマンティック検索の選択肢しかありませんでしたが、ベクトル検索の選択肢が増えたことにより検索精度がボトルネックになっている場合の解決策になる可能性があります。

一方で、ベクトル検索ではクエリもベクトルに変換する必要があるため、検索のたびに Azure OpenAI Service で Embedding を行うコストが追加でかかるようになる点には留意しておく必要があります。

なお、On your data の仕組みや Azure Cognitive Search のベクトル検索については以前の記事でまとめましたので、そちらを参照してください。

参考

使い方

0. 前提

以下が準備されていること。

  • Azure OpenAI Service のリソース
  • Azure Cognitive Search (Free レベル以外) のリソース
  • Python 実行環境

参考

1. モデルデプロイ

ベクトル検索を行う場合は Azure OpenAI Service の Chat Completions と Embeddings モデルの両方をデプロイしておく必要があります。

Embeddings モデル

  • text-embedding-ada-002

Chat Completions モデル (以下のいずれかひとつ)

  • gpt-35-turbo
  • gpt-35-turbo-16k
  • gpt-4
  • gpt-4-32k

なお、Chat completions モデルに GPT-4 を利用する場合は Azure OpenAI Service の利用申請に加えて GPT-4 の利用申請が必要です。

参考

2. データソースの追加

On your data にはデータソースの指定方法が 3 種類あります。執筆時点で 2 と 3 ではアナライザーの言語を指定することができないため、日本語を想定する場合 1 が唯一の選択肢になります。

  1. Azure Cognitive Search (日本語ドキュメントも可能)
  2. Azure Blob Storage (英語ドキュメントのみ)
  3. Upload Files (英語ドキュメントのみ)

参考

この選択肢では、利用者が任意の Azure Cognitive Search のインデックスを作成して On your data でそのインデックスを指定します。インデックス作成時に任意の言語のアナライザーを選べるため、日本語ドキュメントも検索対象にすることができます。

2.1.1. インデックス作成スクリプトの取得

Microsoft 公式サンプルコードに On your data で指定するためのインデックスを作成するスクリプト が含まれています。まずは、任意の開発環境に以下のリポジトリをクローンします。
https://github.com/microsoft/sample-app-aoai-chatGPT/tree/main

git clone https://github.com/microsoft/sample-app-aoai-chatGPT.git

参考

2.1.2. パッケージインストール

ルートディレクトリに含まれる requirements-dev.txt を使って Python 実行環境にツールに必要なパッケージをインストールします。

pip install -r requirements-dev.txt

2.1.2. 設定

scripts フォルダに含まれる config.json にて設定を行います。

各設定項目の説明

項目 値の例 説明
data_path ../data_jp インデックス作成対象のデータが格納されたフォルダのパス
location japaneast Azure Cognitive Search のリソースが存在する Azure リージョン
subscription_id Azure サブスクリプション ID
resource_group Azure Cognitive Search リソースが含まれるリソースグループ名
search_service_name Azure Cogntive Search リソース名 (新規作成もしくは既存)
index_name Azure Cogntive Search インデックス名 (新規作成もしくは既存)
chunk_size 任意の値 チャンクサイズ (トークン数)
token_overlap 任意の値 チャンクオーバーラップ (トークン数)
semantic_config_name default "default"を設定
vector_config_name default "default"を設定
language ja アナライザーの言語

なお、リポジトリに含まれている config.json のテンプレート には vector_config_name が含まれていないため、手作業で追加する必要があります。

2.1.3. ロール付与

自分自身 (ツールを実行するユーザー) に Azure OpenAI Service に対する Cognitive Services ユーザー のロールを付与します。

参考

2.1.4. ツール実行

Azure にサインインをしてツールを実行します。コマンド中の <your-aoai-resource-name> は Azure OpenAI Service のリソース名、<your-embeddings-model-deploy-name>text-embedding-ada-002 のデプロイ名と置き換えます。実行に成功すると、config.json で設定した名前の Azure Cognitive Search インデックスが作成されます。

az login
python data_preparation.py --config config.json --embedding-model-endpoint "https://<your-aoai-resource-name>.openai.azure.com/openai/deployments/<your-embeddings-model-deploy-name>/embeddings?api-version=2023-05-15"

参考

2.1.5. On your data にデータソース (Azure Cognitive Search) を追加

ここからは Azure OpenAI Studio での作業です。

データソース追加画面で事前に作成したインデックスを選択します。"Add vector search to this search resource." にチェックを入れ、事前にデプロイした text-embedding-ada-002 のデプロイ名を選択します。

フィールドマッピングはあらかじめ指定されています。これまでは存在していなかった Vector Fields が追加されています。

任意の検索方法を選択します。執筆時点でセマンティック検索は英語のみでサポートされているため、日本語アナライザーを指定してインデックスを作成した場合は Vector (単一ベクトル検索) か Hybrid (vector + keyword) (ハイブリッド検索) のいずれかを選択します。

Save and close を押すとデータソースの追加がただちに完了して、ユーザーの問いかけに対して指定したデータソースの検索結果に基づいて回答が行われるようになります。


※ 検索結果はあくまでもイメージです。スクリーンショットの例では Wiki40b データセットを使って検索を行っているため、検索結果は最新の情報ではありません。

2.2. Azure Blob Storage

この選択肢では、任意の Azure Blob コンテナーを指定すると、そのコンテナに含まれるファイルに対する Azure Cognitive Search インデックスが自動作成されます。ただし、前述のとおり執筆時点ではアナライザーの言語を指定することができないため、対象が英語の場合のみの選択肢です。

参考

2.2.1. On your data にデータソース (Azure Blob Storage) を追加

すべて Azure OpenAI Studio の操作のみで完結します。データソース追加画面で "Add vector search to this search resource." にチェックを入れ、事前にデプロイした text-embedding-ada-002 のデプロイ名を選択します。
なお、この選択肢ではベクトル検索と同じく新たに追加されたインデックス自動更新機能を使うことができます。

検索の種類を選択します。この例では Hybrid + semantic (セマンティックハイブリッド検索) を選択しています。

Save and close を押すと、Azure Cognitive Search インデックスの作成が行われます。インデックスの作成が完了すると、ユーザーの問いかけに対して指定したデータソースの検索結果に基づいて回答が行われるようになります。



※ 検索結果はあくまでもイメージです。スクリーンショットの例では Wiki40b データセットを使って検索を行っているため、検索結果は最新の情報ではありません。

2.3. Upload Files

この選択肢では、任意の Azure Storage アカウントを指定して、そこにアップロードしたファイル対する Azure Cognitive Search インデックスが自動作成されます。ただし、前述のとおり執筆時点ではアナライザーの言語を指定することができないため、対象が英語の場合のみの選択肢です。

参考

2.3.1. On your data にデータソース (Upload Files) を追加

すべて Azure OpenAI Studio の操作のみで完結します。データソース追加画面で "Add vector search to this search resource." にチェックを入れ、事前にデプロイした text-embedding-ada-002 のデプロイ名を選択します。

任意のファイルをアップロードします。アップロード先の Blob コンテナーは自動作成されます。

検索の種類を選択します。この例では Hybrid + semantic (セマンティックハイブリッド検索) を選択しています。

Save and close を押すと、Azure Cognitive Search インデックスの作成が行われます。インデックスの作成が完了すると、ユーザーの問いかけに対して指定したデータソースの検索結果に基づいて回答が行われるようになります。



※ 検索結果はあくまでもイメージです。スクリーンショットの例では Wiki40b データセットを使って検索を行っているため、検索結果は最新の情報ではありません。

おわりに

プレビュー開始当初はやや粗削りだった On your data も徐々に機能が追加されて洗練されてきている印象です。今後の日本語対応や、その先の GA (一般提供) への期待が膨らみます。

以上です。🍵

Microsoft (有志)

Discussion

O-kenO-ken

詳しい手順とてもためになりました。しかし、1点困ったことが起きています。
手順通りでインデックスが作られるのですが、それを使用すると"Add vector search to this search resource."にチェックを入れることができません。セマンティックはいけるのですが、ベクトル用のフィールドが作られてないようです。
名前もAI Searchに代わり色々仕様が変わっているのかもしれませんが、解決策をご教示いただけませんでしょうか。

ryohtakaryohtaka

リポジトリに元々含まれている config.json には vector_config_name の項目が無いため、手作業で追加する必要があります。記事を更新しましたのでご確認ください。
https://zenn.dev/microsoft/articles/06063068b75a91#2.1.2.-設定

Azure AI Search への名称変更は単なるリブランディングのためサービスとしては以前からあった Azure Cognitive Search と同じものです。

O-kenO-ken

こんな初歩的なところを見落としていたなんて!
対応ありがとうございました!