このチュートリアルでは、 LangChain と、現在 watsonx.aiで利用可能な最新の IBM® Graniteモデルを使用して、いくつかのチャンク化戦略を試します。全体的な目標は、検索拡張生成 (RAG) を実行することです。
チャンク化とは、大きなテキストを小さなテキスト・セグメント、またはチャンクに分割するプロセスを指します。チャンク化の重要性を実感するために、まずRAGを理解することが役立ちます。RAGは、情報検索と大規模言語モデル(LLM)を組み合わせて、補完用データセットから関連情報を取得し、LLMの出力の品質を最適化する自然言語処理(NLP)の手法です。大量の文書を管理するためにチャンク化を使用し、文を意味のあるまとまり(チャンク)を含む小さなスニペットに分割します。こうしたテキスト・チャンクは、埋め込みモデルを使用してベクトル・データベースに埋め込んで補完することができます。こうして、RAGシステムはセマンティック検索を使用し、最も関連性の高いチャンクのみを取得することができます。コンテキスト・ウィンドウのサイズが小さいモデルが対応しやすいことから、小さなチャンクの方が大きなチャンクよりも優れたパフォーマンスを発揮する傾向があります。
チャンク化の主な要素としては以下が挙げられます。
さまざまなチャンク化戦略の選択肢が存在します。LLMアプリケーションの特定のユースケースに応じて、最も効果的なチャンク化の手法を選択することが重要です。一般的に使用されるチャンク化のプロセスには次のものがあります。
いくつかあるツールの中から選択することもできますが、このチュートリアルでは、Jupyter Notebookを使用するためにIBMアカウントを設定する方法について説明します。
IBM Cloudアカウントを使用して、watsonx.aiにログインします。
watsonx.aiプロジェクトを作成します。
プロジェクトIDはプロジェクト内から取得できます。[管理]タブをクリックし、[一般]ページの[詳細]セクションからプロジェクトIDをコピーしてください。このチュートリアルではこのIDが必要になります。
Jupyter Notebookを作成します。
このステップでは、このチュートリアルからコードをコピーできるノートブック環境が開きます。あるいは、このノートブックをローカル・システムにダウンロードし、watsonx.aiプロジェクトにアセットとしてアップロードすることもできます。さらにGraniteのチュートリアルを表示するには、 IBM Graniteコミュニティをご覧ください。このJupyter Notebookと使用されるデータセットは GitHub にあります。
watsonx.aiランタイム・サービス・インスタンスを作成します(適切なリージョンを選択し、無料インスタンスであるLiteプランを選択)。
APIキーを生成します。
watsonx.aiランタイム・サービス・インスタンスを、watsonx.aiで作成したプロジェクトに関連付けます。
資格情報を設定するには、ステップ1で生成したWATSONX_APIKEYおよびWATSONX_PROJECT_IDが必要です。また、APIのエンドポイントとして機能するURLも設定します。
このチュートリアルでは、LLMとしてGranite 3.1を使用します。LLMを初期化するには、モデル・パラメーターを設定する必要があります。最小・最大トークン制限などのモデル・パラメーターの詳細については、ドキュメンテーションを参照してください。
RAGパイプラインに使用しているコンテキストは、Granite 3.1のリリースに関するIBMの公式発表です。LangChainのWebBaseLoaderを使用すると、ウェブページからドキュメントにブログを直接ロードできます。
LangChainから入手できるこのチュートリアルで前述した各ストラテジーを実装するためのサンプルコードを見せましょう。
サイズ固定チャンク化を実装するには、LangChainの CapacityTextSplitter を使用し、chunk_sizeとchunk_overlapを設定できます。chunk_sizeは文字数で測定されます。さまざまな値を自由に試してください。また、段落を区別できるように、セパレーターを改行文字に設定します。トークン化には、granite-3.1-8b-instructトークナイザーを使用することができます。トークン化はテキストをLLMで処理できるトークンに分解します。
チャンクの1つをプリントして、構造をより深く理解することができます。
出力: (省略)
また、Verifyを使用してプロセスを検証したり、各チャンクに存在するトークンの数を確認したりすることもできます。このステップは任意であり、デモンストレーションを目的としています。
アウトプット:
成功です。チャンクサイズが適切に実装されているようです。
再帰的チャンク化には、LangChainのRecursive TextSplitterを使用できます。固定サイズのチャンク化の例と同様に、さまざまなサイズのチャンクやオーバーラップ・サイズを試すことができます。
アウトプット:
スプリッターは、デフォルトのセパレーター [“ \n \n”, 「\n」、「 “, “」] を使用してテキストを正常にチャンク化しました。
意味論的チャンク化には、埋め込みモデルまたはエンコーダーモデルが必要です。埋め込みモデルとして、granite-embedding-30m-englishモデルを使用できます。また、構造をより深く理解するために、チャンクの1つをプリントすることもできます。
出力: (省略)
LangChainの文書ベースのテキスト・スプリッターは、さまざまなファイルタイプの文書と互換性があります。このチュートリアルでは、マークダウン・ファイルを使用します。再帰的JSON分割、コード分割、HTML分割の例については、LangChainのドキュメンテーションを参照してください。
ロードできるマークダウン・ファイルの例としては、IBMの GitHubにあるGranite 3.1のREADMEファイルがあります。
アウトプット:
ここで、LangChainのMarkdownHeaderTextSplitterを使用して、Headings_to_split_onリストに設定したヘッダー・タイプごとにファイルを分割できるようになりました。また、例としてチャンクの 1 つを出力します。
アウトプット:
アウトプットからわかるように、チャンク化によりテキストがヘッダー・タイプごとに正常に分割されています。
さまざまなチャンク化戦略の実験ができました。RAGの実装に進みましょう。このチュートリアルでは、意味論的分割で作成したチャンクを使用し、ベクトル埋め込みに変換します。使用できるオープンソースのベクトル・ストアはChroma DBです。langchain_cromaパッケージを通じてChroma機能に簡単にアクセスできます。
Chromaベクトル・データベースを初期化し、埋め込みモデルを指定して、意味論的チャンク化で生成されたドキュメントを追加してみましょう。
アウトプット:
次に、LLM用のプロンプト・テンプレートの作成に進みます。このプロンプト・テンプレートを使用すると、最初のプロンプト構造を変更することなく、複数の質問をすることができます。レトリーバーとしてベクター・ストアを提供することもできます。このステップで、RAG構造が完成します。
完成したRAGワークフローを使用して、ユーザー・クエリーを実行してみましょう。1つ目は、構築したベクトル・ストアから追加のコンテキストを必要とせずにモデルを戦略的にプロンプトすることができ、モデルが組み込みの知識を使用しているか、それとも純粋なRAGコンテキストを使用しているのかをテストすることができます。Granite 3.1の発表ブログではDocling について言及しています。これはさまざまなドキュメント・タイプを解析し、マークダウン形式またはJSONに変換するためのIBMのツールです。LLMにDoctlingについて質問してみましょう。
アウトプット:
明らかに、モデルはDoclingに関する情報に基づいてトレーニングされておらず、外部ツールや情報がなければ、この情報を提供することはできません。構築したRAGチェーンに同じクエリーを実行してみましょう
アウトプット:
成功です。Graniteモデルは、RAGコンテキストを正しく使用して、セマンティックの一貫性を維持しながら、Doclingに関する正しい情報を教えてくれました。同じ成果は、RAGを使用しなければ不可能であることがわかりました。
このチュートリアルでは、RAGパイプラインを作成し、システムの検索精度を向上させるためにいくつかのチャンク化ストラテジーを実験しました。Granite 3.1モデルを使用して、コンテキストとして提供された文書に関連するユーザーのクエリに対する適切なモデル応答を生成することに成功しました。このRAGの実装に使用したテキストは、Granite 3.1のリリースを発表したibm.comのブログから読み込まれました。このモデルは、モデルの初期の知識ベースの一部ではなかったため、提供されたコンテキストを通じてのみアクセスできる情報を提供しました。
さらに詳しく知りたい方は、HTML構造のチャンク化と watsonx チャンク化を使用して、LLMの性能を比較するプロジェクトの成果をご覧ください。
AI開発者向けの次世代エンタープライズ・スタジオであるIBM watsonx.aiを使用して、生成AI、基盤モデル、機械学習機能をトレーニング、検証、チューニング、導入しましょう。わずかなデータとわずかな時間でAIアプリケーションを構築できます。
業界をリードするIBMのAI専門知識とソリューション製品群を使用すれば、ビジネスにAIを活用できます。
AIの導入で重要なワークフローと業務を再構築し、エクスペリエンス、リアルタイムの意思決定とビジネス価値を最大化します。