皆さんこんにちは、学生アンバサダーのジャンボです。このシリーズの目的はデータに基づいて質問に答えるロボットを作ることなので、データソースからテキスト情報を抽出することが必要になります。ただし、データ ソースの形式は PDF、Word、HTML、PPT など多様で、一部のデータ ソースはインターネットからのものもあります。これらの形式ではテキストを直接抽出できませんが、幸いなことに、Python には多くのサードパーティ ライブラリがあり、 LangChain はテキスト情報を抽出するのに役立ちます。LangChain はテキスト情報を統合するのにも役立ちます。必要なのは LangChain のインターフェイスを呼び出すことだけです。
公衆ネットワーク上で PDF 形式の契約書を見つけたので、この契約書を例にしてテキスト情報を抽出する方法を紹介します。
テキスト抽出
PyPDF2
LangChain には、 、などPyPDFium2
、PDF 用のサードパーティ ライブラリが多数含まれています。PDFMiner
ここではPyPDF2
例ます。
pip install pypdf
PyPDFLoader
PDF ファイルをロードし、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_overlap
2 つのテキストセグメント間の重なりの長さです。セグメントが長すぎて強制的に 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