⚗️

Azure AI SearchにベクトルデータをAPI経由でアップロードする

2024/02/13に公開

前提

・データをベクトル化している(次元数2048以下)
・Azure Open AIにembeddingモデル(ada-2)をデプロイしている

全体の流れ

  1. Azureにデータのインポート
  2. データの検索

Azureの使い方

・Azure Portalというブラウザ上のサービスから操作する

アップロードの手段

  1. Portal(Blob)経由:

言語アナライザーが日本語にならないのが問題
言語アナライザーとは、キーワード検索のために文章をトークンという単位に分割する際に使用される

  1. API経由

言語アナライザーを日本語にできるので今回はこちら

アップロードの手順(ベクトル化済みデータ)

  1. Indexを作成
  2. データをAPI経由でPost

Indexの作成

Portal上からAI Search➡︎リソースを作成して移動

リソース(箱)の下にデータを置いています

Indexを作成

Indexとはベクトルデータを入れるための箱

  1. 左側のツールバーから「Indexes」を選択
  2. AddIndexを選択

Fieldの設定

Index上にフィールド(カラム)を作成

  1. 左側のAdd fieldを選択
  2. 右側にFieldの設定が出てくるので入力

ここで主に下記のフィールドを作成
(入れるデータに合わせて作成してください)
・chunk: String
・title: String
・summary: String
・vector:Collection(Edm.Single)

・Configure attributesについて

  1. Retrievable:クエリを叩いた際に取得可能か
    ➡︎今回は全てチェック

  2. Filterable:クエリを叩く際に検索結果をフィルター可能にするか
    ➡︎今回は全てチェックしない

  3. Sortable:ソート可能にするか
    ➡︎今回は全てチェックしない

  4. Facetable:フィルターの一種
    ➡︎今回は全てチェックしない
    詳細:
    https://shinodogg.com/2021/03/18/facets-and-faceted-search-making-every-attribute-count/
    https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.search.models.field.isfacetable?view=azure-dotnet-legacy

  5. Searchable:全文検索(キーワード検索)を可能にするか
    クエリを叩く時に 「"search": 」という項目があり、ここに設定した文字列で検索が行われる

➡︎今回は全てチェック

言語アナライザーの設定
Searchableをチェックすると言語アナライザーの選択画面が出てくるので
日本語に設定

vectorデータの設定

・Configure attributes
➡︎Retrievableに設定

・Dimensions
➡︎
ベクトル化したデータの次元数と必ず同じ数を入力

・Vector algorithm
➡︎下記のように設定


アルゴリズムの詳細:
https://learn.microsoft.com/en-us/azure/search/vector-search-ranking

exhaustive knnは少量のデータの探索に有効。精度高いが計算量が多くなるので時間かかる
ざっくりhnswはその逆
数万件くらいのデータならexhaustive knnの方が精度が高く良さそう

・vectorizerの設定
➡︎
queryをベクトル化するときの設定です
下記のように設定
新しいモデルが出たら、Azure OpenAI serviceに別途モデルをデプロイする必要があります。

CORSの設定

特にURLなど公開しないので、Allowed origin typeをALLに設定

Scoring profilesの設定

今回は設定しない
特定のフィールドに重みづけできたりします

Semantic Configrationの設定

セマンティックランカーを使用する際の設定

  1. Create

  2. Title field
    ➡︎Title

  3. Content fields
    ➡︎
    summary, chunkを追加

  4. Keyword fields
    ➡︎
    今回は特定のキーワードを格納したテーブルはないので今回はスルー
    設定する場合はkeywordのリストを格納したカラムを設定

  5. Save

VectorProfile

queryをベクトル化する設定

  1. 左側からAddprofile
  2. 右側の編集タブで先ほど作成したvectorizerを選択

データをAPI経由で格納

前提

・事前にデータをベクトル化してCSV形式にしてカラムを追加しておく
今回の例だと
id, title, summary, chunk, embeddings(ベクトル値)のカラムを用意しておき、
embeddingsなどのカラムにベクトル化したデータの数値を格納しておく

詳細は別途アップロード予定

データアップロード手順

別途アップロード予定

検索結果の取得

別途アップロード予定

Discussion