概要。
従来のデータエンジニアリングパイプラインとアプリケーションを拡張して、非構造化PDF、オーディオ、ビデオファイルのドキュメント抽出と前処理を含めることがますます一般的になりつつあります。この変化は、ビジネスにおける高度な生成AIアプリケーションの需要の高まりによって推進されており、 RAG (取得可能な拡張生成) モデル。この記事では、 Azure AI ドキュメント インテリジェンス これらの機能を拡張します。
以前の解決策では、 Azure AI 検索 統合されたベクトル化機能により、データを自動的にベクトル化できます。この機能は、取り込みと抽出から、データの強化と検索インデックスへのアップロードまで、パイプライン プロセス全体を管理します。カスタム コーディングは最小限で済みます (または不要)。ただし、制限があることに気付きました。現在のスキルでは、外部スキルをインポートするオプションがあるにもかかわらず、埋め込みテーブルなどのドキュメントから重要なコンテンツをすべて抽出できませんでした。
導入。
この投稿と付属のノートブックでは、Azure AI Document Intelligence の事前構築済みレイアウト モデルを利用して、PDF ドキュメントから重要なコンテンツ (表を含む) を抽出するソリューションを紹介します。その後、固定長チャンク オプションではなく、セマンティック チャンク機能を使用します。このアプローチは、PDF ドキュメントに埋め込まれた表を「解読」できなかった以前のソリューションの制限に対処し、検索取得の関連性と精度を向上させることを目的としています。
これは 2 つの投稿のうちの最初の投稿で、Azure AI Document Intelligence と LangChain を使用して Retrieval Augmented Generation (RAG) ワークフローを作成するソリューションを紹介します。LangChain Azure AI Document Intelligence ドキュメント ローダーを使用して、PDF ファイルからテーブルの値、段落、レイアウト情報を取り込み、抽出して取得します。出力はマークダウン形式で、LangChain のマークダウン ヘッダー スプリッターによって処理されます。このクラスは、Azure AI Document Intelligence サービスのセマンティック チャンク機能をサポートし、ソース ドキュメントのコンテキスト認識チャンクを生成します。
Azure AI Search Python SDK を使用して Azure AI Search インデックスを構築し、意味的にチャンク化されたドキュメントをこのインデックス コンテンツ フィールドに読み込み、ノートブックの最後にハイブリッド + セマンティック検索クエリを実行して検索結果の関連性を評価します。
以下はソリューションのわかりやすいアーキテクチャ図です。
この投稿が長くなりすぎて魅力が失われる前に、この議論に関連するソリューション アーキテクチャと対応するノートブック コードの実装の重要な要素について検討してみましょう。
ランチェーン – 取り込み、抽出、セマンティックチャンキング:
ランチェーン LLM (大規模言語モデル) を利用したアプリケーションを開発するためのフレームワークです。LangChain は、LLM を外部データ ソース、ユーザー入力クエリ、および GenAI アプリケーションのユース ケースの構築に必要なその他のコンポーネントやサービスに統合できるようにする、膨大な抽象化のコレクションを構築しました。このソリューションに LangChain を導入したのは、2 つの重要な抽象化を提供したためです。
1. Azure AI ドキュメント インテリジェンス ローダー APIは、Azure AI Document Intelligenceにデータを読み込み、ドキュメントから必要なコンテンツを抽出するためのインターフェイスを提供します。この概念実証では、埋め込みテーブルを含むPDFドキュメントを使用しています。 Azure BLOB ストレージ、ストレージ BLOB データ リーダーの RBAC ロールが、BLOB ストレージ リソースの Document Intelligence マネージド ID に付与されました。
Document Intelligence の「事前構築済みレイアウト」抽出モデルは、取り込みタスク中に提供されるパラメータ値の 1 つです。列ヘッダーを含むテーブルをキーと値のペアにフォーマットする機能 (LLM の読みやすさを向上させるため) をサポートし、テーブル値の元の構造を維持しながら、各テーブル行をテキスト行に変換します。
2. マークダウンヘッダーテキストスプリッター クラスは、抽出されたPDF文書から生成されたマークダウンファイルを指定されたヘッダーに従って分割します。マークダウンファイルはヘッダーで構造化されているため、コンテンツをセマンティックセクションに整理します。分割に使用されるヘッダーは、「分割するヘッダー‘ 構成。
チャンキングは、RAG ベースのソリューションの開発において重要な要素です。チャンキングには、固定サイズとセマンティックの 2 つの主要な方法があります。この PoC の目的は、セマンティック チャンキング メソッドを使用して RAG 応答の関連性と精度を評価することです。この手法では、抽出されたコンテンツを特定のコンテンツ ヘッダーまたはセクションに従って分割します。これは、オーバーラップ構成に依存してテキスト セグメント間のコンテキストの関連性を維持する固定サイズ メソッドとは対照的です。セマンティック チャンキングを使用すると、アプリケーションは文または段落内の意味的に一貫したフラグメントを識別できます。これらのフラグメントは個別に処理してから、情報、コンテキスト、または意味の整合性を失うことなく、セマンティック表現に再構成できます。テキストの固有の意味がチャンキング プロセスの指針となります。どのドキュメント抽出プロセスでも、チャンキング戦略は RAG ベースのソリューションにおけるクエリ応答の関連性と精度に大きな影響を与えるため、慎重に検討して計画する必要があります。ページあたりのトークンのサイズを決定すると、チャンキングの実装に役立ちます。
テキスト スプリッターの出力は、ノートブックの次のコード スニペットに示されているように、ドキュメント オブジェクトのリストです。
Azure AI 検索 – ベクトルインデックスの作成とロード:
Azure AI Search は、生成 AI アプリケーション内のデータ コンテンツに対して、大規模で安全かつ迅速な情報取得を提供します。このシナリオでは、チャンク化された PDF ドキュメントのコンテンツがベクトル化されて検索サービスに保存され、RAG ベースのアプリケーションに必要なミリ秒単位の取得時間が可能になります。このような迅速な取得は、Azure Blob ストレージを使用しては実現できません。検索サービスは、インデクサーを使用する場合を除き、BLOB ストレージのプライマリ データ ストアと対話しません。
私は Azure AI Search Python SDK を利用して、最初にスキーマを定義し、次にデータのインポート プロセスを開始することで、ベクター検索インデックスを構築しました。ベクター検索の構成では、より効率的なため、網羅的 k 近傍法 (KNN) ではなく階層的ナビゲート可能スモール ワールド (HNSW) アルゴリズムを選択しました。HNSW は、近似近傍をすばやく特定することで、近傍検索のスケーラブルなソリューションを提供します。これは、大規模で高次元のデータ アプリケーションに最適です。ベクター検索の構成の詳細については、 ここ。
私は、ベクター検索機能のためにセグメント化されたコンテンツをベクター化するために、Azure OpenAI text-embedding-ada-002 モデルを利用しています。インデックス内の各ドキュメントの ID フィールドは、base64 Python パッケージを使用するカスタム関数を使用して生成されます。以下のコード スニペットは、この概念実証のベクター インデックスの構成とデータ読み込みプロセスを示しています。
Azure AI ドキュメント インテリジェンス:
Azure AI Document Intelligence は、インテリジェントなドキュメント処理ソリューションの構築を可能にするクラウドベースの Azure AI サービスです。以前の調査では、RAG アプリケーションのデータ抽出、取り込み、取得の自動化ソリューションを可能にする Azure AI Search 統合ベクトル化機能を実装しました。これは多くのユース ケースに最適ですが、PDF ファイルに埋め込まれたテーブル データの検索を必要とするクエリには回答できませんでした。Azure AI Document Intelligence には、より幅広いドキュメント抽出モデルがあり、複雑な PDF ドキュメントやその他のファイル タイプ向けの機能がさらに充実しています。このサービスを選択した主な理由は 2 つあります。
- 事前に構築されたレイアウト モデルには、最も複雑な PDF ドキュメントを「解読」してデータを抽出する機能があります。Blob ストレージ コンテナーから PDF ドキュメントを直接取り込みました。
- セマンティック チャンキング手法は、固定サイズのチャンキング手法よりも優れた回答と検索応答を生成できる可能性のある魅力的なオプションのようです。
セマンティック検索とハイブリッド検索:
この検索機能は、健康保険の費用に関する私の質問に正確な回答を提供しました。以前のソリューションでは、適用された抽出スキルと基礎となるモデルが PDF ドキュメントを完全に解読できず、埋め込まれたテーブルから値を抽出できなかったため、この質問に対処できませんでした。
Azure Functions – セマンティック カーネル:
サーバーレス コンピューティング サービスである Azure Functions は、アプリケーションのセマンティック カーネルと LangChain ソース コードをホストします。セマンティック カーネルは、LangChain と同様に、Generative AI アプリケーションの開発を支援する LLM フレームワークです。次の投稿では、セマンティック カーネルを使用して、プロンプト、チャット サービス、埋め込み、ネイティブ関数 (プラグイン) などを統合し、Generative AI アプリケーションのさまざまなコンポーネントを調整する方法を説明します。
結論:
この投稿では、Azure AI Document Intelligence を利用して、事前に構築されたレイアウト モデルで PDF ドキュメントを手動で処理し、埋め込まれたテーブルを含むすべてのコンテンツを抽出する方法を紹介します。目的は、このコンテンツを使用して、ナレッジベースの Q&A エージェント内で LLM の応答を基盤化することです。
Azure AI Document Intelligence は、PDF などのさまざまな複雑なファイルの種類や形式を含む運用ユース ケースに推奨されます。Azure AI Search 統合ベクトル化オプションと比較して、アプリケーション要件を満たすのに適しているようです。さらに、プロンプト フロー Python SDK、責任あるプロンプト エンジニアリング ツールとテクニック、および Azure のコンテンツ安全対策を使用して、生成 AI アプリケーションの評価を検討する予定です。
PoCのコードは以下から入手可能です。 リポジトリ。