この投稿では、LangChain で親ドキュメント取得機能を使用するプロセスを説明します。
LangChain で親ドキュメント取得機能を使用するには?
LangChain の親ドキュメント取得機能は、埋め込み時にドキュメントの意味が失われないように、ドキュメントを小さなチャンクに分割して使用できます。親ドキュメントは、ドキュメント全体、または小さなチャンクが抽出される大きなチャンクであると言えます。
LangChain で親ドキュメント取得機能を使用するプロセスを学習するには、このガイドを参照してください。
ステップ 1: モジュールをインストールする
まず、pip コマンドを使用して LangChain フレームワークをインストールし、親ドキュメント取得ツールの使用を開始します。
pip インストール ラングチェーン
Chroma データベース モジュールをインストールして、ドキュメントの埋め込みを保存し、そこからデータを取得します。
pip インストール chromadb
小さなチャンクを作成してドキュメントのトークンを取得するトークナイザーである tiktoken をインストールするには:
pipインストールtiktoken
Python ノートブックで次のコマンドを実行して、OpenAI モジュールを取得し、その依存関係とライブラリを取得します。
pip インストール openai
ステップ 2: 環境のセットアップとデータのアップロード
次のステップは、 環境をセットアップする OpenAI アカウントの API キーを使用します。
輸入 あなた輸入 ゲットパス
あなた 。 約 [ 「OPENAI_API_KEY」 ] = ゲットパス 。 ゲットパス ( 「OpenAI API キー:」 )
次に、ファイル ライブラリをインポートした後、ローカル システムからドキュメントをアップロードし、upload() メソッドを呼び出します。
から グーグル。 他 輸入 ファイルアップロードされた = ファイル。 アップロード ( )
ステップ 3: ライブラリをインポートする
次のステップには、LangChain フレームワークを使用して親ドキュメント取得ツールを使用するために必要なライブラリをインポートするためのコードが含まれています。
から ラングチェーン。 レトリーバー 輸入 親ドキュメントレトリバーから ラングチェーン。 ベクトルストア 輸入 彩度
から ラングチェーン。 埋め込み 輸入 OpenAI埋め込み
から ラングチェーン。 テキストスプリッター 輸入 RecursiveCharacterTextSplitter
から ラングチェーン。 ストレージ 輸入 インメモリストア
から ラングチェーン。 document_loaders 輸入 テキストローダー
ファイルのパスを指定した TextLoader() メソッドを使用してドキュメントをロードし、リトリーバーを構築します。
ローダー = [テキストローダー ( 「データ.txt」 ) 、
テキストローダー ( 「組合の状態.txt」 ) 、
]
ドキュメント = [ ]
のために 私 で ローダー:
ステップ 4: 完全なドキュメントの取得
ドキュメント/ファイルがモデルにロードされたら、ドキュメントの埋め込みを構築し、それらをベクター ストアに保存するだけです。
child_splitter = RecursiveCharacterTextSplitter ( チャンクサイズ = 400 )ベクトルストア = 彩度 (
コレクション名 = 「フルドキュメント」 、
埋め込み関数 = OpenAI埋め込み ( )
)
店 = インメモリストア ( )
レトリーバー = 親ドキュメントレトリバー (
ベクトルストア = ベクトルストア 、
ドキュメントストア = 店 、
child_splitter = child_splitter 、
)
ここで、取得者を使用して add_documents() メソッドを呼び出し、取得者をドキュメントにアクセスします。
レトリーバー。 add_documents ( ドキュメント 、 ID = なし )次のコードは、アップロードされたファイルのデータベースに保存されているドキュメントの埋め込みを抽出します。
リスト ( 店。 yield_keys ( ) )
ドキュメントの埋め込みを取得した後、ドキュメントから小さなチャンクを取得するクエリを指定して、similarity_search() メソッドを呼び出します。
サブドキュメント = ベクトルストア。 類似性検索 ( 「ジャスティス・ブライヤー」 )print() メソッドを呼び出して、クエリに基づいて前のコードで呼び出されたチャンクを表示します。
印刷する ( サブドキュメント [ 0 ] 。 ページコンテンツ )
次のコードを使用して、完全なretriever()関数を呼び出して、データベースに保存されているすべてのトークンを取得します。
取得したドキュメント = レトリーバー。 get_relevant_documents ( 「ジャスティス・ブライヤー」 )すべてのドキュメントを印刷するには、膨大な時間と処理能力が必要になるため、以前に取得したドキュメントの長さを取得するだけです。
のみ ( 取得したドキュメント [ 0 ] 。 ページコンテンツ )
ステップ 5: より大きなチャンクを取得する
このステップでは文書全体を処理するわけではありません。ただし、ドキュメントからより大きなシマリスを取り出し、そこから小さなチャンクを取得します。
親スプリッター = RecursiveCharacterTextSplitter ( チャンクサイズ = 2000年 )child_splitter = RecursiveCharacterTextSplitter ( チャンクサイズ = 400 )
ベクトルストア = 彩度 ( コレクション名 = 「split_parents」 、 埋め込み関数 = OpenAI埋め込み ( ) )
店 = インメモリストア ( )
「 ベクトルストア ' 変数:
レトリーバー = 親ドキュメントレトリバー (ベクトルストア = ベクトルストア 、
ドキュメントストア = 店 、
child_splitter = child_splitter 、
親スプリッター = 親スプリッター 、
)
レトリーバーを呼び出して、ベクトル ストアから大きなチャンクを取得します。 ドキュメント 関数の引数の変数:
レトリーバー。 add_documents ( ドキュメント )これらの文書の長さは、 ドキュメント 以下のコマンドで変数を変更します。
のみ ( リスト ( 店。 yield_keys ( ) ) )
前のスクリーンショットでは、ベクター ストアに 23 個のドキュメントが保存されていることが示されているため、大きなチャンクから小さなチャンクを取得するだけです。クエリは、 類似性検索() ベクター ストアからデータを取得するメソッド:
サブドキュメント = ベクトルストア。 類似性検索 ( 「ジャスティス・ブライヤー」 )前のコードで説明したクエリを使用して小さいチャンクを出力し、画面に表示します。
印刷する ( サブドキュメント [ 0 ] 。 ページコンテンツ )
ここで、クエリを関数の引数として使用して、データベースに格納されている完全なデータセットに対して取得機能を使用します。
取得したドキュメント = レトリーバー。 get_relevant_documents ( 「ジャスティス・ブライヤー」 )作成されデータベースに保存されている完全なチャンクの長さを取得します。
のみ ( 取得したドキュメント [ 0 ] 。 ページコンテンツ )
すべてのチャンクを表示することはできませんが、次のコードを使用すると、インデックス番号 0 の最初のチャンクが表示されます。
印刷する ( 取得したドキュメント [ 0 ] 。 ページコンテンツ
LangChain で親ドキュメント取得機能を使用するプロセスについては以上です。
結論
LangChain で親ドキュメント取得機能を使用するには、モジュールをインストールし、その API キーを使用して OpenAI 環境をセットアップするだけです。その後、親ドキュメント取得ツールを使用するために必要なライブラリを LangChain からインポートし、モデルのドキュメントを読み込みます。ユーザーは、親ドキュメントをドキュメント全体または大きなチャンクとして使用し、クエリを使用して小さなチャンクを取得できます。この投稿では、LangChain で親ドキュメント取得機能を使用するプロセスについて詳しく説明しました。