LangChain を使用してデータベースベースの Q&A ロボットを構築する (2): データ ソースからテキスト情報を抽出する

皆さんこんにちは、学生アンバサダーのジャンボです。このシリーズの目的はデータに基づいて質問に答えるロボットを作ることなので、データソースからテキスト情報を抽出することが必要になります。ただし、データ ソースの形式は PDF、Word、HTML、PPT など多様で、一部のデータ ソースはインターネットからのものもあります。これらの形式ではテキストを直接抽出できませんが、幸いなことに、Python には多くのサードパーティ ライブラリがあり、 LangChain はテキスト情報を抽出するのに役立ちます。LangChain はテキスト情報を統合するのにも役立ちます。必要なのは LangChain のインターフェイスを呼び出すことだけです。

公衆ネットワーク上で PDF 形式の契約書を見つけたので、この契約書を例にしてテキスト情報を抽出する方法を紹介します。

テキスト抽出

PyPDF2LangChain には、 、などPyPDFium2PDF 用のサードパーティ ライブラリが多数含まれています。PDFMinerここではPyPDF2例ます。

pip install pypdf

PyPDFLoaderPDF ファイルをロードし、loadテキスト情報を取得するメソッドを呼び出すために使用します。PDF リーダーは、PDF ファイルの各ページをテキストに変換し、その部分をリストとして返します。

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("./contract.pdf")
documents = loader.load()

テキストのセグメンテーション

しかし、ページごとに分割するだけではまだ十分ではありません。1 ページに含まれる単語が多すぎるためです。これらのテキストが将来プロンプト コンテキストに配置されると、大量のトークンが占有されることになります。また、これらのテキストは非常に重要です。現在の質問 質問は必ずしも役立つとは限らないため、これらのテキストを分割する必要があります。

LangChain には、コード、段落、Markdown 見出しを分割できるいくつかのスプリッターが用意されています。ここでは を使用しRecursiveCharacterTextSplitter、各テキストセグメントの長さが十分に小さくなるまで、文字に従ってテキストを分割します。デフォルトの分割リストは、["\n\n", "\n", " ", ""]段落、文、または単語を可能な限りまとめて配置できるようにするためのものです。

これにより、chunk_size各テキストの最大長が制限されます。chunk_overlap2 つのテキストセグメント間の重なりの長さです。セグメントが長すぎて強制的に 2 つのセグメントに分割されると、2 つのセグメントの間にテキストが重なり合い、文脈の一貫性が確保されます。

length_functionまた、テキストの長さを計算するために使用されるパラメータ もあり、デフォルトは ですlenトークン数に応じて分割したい場合は、tiktokenライブラリと組み合わせてご利用いただけます。

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)

このようにして、特定のセグメンテーションの詳細を考慮せずに、テキスト リストを簡単に取得できます。

もちろん、ここでは LangChain のテキスト抽出機能を簡単に紹介しますが、Word、HTML、PPT など、紹介されていない形式や対応する詳細が多数あります。行って自分の目で確認する必要があります。公式ドキュメントを参照してください。

前: LangChain を使用してデータベースベースの Q&A ロボットを構築する (1): 基本的な使い方
次: LangChain を使用してデータベースベースの Q&A ロボットを構築する (3): ReAct

おすすめ

転載: blog.csdn.net/chenjambo/article/details/131771078