『LangChain & Flan-T5 XXL の解除 | 効率的なドキュメントクエリのガイド』
『LangChain & Flan-T5 XXL の解除 | ドキュメントクエリのガイド』
はじめに
大規模言語モデル(LLM)として知られる特定の人工知能モデルは、人間のようなテキストを理解し生成するために設計されています。”大規模”という用語は、それらが持つパラメータの数によってしばしば定量化されます。たとえば、OpenAIのGPT-3モデルは1750億個のパラメータを持っています。これらのモデルは、テキストの翻訳、質問への回答、エッセイの執筆、テキストの要約など、さまざまなタスクに使用することができます。LLMの機能を示すリソースやそれらとチャットアプリケーションを設定するためのガイダンスが豊富にありますが、実際のビジネスシナリオにおける適用可能性を徹底的に検討した試みはほとんどありません。この記事では、LangChain&Flan-T5 XXLを活用して、大規模言語ベースのアプリケーションを構築するためのドキュメントクエリングシステムを作成する方法について学びます。
学習目標
技術的な詳細に踏み込む前に、この記事の学習目標を確立しましょう:
- LangChainを活用して大規模言語ベースのアプリケーションを構築する方法を理解する
- テキスト対テキストフレームワークとFlan-T5モデルの簡潔な概要
- LangChain&任意のLLMモデルを使用してドキュメントクエリシステムを作成する方法
これらの概念を理解するために、これらのセクションについて詳しく説明します。
この記事は、データサイエンスブログマラソンの一部として公開されました。
LLMアプリケーションの構築におけるLangChainの役割
LangChainフレームワークは、チャットボット、生成型質問応答(GQA)、要約など、大規模言語モデル(LLM)の機能を活用したさまざまなアプリケーションの開発に設計されています。LangChainは、ドキュメントクエリングシステムを構築するための包括的なソリューションを提供します。これには、コーパスの前処理、チャンキングによるこれらのチャンクのベクトル空間への変換、クエリが行われたときに類似のチャンクを特定し、適切な回答にドキュメントを洗練するための言語モデルの活用が含まれます。
Flan-T5モデルの概要
Flan-T5は、Googleの研究者によって商業的に利用可能なオープンソースのLLMです。これはT5(Text-To-Text Transfer Transformer)モデルの派生モデルです。T5は、”テキスト対テキスト”フレームワークでトレーニングされた最先端の言語モデルです。さまざまなNLPタスクを実行するために、タスクをテキストベースの形式に変換することでトレーニングされます。FLANは、Finetuned Language Netの略です。
ドキュメントクエリシステムの構築に入りましょう
LangChainとFlan-T5 XXLモデルを使用して、Google Colabの無料版でこのドキュメントクエリシステムを構築することができます。以下の手順に従ってドキュメントクエリシステムを構築しましょう:
1:必要なライブラリのインポート
以下のライブラリをインポートする必要があります:
from langchain.document_loaders import TextLoader #テキストファイル用
from langchain.text_splitter import CharacterTextSplitter #テキスト分割
from langchain.embeddings import HuggingFaceEmbeddings #HuggingFaceモデルの使用
from langchain.vectorstores import FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
from langchain.document_loaders import UnstructuredPDFLoader #PDFの読み込み
from langchain.indexes import VectorstoreIndexCreator #ChromadbでDBインデックスをベクトル化
from langchain.chains import RetrievalQA
from langchain.document_loaders import UnstructuredURLLoader #URLをドキュメントローダーに読み込む
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "xxxxx"
2: PyPDFLoaderを使用してPDFを読み込む
ここでは、LangChainライブラリのPyPDFLoaderを使用してPDFファイル「Data-Analysis.pdf」を読み込みます。 「loader」オブジェクトには、「load_and_split()」という属性があり、ページに基づいてPDFを分割します。
#import csvfrom langchain.document_loaders import PyPDFLoader
# 現在の作業ディレクトリからPDFファイルを読み込む
loader = PyPDFLoader("Data-Analysis.pdf")
# PDFをページごとに分割する
pages = loader.load_and_split()
3: チャンクサイズに基づいてテキストをチャンク化する
埋め込みベクトルを生成するためのモデルは、入力として提供されるテキストフラグメントの最大制限があります。これらのモデルを使用してテキストデータの埋め込みを生成する場合、これらのモデルにデータを渡す前にデータを特定のサイズにチャンク化することが重要です。ここでは、RecursiveCharacterTextSplitterを使用してデータを分割します。これは、大きなテキストを指定したチャンクサイズに基づいて分割する方法です。これは、一連の文字を使用してこれを行います。
#import from langchain.text_splitter import RecursiveCharacterTextSplitter
# チャンクサイズ、オーバーラップ、セパレータを定義する
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1024,
chunk_overlap=64,
separators=['\n\n', '\n', '(?=>\. )', ' ', '']
)
docs = text_splitter.split_documents(pages)
4: テキストの数値埋め込みを取得する
テキスト、ドキュメント、画像、音声などの非構造化データを数値で表現するためには、埋め込みが必要です。数値形式は、埋め込む対象の文脈的な意味を捉えます。ここでは、HuggingFaceHubEmbeddingsオブジェクトを使用して、各ドキュメントに埋め込みを作成します。このオブジェクトは、「all-mpnet-base-v2」のセンテンストランスフォーマーモデルを使用して、文や段落を768次元の密ベクトル空間にマッピングします。
# 埋め込み
from langchain.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings()
5: 埋め込みをベクトルストアに保存する
埋め込みのためにベクトルストアが必要です。ここではFAISSを使用しています。FAISSは、Facebook AI Similarity Searchの略であり、効率的な検索とクラスタリングを行うために設計された強力なライブラリです。任意のサイズのベクトルのセットを検索できるアルゴリズムを提供し、利用可能なRAM容量を超える可能性のあるベクトルセットでも検索できます。
# ベクトル化されたデータベースを作成する
# ベクトルストア: https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
from langchain.vectorstores import FAISS
db = FAISS.from_documents(docs, embeddings)
6: Flan-T5 XXLを使用した類似検索
ここでは、Hugging Face Hubに接続してFlan-T5 XXLモデルを取得します。
モデルの温度やmax_lengthなど、モデルの設定を定義することができます。
load_qa_chain関数は、ドキュメントをLLMに提供するための簡単な方法を提供します。「stuff」というチェーンタイプを使用することで、関数はドキュメントのリストを取り、それらを単一のプロンプトに結合し、そのプロンプトをLLMに渡します。
llm=HuggingFaceHub(repo_id="google/flan-t5-xxl", model_kwargs={"temperature":1, "max_length":1000000})
chain = load_qa_chain(llm, chain_type="stuff")
#クエリ
query = "数量データ分析とは詳しく説明してくださいか?"
docs = db.similarity_search(query)
chain.run(input_documents=docs, question=query)
7: Flan-T5 XXLモデルを使用したQAチェーンの作成
RetrievalQAChainを使用して、リトリーバーを使用してドキュメントを取得し、取得したドキュメントに基づいて質問に答えるためのQAチェーンを作成します。これにより、言語モデルとVectorDBの検索機能が組み合わされます。
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff",
retriever=db.as_retriever(search_kwargs={"k": 3}))
8: PDFのクエリ
query = "データ分析の異なるタイプは何ですか?"
qa.run(query)
#出力
"記述的データ分析 理論に基づくデータ分析 データまたは物語性に基づく分析"
query = "記述的データ分析の意味は何ですか?"
qa.run(query)#import csv
#出力
"記述的データ分析は、データの処理と要約に関することにのみ関心を持っています。"
現実世界の応用
データの過剰な量から関連情報を取得するという課題が、データの氾濫する現代において常に存在しています。従来の検索エンジンは、特定のクエリに対して正確かつ文脈に敏感な回答を提供することができないことがあります。その結果、精巧な自然言語処理(NLP)の手法への需要が高まり、正確なドキュメントの質問応答(DQA)システムの実現を目指すようになりました。私たちが構築したようなドキュメントのクエリシステムは、PDF、Excelシート、HTMLファイルなど、あらゆる種類のドキュメントとの自動化されたインタラクションに非常に役立ちます。このアプローチを使用することで、多くの文脈に敏感な価値のある洞察を広範なドキュメントコレクションから抽出することができます。
結論
この記事では、LangChainを使用してPDFドキュメントからデータをロードする方法について説明しました。この機能をCSV、HTML、JSON、Markdownなどの他のドキュメントタイプにも拡張することができます。また、特定のチャンクサイズに基づいてデータを分割する方法、テキストの埋め込みを生成する前に必要なステップについても学びました。次に、HuggingFaceHubEmbeddingsを使用してドキュメントの埋め込みを取得しました。埋め込みをベクトルストアに保存した後、検索とLLMモデル「Flan-T5 XXL」を組み合わせて質問応答を行いました。ユーザーからの入力質問と取得したドキュメントをLLMに渡し、質問に対する回答を生成しました。
要点
- LangChainは、LLM、外部データソース、プロンプト、ユーザーインターフェースとのシームレスな対話を可能にする包括的なフレームワークを提供します。これにより、複数のモジュールからの「チェーン」コンポーネントを使用して、LLMを中心としたユニークなアプリケーションを作成することができます。
- Flan-T5は、商用利用可能なオープンソースのLLMです。これは、Google Researchが開発したT5(Text-To-Text Transfer Transformer)モデルのバリアントです。
- ベクトルストアは、高次元ベクトルの形式でデータを保存します。これらのベクトルは、さまざまな特徴や属性の数学的な表現です。ベクトルストアの設計により、密なベクトルの効率的な管理と高度な類似性検索機能が提供されます。
- LLMモデルとLangchainを使用してドキュメントベースの質問応答システムを構築するプロセスには、テキストファイルの取得とロード、ドキュメントの管理可能なセクションへの分割、これらのセクションを埋め込みに変換する手順、埋め込みをベクトルデータベースに保存し、ドキュメント上での質問応答を可能にするQAチェーンの作成が含まれます。
よくある質問
この記事に表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles