チェーン可能ユーティリティ関数および一般的なユースケースについて

これらは、入力データを渡してベクトルを含む別の表現に変換する、チェーン可能で柔軟なステージのセットを意図しています。

提供されているチェーン可能ユーティリティ関数

一連のチェーン可能ユーティリティ(UTL)関数をエンドツーエンドのパイプラインに組み合せることができます。

各パイプラインまたは変換チェーンには、1つの関数または関数の組合せを含めることができます。これらの関数は、ソース・ドキュメントが他の表現(テキスト、チャンク、サマリーまたはベクトル)に変換されるときにソース・ドキュメントに適用されます。これらの関数は連鎖され、ある関数の出力が次の関数の入力として使用されます。

各チェーン可能ユーティリティ関数は、データをテキストに変換したり、テキストをチャンクに変換したり、抽出されたチャンクを埋込みに変換するなど、データを他の表現に変換する特定のタスクを実行します。

提供されているチェーン可能ユーティリティ関数には、概要レベルがあります。

関数 説明 入力および戻り値

UTL_TO_TEXT()

データ(Word、HTML、PDFドキュメントなど)をプレーン・テキストに変換します。

入力をCLOBまたはBLOBとして受け入れます。

ドキュメントのプレーン・テキスト・バージョンをCLOBとして返します。

UTL_TO_CHUNKS()

データをチャンクに変換します。

入力をプレーン・テキスト(CLOBまたはVARCHAR2)として受け入れます。

データを分割してチャンクの配列(CLOB)を返します。

UTL_TO_EMBEDDING()

データを単一の埋込みに変換します。

入力をプレーン・テキスト(CLOB)またはイメージ(BLOB)として受け入れます。

単一の埋込み(VECTOR)を返します。

UTL_TO_EMBEDDINGS()

チャンクの配列を埋込みの配列に変換します。

入力をチャンクの配列(VECTOR_ARRAY_T)として受け入れます。

埋込みの配列(VECTOR_ARRAY_T)を返します。

UTL_TO_SUMMARY()

大きなドキュメントや複雑なドキュメントなどのデータの簡潔なサマリーを生成します。

入力をプレーン・テキスト(CLOB)として受け入れます。

サマリーをプレーン・テキストでCLOBとして返します。

UTL_TO_GENERATE_TEXT()

プロンプトのテキストおよびイメージを生成します。

プロンプトの場合はテキスト・データ(CLOB)、イメージなどのメディア・ファイルの場合はメディア・データ(BLOB)として入力を受け入れます。

この情報を処理して、生成されたテキストを含むCLOBを返します。

RERANK()

類似度スコアに基づいて、ドキュメントの初期リストを再評価および並べ替えます。

入力を問合せ(CLOB)およびドキュメントのリスト(JSON)として受け入れます。

この情報を処理して、再ランク付けされたドキュメント・リストを含むJSONオブジェクトをスコアでソートして返します。

チェーンの順序

チェーン可能ユーティリティ関数は、モジュール型で柔軟になるように設計されています。ユース・ケースに応じて、様々な順序で変換チェーンを作成できます。

たとえば、UTL_TO_TEXTUTL_TO_CHUNKSおよびUTL_TO_EMBEDDINGSチェーン可能ユーティリティ関数のチェーンを作成することで、大きいPDFファイルからベクトルを直接抽出できます。

次の図に示すように、file-to-text-to-chunks-to-embeddingsチェーンは一連の操作をこの順序で実行します。

  1. UTL_TO_TEXTをコールして、PDFファイルをプレーン・テキスト・ファイルに変換します。
  2. UTL_TO_CHUNKSをコールして、結果のテキストを多数の適切なサイズのチャンクに分割します。
  3. UTL_TO_EMBEDDINGSをコールして、各チャンクのベクトル埋込みを生成します。

一般的なユース・ケース

これらの変換チェーンをカスタマイズおよび適用する方法を理解するために、一般的なユース・ケースをいくつか見てみましょう:

単一ステップまたは直接変換:

  • ドキュメントからベクトルへ:

    前述のように、一般的なユースケースは、一連のドキュメントからベクトル埋込みを自動的に生成することです。埋込みは、ベクトル埋込みモデルによって作成され、入力データのセマンティックな意味を捕らえた数値表現です(「Oracle AI Vector Searchの概要」を参照)。結果として得られる埋込みは、テキスト分類、質問応答、情報取得またはテキスト処理アプリケーションに使用できる高次元ベクトルです。

    • 一連のドキュメントをプレーン・テキストに変換し、結果のテキストを小さいチャンクに分割して、最終的に各チャンクに埋込みを1つのfile-to-text-to-chunks-to-embeddingsチェーンで生成できます。「チャンク化と埋込みの実行」を参照してください。

    • 小さいドキュメントまたはテキスト文字列の場合は、チャンク化(「データ変換のステージの理解」を参照)を省いて、単一のテキストから埋込みのチェーンで埋込みを直接生成できます。「埋込みの生成」を参照してください。

  • ドキュメントからベクトル、チャンク化および集計:

    別のユース・ケースは、ドキュメントの短いサマリーを生成し、そのサマリーからベクトルを自動的に抽出することです。

    サマリーを生成した後、単一のベクトルを生成(UTL_TO_EMBEDDINGを使用)するか、チャンク化して(UTL_TO_EMBEDDINGSを使用して)複数のベクトルを生成できます。

    • file-to-text-to-summary-to-embeddingチェーンで、ドキュメントをプレーン・テキストに変換し、テキストを簡潔な要点に要約して、要約されたテキストに単一の埋込みを作成できます。

    • file-to-text-to-summary-to-chunks-to-embeddingsチェーンで、ドキュメントをプレーン・テキストに変換し、テキストを要旨に要約し、要点をチャンクに分割して、要約された各チャンクに複数の埋込みを作成できます。

    チャンク化手法と要約手法の両方によってテキストが小さくなりますが、それらは異なる方法で行われます。チャンク化ではテキストが小さい断片に分割されますが、要約ではそのテキストのわかりやすい意味とコンテキストが自由形式の段落または箇条書きに抽出されます。

    ドキュメント全体を要約し、サマリーを各チャンクに追加することで、両方の長所が得られます。つまり、個々の部分がドキュメント全体についての大まかな理解も備えるようになります。

  • イメージからベクトルへ:

    イメージに基づいてベクトル埋込みを直接生成できます。このベクトル埋込みは、イメージの分類、オブジェクトの検出、大きいイメージのデータセットの比較、またはイメージを含むドキュメントに対するより効果的な類似検索に使用できます。埋込みは、イメージの各ビジュアル要素(図形、色、パターン、テクスチャ、アクション、オブジェクトなど)を抽出し、それに応じて各要素に数値を割り当てる、イメージ埋込みモデルまたはマルチモーダル埋込みモデルによって作成されます。

    「パブリックRESTプロバイダを使用したイメージから埋込みへの変換」を参照してください。

