Databricks生成AIクックブック - 2.1. データパイプライン

[2\.1\. Data pipeline — Databricks Generative AI Cookbook](https://ai-cookbook.io/nbs/2-fundamentals-unstructured-data-pipeline.html) [2024/6/20時点]の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

> [Databricks生成AIクックブック](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204)のコンテンツです。

# 2.1. データパイプライン

このガイドを通じて、RAGアプリケーションで使用する非構造化データの準備にフォーカスします。*非構造化*データとは、テキストや画像を含むPDF文書や、音声、動画のようなマルチメディアコンテンツのように、特定の構造や組織を持たないデータを指します。

非構造化データは、事前定義済みのデータモデルやスキーマがなく、構造やメタデータのみに基づくクエリーを不可能にしてしまいます。このため、非構造化データには、生のテキスト、画像、その他のコンテンツからセマンティックな意味を理解、抽出するためのテクニックが必要となります。

データ準備の過程で、RAGアプリケーションのデータパイプラインは生の非構造化データを受け取り、ユーザーのクエリーに対する適切性に基づいて検索できるようにするための個別のチャンクに変換します。データの前処理のキーとなるステップが以下に示されています。それぞれのステップには、チューニング可能な数多くのノブがあります。これらのノブに関するより深い議論に関しては、[RAGセクションのディープダイブ](https://qiita.com/taka_yayoi/items/c5d63ebe767ec9833464)をご覧ください。

![](https://ai-cookbook.io/_images/2_img.png)

このセクションの残りでは、*セマンティック検索*を用いた収集のための、非構造化データの準備のプロセスを説明します。セマンティック検索ではより適切な検索結果を提供するために、ユーザーのクエリーの文脈的な意味と意図を理解します。

セマンティック検索は、非構造化データに対するRAGアプリケーションの収集コンポーネントを実装する際に採用できるいくつかのアプローチの一つです。他の収集戦略については、[収集のノブのセクション](https://qiita.com/taka_yayoi/items/7097a738ea8e014d86f2#322-%E5%8F%8E%E9%9B%86)でカバーします。

以下に、非構造化データを用いたRAGアプリケーションにおけるデータパイプラインの典型的なステップを示します:

1. **生のドキュメントのパース:** 最初のステップでは、生データを使用可能なフォーマットに変換します。これには、PDFコレクションからのテキストや表、画像の抽出や、画像からテキストを抽出するためのoptical character recognition (OCR)テクニックの活用が含まれます。
1. **ドキュメントのメタデータの抽出(オプション):** あるケースでは、ドキュメントのタイトル、ページ数、URLやその他の情報を抽出、活用することで、収集ステップで適切なデータをより正確にクエリーできる助けとなります。
1. **ドキュメントのチャンク作成:** パースしたドキュメントがエンベディングモデルとLLMのコンテキストウィンドウにフィットするように、パースしたドキュメントをより小さな個別のチャンクに分割します。ドキュメント全体ではなく、これらのフォーカスされたチャンクを収集することで、LLMはレスポンスを生成する際に、よりターゲットされたコンテキストを得ることができます。
1. **チャンクのエンべディングの作成:** セマンティック検索を用いるRAGアプリケーションでは、*エンべディングモデル*と呼ばれる特殊なタイプの言語モデルが、上のステップのチャンクのそれぞれを、それぞれのコンテンツのピースの意味を内包する数値ベクトルや数値のリストに変換します。重要なことですが、これらベクトルは、表層レベルのキーワードではなく、テキストのセマンティックな意味を表現します。これはあとで、リテラルなテキストマッチではなく、意味に基づく検索を可能とします。
1. **ベクトルデータベースでチャンクのインデックスを作成:** 最後のステップは、チャンクのベクトル表現をチャンクのテキスト共に*ベクトルデータベース*にロードすることとなります。ベクトルデータベースは、エンべディングのようなベクトルデータの効率的な格納、検索のために設計された特殊なタイプのデータベースです。大規模なチャンクのパフォーマンスを維持するために、ベクトルデータベースは通常、検索の効率性を最適化する方法でベクトルのエンべディングを整理、マッピングするための様々なアルゴリズムを活用するベクトルインデックスを持っています。クエリー時には、ユーザーのリクエストはベクトルにえんべディング変換され、データベースは最も類似するチャンクのベクトルを特定するためにベクトルインデックスを活用し、対応するオリジナルのテキストチャンクを返却します。

この類似度計算プロセスは、計算コストが大きくなる場合があります。[Databricks Vector Search](https://docs.databricks.com/ja/generative-ai/vector-search.html)のようなベクトルインデックスは、多くの場合洗練された近似手法を用いることでエンべディングを効率的に整理、移動するためのメカニズムを提供することで、このプロセスを高速化します。これによって、ユーザーのクエリーに対して個別にそれぞれのエンべディングを比較することなしに、最も適切な結果の高速なランキングを可能にします。

データパイプラインのそれぞれのステップには、RAGアプリケーションの品質にインパクトを与えるエンジニアリングの意思決定が伴います。例えば、ステップ(3)において適切なチャンクサイズを選択することで、LLMは特化されつつもコンテキストが含まれる情報を受け取りつも、ステップ(4)において適切なエンべディングモデルを選択することで収集で返却されるチャンクの精度を決定づけることになります。

このデータ準備プロセスは、システムがクエリーに回答する前に行われるため、*オフライン*データ準備と呼ばれ、ユーザーがクエリーを送信する際に起動される*オンライン*ステップとは異なります。

- [目次](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204#%E7%9B%AE%E6%AC%A1)
- 前のセクション: [2. RAGの基礎](https://qiita.com/taka_yayoi/items/45cb187666242fcb542f)
- 次のセクション: [2.2. 収集、拡張、生成(RAGチェーン)](https://qiita.com/taka_yayoi/items/03bfe87bb2c0c21dde09)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)