Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AIアプリケーション開発でAzure AI Searchを使いこなすためには

AIアプリケーション開発でAzure AI Searchを使いこなすためには

第51回 Tokyo Jazug Nightの「AIアプリケーション開発でAzure AI Searchを使いこなすためには」の発表資料です。

AITC - DENTSU SOKEN

January 21, 2025
Tweet

More Decks by AITC - DENTSU SOKEN

Other Decks in Technology

Transcript

  1. 第51回 Tokyo Jazug Night AIアプリケーション開発でAzure AI Searchを使いこなすためには 2025/01/21 株式会社 電通総研

    クロスイノベーション本部 AIトランスフォーメーションセンター 山田 侑樹
  2. 自己紹介 2 山田 侑樹 2021年4月 電通総研 新卒入社 AIトランスフォーメーションセンター所属 主な業務内容 電通総研で開発している生成AIソリューション「Know

    Narrator」の アーキテクトとして開発、運用、クラウド環境設計・構築に携わっています その他 • Microsoft Top Partner Engineer Award 2024(AIカテゴリ)受賞 • Azure DevOpsに関する書籍の翻訳活動に参加 • Azure系を中心に10種類以上の技術系資格を取得済み 趣味・好きなこと • テニス、音楽ライブに行くこと • 可愛いキャラクターを愛でること
  3. 発表の背景 – この数年の生成AI周りの振り返り ▍2023年 ⚫ 3月にAzure OpenAI ServiceでGPT-3.5系のAPIの提供が開始 ➢ GPTモデルは学習時点の知識までしか持ち得ないため、RAG(Retrieval

    Augmented Generation)が 注目を浴びる ⚫ 高次元な埋め込みベクトルモデルに対応したベクトル検索の必要性 ➢ embedding-ada-002は1,536次元の埋め込みモデル ▍2024年 ⚫ 高次元な埋め込みモデルtext-embeddings-3が登場 ➢ 次元数は3,072次元に ⚫ GPT系モデルそのもののコンテキスト長が増加 ➢ GPT-4o、GPT-4o-miniなどのモデルは128,000トークンまで入力可能 ⚫ BuildにてAzure Cosmos DB for NoSQLでのベクトル検索が発表 ⚫ IgniteにてAzure Cosmos DB for NoSQLでの全文検索が発表 ▍2025年 ⚫ イマココ 7
  4. なぜ RAG / Azure AI Search なのか? ▍コンテキスト長の長いモデルが登場したがRAGの考え方は引き続き重要 すべての情報がモデルに重要ではないため、関連性の高い情報を与えるアプローチは以前として有効 モデルが知らない情報を与える方法として優秀

    ▍RAGをするにしてもCosmos DB for NoSQLの方が良くないですか? コスト的な観点で見ればそうかもしれない RAGでは検索機能が鍵となるため、検索を重視するならばAzure AI Searchを選択すれば良い → ユーザーの質問に適した情報を与える必要があり検索機能を作り込むにはAzure AI Searchが有用 9
  5. 本日、お話すること 1. チュートリアル Azure AI Searchの組み込みのチャンク化と埋め込み作成機能と Azure OpenAI ServiceのOn Your

    Data機能を使ったRAGの紹介 2. チュートリアルの裏側 Azure AI Searchの基本概念や検索の仕組みの紹介 3. Azure AI Searchを使ったAIアプリケーション開発の裏側の紹介 10
  6. 前提 Azure AI Searchとは? ▍ Azureのフルマネージドの検索サービス ▍ 全文検索、ベクトル検索、ハイブリッド検索、あいまい検索、 自動補完、geo検索など豊富な検索ソリューションに対応 ▍

    他のAzureサービスとの強力な統合機能を提供 ⚫ データソースから自動での検索インデックスへの保存処理(インデクサー) ⚫ OCRやテキストの翻訳などデータソースのコンテンツをAIで解析 (スキル、エンリッチメント、ナレッジストア) 12
  7. Azure AI Searchの組み込みのチャンク化と埋め込み作成機能 Azure AI Searchの拡張機能としてドキュメントのチャンク化、埋め込みの作成がサポート 15 Azure AI Search

    内の統合データのチャンキングと埋め込み, https://learn.microsoft.com/ja-jp/azure/search/vector-search-integrated-vectorization
  8. Azure OpenAI Service の On Your Data による回答生成 Azure OpenAI

    Service の Chat Completions API で data_sources として Azure AI Searchの検索インデックスを指定できる 23 POST https://{endpoint}/openai/deployments/{deployment-id}/chat/completions?api-version=2024-10-21 { "messages": [ { "role": "user", "content": "can you tell me how to care for a dog?” } ], "data_sources": [ { "type": "azure_search", "parameters": { "endpoint": "https://your-search-endpoint.search.windows.net/", "index_name": "{index name}", "authentication": { "type": "system_assigned_managed_identity” } } } ] }
  9. 実際の動作例 経産省の以下のPDFファイルをAzure AI Searchに投入済み ⚫ AI 事業者ガイドライン(第 1.0 版).pdf ⚫

    AI導入ガイドブック 需要予測(小売り、卸業).pdf 質問:「人間中心の AI 社会原則」ではどんな価値が重要ですか? 24
  10. ここまでの整理 ▍Azure AI Search へのデータ投入部分 ⚫ Azure Portalの「データのインポートとベクター化」からGUIベースで可能 ▍Azure AI

    Searchのデータを参照して回答を生成する部分 ⚫ Azure OpenAI Service の Chat Completions API でAzure AI Searchの検索インデックスを参照させ た回答の生成が可能 25 ここからはAzure AI Searchの基本概念を整理しながら、裏側で行われてた操作を振り返ってみます
  11. Azure AI Searchに保存されるデータに関する用語と概念 28 用語 概要 検索インデックス 検索のためのデータのコレクション。 1つの検索インデックス内に複数のドキュメントが格納される。 ※単に「インデックス」と表記をする場合もあるが本資料内では

    「検索インデックス」と表記する。 スキーマ 検索インデックスの構造を定義するもの。 スキーマは、検索インデックスに格納されるドキュメントにどのようなフィールド が含まれ、それぞれのデータ型など情報を含む。 ドキュメント 検索インデックス内に格納される個々のデータ項目。 Azure AI SearchではJSON形式で表現される。 フィールド ドキュメント内の個々の属性を示す。RDBの列に似たもので型が存在する。 フィールドによって検索結果の並び替えやフィルタリングが行える。
  12. 検索インデックスのフィールドの属性 検索インデックスのフィールドはデータ型に加えて、検索時にフィールドがどのように 使用されるかを示す属性を定義する 30 属性 概要 searchable フルテキストインデックスを作成するかを制御する filterable $filterクエリで参照できるかを制御する

    sortable ソート対象に利用できるかを制御する facetable 検索結果の集約化に利用するかを制御する key ドキュメントの一意識別子となるフィールド このフィールドは文字列(Edm.string)で定義される retrievable 検索結果に含めるかを制御する Falseにしたフィールドはスコアリングの内部ロジックなどに応用できる
  13. Pullモデルを理解するための用語と概念 34 用語 概要 データソース インデクサーのデータ抽出対象となるクラウド上のデータソース Azure Blob StorageやAzure Cosmos

    DBなどがサポートされる インデクサー インデクサーはデータソースのデータをAzure AI Searchの検索インデックスのスキーマ構造に マッピングする処理を行うコンポーネント 一般的な検索システムの「クローラー」のような処理を担う スキル インデクサーでコンテンツを検索インデックスに投入する際に、コンテンツを変換する単一の 操作を提供するもの スキルセット スキルセットは特定のインデクサーで利用するスキルの集合。少なくとも1つのスキルから構成 され、最大で30のスキルを含む。 エンリッチメント インデクサーの拡張機能で、画像などのテキスト情報を持たないデータを検索可能な構造に変換 するもの ナレッジストア エンリッチメントされたコンテンツを保存するストレージ Azure Blob StorageやAzure Table Storageを利用できる
  14. 利用されるスキル - テキスト分割スキル(TextSplitSkill) チャンク分割をするスキル https://learn.microsoft.com/ja-jp/azure/search/cognitive-search-skill-textsplit 36 { "@odata.type": "#Microsoft.Skills.Text.SplitSkill", "name":

    "#1", "description": "Split skill to chunk documents", "context": "/document", "defaultLanguageCode": "en", "textSplitMode": "pages", "maximumPageLength": 2000, "pageOverlapLength": 500, "maximumPagesToTake": 0, },
  15. 利用されるスキル - Azure OpenAI Embedding スキル Azure OpenAIでEmbedding化を行うスキル https://learn.microsoft.com/ja-jp/azure/search/cognitive-search-skill-azure-openai- embedding

    37 { "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill", "name": "#2", "context": "/document/pages/*", "resourceUri": "https://*****.openai.azure.com", "apiKey": ”<redacted>", "deploymentId": "text-embedding-3-large", "dimensions": 3072, }
  16. インデクサーの計算リソース インデクサーはAzure AI Searchのマネージド環境で実行される 38 環境 概要 プライベート環境 リソース固有の環境。 ここで実行されるインデクサージョブは最大24時間実行可能。

    プライベート環境で実行可能なインデクサージョブの数は検索ユニットで1つ。 プライベートエンドポイント経由で他のリソースにアクセスする必要があるインデクサージョブはこの環境で実 行する必要がある マルチテナント マネージドな環境。 ここで実行されるインデクサージョブは最大2時間実行可能。 実行できるインデクサージョブの数は不確定。
  17. アナライザーの違いによる分割の違い アナライザー 分割結果 standard [{'token': '私', 'startOffset': 0, 'endOffset': 1,

    'position': 0}, {'token': 'は', 'startOffset': 1, 'endOffset': 2, 'position': 1}, {'token': '機', 'startOffset': 2, 'endOffset': 3, 'position': 2}, {'token': '械', 'startOffset': 3, 'endOffset': 4, 'position': 3}, {'token': '学', 'startOffset': 4, 'endOffset': 5, 'position': 4}, {'token': '習', 'startOffset': 5, 'endOffset': 6, 'position': 5}, {'token': 'エンジニア', 'startOffset': 6, 'endOffset': 11, 'position': 6}, {'token': 'で', 'startOffset': 11, 'endOffset': 12, 'position': 7}, {'token': 'す', 'startOffset': 12, 'endOffset': 13, 'position': 8}] ja.lucene [{'token': '私', 'startOffset': 0, 'endOffset': 1, 'position': 0}, {'token': '機械', 'startOffset': 2, 'endOffset': 4, 'position': 2}, {'token': '学習', 'startOffset': 4, 'endOffset': 6, 'position': 3}, {'token': 'エンジニア', 'startOffset': 6, 'endOffset': 11, 'position': 4}] ja.microsoft [{'token': '私', 'startOffset': 0, 'endOffset': 1, 'position': 0}, {'token': '機械', 'startOffset': 2, 'endOffset': 4, 'position': 2}, {'token': '学習', 'startOffset': 4, 'endOffset': 6, 'position': 3}, {'token': 'エンジニア', 'startOffset': 6, 'endOffset': 11, 'position': 4}, {'token': 'です', 'startOffset': 11, 'endOffset': 13, 'position': 5}] keyword [{'token': '私は機械学習エンジニアです。', 'startOffset': 0, 'endOffset': 14, 'position': 0}] 45 「私は機械学習エンジニアです。」を異なるアナライザーで処理してみる テキストの分析 (Azure AI Search REST API)、https://learn.microsoft.com/ja-jp/rest/api/searchservice/test-analyzer
  18. ベクトル検索を理解するための用語と概念 46 用語 概要 Embedding (埋め込みベクトル、 分散表現) テキストなどのデータを多次元のベクトルとして表現したもの。 意味的に類似性の高いコンテンツはベクトル空間内で互いに近くに位置する。 vectorizer

    (ベクタライザー) テキストなどembeddingに変換するコンポーネント 最近傍検索 与えられたクエリポイント(ベクトル値)に最も近いデータポイントをベクトル空間から探索する 方法。 クエリポイントと各データポイントのベクトル間の距離を計算し、最も距離が小さいポイントを特 定する必要があるため大規模なデータほど計算コストが必要になる。 近似最近傍検索 与えられたクエリポイント(ベクトル値)に近似的に最も近いデータポイントをベクトル空間から 探索する方法。 正確さに犠牲にしパフォーマンスを向上させる方法であり、大規模なデータにも対応できる。
  19. On Your Dataでの検索モードの指定方法 “query_type”パラメータで「simple」「semantic」「vector」「vector_simple_hybrid」 「vector_semantic_hybrid」を指定することで変更が可能 50 POST https://{endpoint}/openai/deployments/{deployment-id}/chat/completions?api-version=2024-10-21 { "messages":

    [], "data_sources": [ { "type": "azure_search", "parameters": { "endpoint": "https://your-search-endpoint.search.windows.net/", "index_name": "{index name}", "authentication": { "type": "system_assigned_managed_identity” }, "query_type": "hybrid", "embedding_dependency": { "type": "deployment_name", "deployment_name": "text-embedding-3-large" } } } ] }
  20. 技術選定の背景 ▍RAG の Retrieval 部分を担う検索エンジン ⚫ Azure AI Searchを採用 ➢

    2023年時点では1,536次元のベクトル検索に対応したベクトル検索エンジンはAzure AI Searchしか選択肢がな かったと言える ▍Azure AI Searchへのデータ投入部分 ⚫ Azure Functions(Durable Functions)を使ったイベント駆動型の処理(Pushモデル)を採用 ➢ 2023年時点ではインデクサーはプレビュー機能が多く本番運用の検討ができなかった 55
  21. 実際のアプリケーション開発での難しいポイント – 検索インデックスの使い方 ▍サービスとしての検索インデックスの権限設定・設計 ⚫ Azure AI Searchではプラン(SKU)によって作成可能な検索インデックスの数に上限がある ⚫ Azure

    AI Searchで操作の対象となる検索インデックスは一度に一つのみ ⚫ 検索インデックスからのドキュメントの取得時のアクセス制御の機能はない 56 1. 権限をベースに検索インデックスを分ける設計 2. クエリで絞り込む設計 マルチテナント SaaS アプリケーションと Azure AI Search の設計パターン、 https://learn.microsoft.com/ja-jp/azure/search/search-modeling-multitenant-saas-applications
  22. 実際のアプリケーション開発での難しいポイント – 検索インデックスの使い方 ▍「権限をベースに検索インデックスを分ける設計」を採用 ⚫ アプリケーションの設計・実装としてシンプル ➢ 権限制御はAzure AI Searchの呼び出し前にアプリケーション側のロジックで実施可能

    ⚫ 埋め込みモデルの変化に対応が比較的に容易 ➢ ベクトルフィールドの次元数は検索インデックスの定義時点で決定しておく必要があるため 57 1. 権限をベースに検索インデックスを分ける設計
  23. 実際のアプリケーション開発での難しいポイント – 検索インデックスの使い方 ▍「権限をベースに検索インデックスを分ける設計」のデメリット ⚫ 一つのAzure AI Searchで作成可能な検索インデックス数の上限が影響する ➢ Azure

    AI Searchは既存リソースに対してプラン変更ができないため追加でリソースを払い出す必要がある ⚫ 少数のデータのみを扱う検索インデックスではリソースの使用効率が悪い可能性が高い 59 1. 権限をベースに検索インデックスを分ける設計 作成可能な検索インデックスを増やす にはリソースを追加する
  24. 知っておくと便利なAzure AI SearchのAPIや機能 ▍Autocomplete/Suggestions機能 ⚫ Azure AI Searchが提供するオートコンプリート機能 ⚫ RAGでは検索インデックス内の特定のファイルに絞って質問をしたいケースがある

    ➢ ファイル名やメタデータにSuggesterを構成しておくことで、検索インデックス内のファイル名の候補を表示 できるユーザー体験を向上できる可能性がある https://learn.microsoft.com/ja-jp/azure/search/search-add-autocomplete-suggestions ▍シノニム機能 ⚫ 同義語の変換によるクエリ拡張機能 ⚫ 専門用語や略語などが検索精度に影響する場合がある ⚫ シノニム機能を使うことでクエリを拡張し検索精度の向上が図れる ➢ 「RAG」→「 Retrieval Augmented Generation」 ➢ 「JAZUG」→「 Japan Azure User Group 」 https://learn.microsoft.com/ja-jp/azure/search/search-synonyms 64
  25. 知っておくと便利なAzure AI SearchのAPIや機能 ▍サービス統計API ⚫ 対象のAzure AI Searchリソースで作成可能な検索インデックス数の上限やストレージサイズの上限、 現在の使用状況などの統計情報を返すAPI ⚫

    アプリケーションでこれらの情報を把握するのに有用 https://learn.microsoft.com/ja-jp/rest/api/searchservice/get-service-statistics ▍Azure Monitorによる監視構成 ⚫ 他のAzureリソースと同様に診断設定からLog Analysisにログを流すことが可能 ⚫ ユーザーからのクエリ文字列などが簡単にキャプチャできる https://learn.microsoft.com/ja-jp/azure/search/monitor-azure-cognitive-search 65
  26. 知っておくと便利なその他のサービスのAPIや機能 ▍text-embedding-3-large/ text-embedding-3-small モデルの dimensions パラメータ ⚫ これらの埋め込みモデルはdimensionsパラメータによって埋め込みの次元圧縮に対応している ⚫ Azure

    AI Searchのストレージコストの削減やインデックス定義の簡素化にも活用できる https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models#embeddings ▍Azure AI Visionのマルチモーダル埋め込み ⚫ テキストと画像を同じベクトル空間でベクトル化する手法 ⚫ 画像データの検索やマルチベクトル検索などに活用できる https://learn.microsoft.com/ja-jp/azure/ai-services/computer-vision/concept-image-retrieval 66
  27. 本日扱ったトピック ▍Azure AI Searchの組み込みのチャンク化と埋め込み作成機能と Azure OpenAI ServiceのOn Your Data機能を使ったRAG ⚫

    GUIベースの操作や単純なAPIでRAGを試せることを紹介 ▍Azure AI Searchの基本概念や検索の仕組みの紹介 ⚫ Azure AI Searchを使いこなせるように検索の仕組みを紹介 ▍Azure AI Searchを使ったAIアプリケーション開発の裏側の紹介 ⚫ 実際にAzure AI Searchをアプリケーションに組み込む際に難しいポイントや重要なポイントを紹介 ⚫ その他に知っておくと便利な機能を紹介 68