ステップバイステップまたはパラレル変換:

  • テキストからベクトルへ:

    一般的なユースケースとして、情報取得アプリケーションやチャットボットがあります。これらでは、ユーザーの自然言語テキスト問合せ文字列をその場で問合せベクトルに変換できます。次に、その問合せベクトルと既存のベクトルを比較して、高速な類似検索を実行できます。

    テキストから埋込みのチェーン内で、問合せベクトルをベクトル化してから、その問合せベクトルを索引ベクトルに対して実行できます。

    「Oracle Database内でのテキスト文字列から埋込みへの変換」「パブリックRESTプロバイダを使用したテキスト文字列から埋込みへの変換」および「ローカルRESTプロバイダOllamaを使用したテキスト文字列から埋込みへの変換」を参照してください。

  • テキストからチャンクへ:

    もう1つのユース・ケースとして、テキスト・トゥ・チャンク・チェーンで大量のテキストを、より小さく意味のある部分に分割するスタンドアロンのテキスト・チャンク・システムを構築します。

    この方法では柔軟性が向上してチャンクを試すことができます。チャンク化の結果を作成および検査して、それに応じて修正し、さらに進めることができます。

    「カスタム・チャンク化指定を使用したテキストからチャンクへの変換」および「ファイルからテキスト、チャンク、Oracle Database内の埋込みへの変換」を参照してください。

  • プロンプトまたはメディア・ファイルからテキストへ:

    大規模言語モデル(LLM)とやり取りして、テキスト生成、翻訳、要約、Q&Aなど、複数の言語関連のタスクを実行できます。自然言語のテキスト・データ(プロンプトの場合)またはメディア・データ(イメージの場合)をLLMを利用したチャット・インタフェースに入力できます。LLMは、この情報を処理してテキスト応答を生成します。

    • プロンプトからテキストへ:

      プロンプトには、LLMに尋ねる質問などの入力テキスト文字列を指定できます。たとえば、"Oracle Textとは何か"です。プロンプトには、一連の指示やコマンド(「Summarize the following ...」、「Draft an email asking for ...」、「Rewrite the following ...」など)を指定できます。LLMは、プロンプトに指定されたタスクに基づいて、テキスト形式の回答、説明またはサマリーで応答します。

      「パブリックRESTプロバイダを使用したテキストの生成」および「ローカルRESTプロバイダOllamaを使用したテキストの生成」を参照してください。

    • イメージからテキストへ:

      メディア・ファイル(イメージなど)をプロンプトに指定して、イメージのコンテンツのテキスト分析または説明を生成することもできます。これらは、イメージの分類、オブジェクトの検出または類似検索に使用できます。

      ここで、テキストの質問をプロンプトとしてイメージとともに追加で指定します。たとえば、プロンプトは「What is this image about?」または「How many birds are there in this image?」にすることができます。

      「パブリックRESTプロバイダを使用したイメージの説明」を参照してください。

    • テキストからサマリーへ:

      テキストからサマリー・チェーンで、スタンドアロンのテキスト要約システムを構築して、大きなドキュメントまたは複雑なドキュメントのサマリーを生成できます。

      この方法では柔軟性が向上してサマリーを試すことができます。ここでは、集計結果を作成、検査および修正して、さらに進めることができます。

      「パブリックRESTプロバイダを使用したサマリーの生成」を参照してください。

      ノート:

      要約に外部LLMを使用する以外に、Oracle Textを使用してデータベース内に要旨(サマリー)を生成できます。UTL_TO_SUMMARYを参照してください。
    • RAGの実装

      プロンプトには、検索拡張生成(RAG)の実装を介して、検索の結果を含めることができます。RAGを使用すると、LLMの使用時に生成される応答で発生する可能性のある不正確さとハルシネーションを軽減できます。

      「SQL RAGの例」を参照してください。

      また、再ランキングを利用して、LLMに取り込まれた情報の品質を向上させることができます。「RAG結果を向上させるのための再ランク付けの使用」を参照してください。

スケジュール・ベクトル・ユーティリティ・パッケージ

ワークロードおよび実装によっては、一部の変換チェーンで時間がかかる場合があるため、ベクトル・ユーティリティのPL/SQLパッケージをバックグラウンドで実行するようにスケジュールできます。

DBMS_SCHEDULER PL/SQLパッケージを使用すると、手動操作なしでこれらのパッケージを効果的にスケジュールできます。

Oracle Schedulerを使用してジョブを作成、実行および管理する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。