データ解析の刷新:OpenAI、LangChain、LlamaIndexで簡単に抽出

Revolutionizing Data Analysis Easy Extraction with OpenAI, LangChain, and LlamaIndex.

はじめに

OpenAIのAPIは、OpenAIによって開発されたもので、現在利用可能な最も高度な言語モデルの一部にアクセスできます。このAPIを活用し、LangChain & LlamaIndexを使用することで、開発者はこれらのモデルのパワーを自分たちのアプリケーション、製品、またはサービスに統合することができます。わずか数行のコードを使うだけで、OpenAIの言語モデルの豊富な知識と能力を活用し、エキサイティングな可能性が広がります。

OpenAIの言語モデルのコアは、Large Language Model、略してLLMにあります。LLMは、人間らしいテキストを生成し、複雑な言語構造の文脈を理解することができます。多様なデータを大量にトレーニングすることで、LLMは、様々なトピックにわたって文脈に即したテキストを理解し、生成するという顕著な能力を獲得しています。

学習目標

この記事では、次のエキサイティングな可能性を探求します。

  • OpenAIのAPIをLangChainとLlamaIndexと組み合わせて使用し、複数のPDFドキュメントから貴重な情報を簡単に抽出する方法。
  • 異なるデータ構造で値を抽出するためのプロンプトのフォーマット方法。
  • 効率的な検索と文書の取得のためにGPTSimpleVectorIndexを使用する方法。

この記事はData Science Blogathonの一環として公開されました。

LlamaIndexとLangChain

これら2つのオープンソースライブラリを使用して、大規模言語モデル(LLMs)のパワーを活用したアプリケーションを構築できます。LlamaIndexは、LLMsと外部データソースの間のシンプルなインターフェースを提供し、LangChainは、LLMで動作するアプリケーションを構築および管理するためのフレームワークを提供します。LlamaIndexとLangChainの両方が開発中であるにもかかわらず、アプリケーションの構築方法を革新する可能性があります。

必要なライブラリ

まず、必要なライブラリをインストールしてインポートしましょう。

!pip install llama-index==0.5.6 
!pip install langchain==0.0.148 
!pip install PyPDF2 

from llama_index import SimpleDirectoryReader, GPTSimpleVectorIndex, LLMPredictor, ServiceContext 
from langchain import OpenAI 
import PyPDF2 
import os

OpenAIのAPIサービスを使用するには、まずアカウントにサインアップする必要があります。サインアップに成功したら、アカウントに特定のAPIキーを作成できます。

APIキーを環境変数として設定することをお勧めします。これにより、コードやアプリケーションで明示的に公開せずに環境内でAPIキーを安全に保存および取得できます。この方法により、APIキーの機密性を維持しながら、必要なときに簡単にアクセスできます。

os.environ["OPENAI_API_KEY"] = “API KEY”

ドキュメントがあるカレントディレクトリを取得し、変数に保存しましょう。

current_directory = os.getcwd()

次に、LLMPredictorクラスのオブジェクトを作成します。LLMPredictorは、パラメータllmを受け入れます。ここでは、OpenAIのAPIから「text-davinci-003」というモデルを使用しています。

llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))

temperatureなどのオプションパラメータをいくつか指定することもできます。

  • temperature – このパラメータは、モデルの応答のランダム性を制御します。温度0は、モデルが常に最も可能性の高い次のトークンを選択することを意味します。
  • max_tokens – 出力を生成するために最大トークン数を使用します。

次に、ServiceContextクラスのオブジェクトを作成します。from_defaultsメソッドを使用して、一般的に使用されるいくつかのキーワード引数を初期化することで、ServiceContextクラスを初期化します。

service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)

この場合、llm_predictorオブジェクトに設定されたllm_predictorパラメータでfrom_defaultsメソッドを呼び出します。これにより、ServiceContextインスタンスのllm_predictor属性がllm_predictorオブジェクトに設定されます。

複数のドキュメントから情報を抽出する

次のステップは、ディレクトリに存在する各ドキュメントを反復処理することです。

for filename in os.listdir(current_directory):
  if os.path.isfile(os.path.join(current_directory, filename)):

最初の行は、current_directory内の各ファイルを反復処理するために使用し、2行目は、反復処理するファイルが有効なドキュメントであり、ディレクトリではないことを確認します。

documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()

SimpleDirectoryReaderクラスは、ディレクトリからデータを読み取ります。input_filesというパラメータを受け取り、filename変数を使用して単一のファイル名を動的に生成し、それを渡します。

SimpleDirectoryReaderインスタンスでload_dataメソッドが呼び出されます。このメソッドは、指定された入力ファイルからデータを読み込んでロードされたドキュメントを返します。

index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)

GPTSimpleVectorIndexクラスは、ドキュメントの効率的な検索と取得のためのインデックスを作成するために設計されています。以下のパラメータを使用して、クラスのfrom_documentsメソッドを呼び出します。

  • documents:このパラメータは、インデックス化されるドキュメントを表します。
  • service_context:このパラメータは、渡されるサービスコンテキストを表します。

これで、プロンプトを構築します。私は「サイバー犯罪」の下に登録された総事件数を抽出しようとしています。したがって、私のプロンプトは以下のようになります。

サイバー犯罪の下に登録された事件の総数は何ですか?

prompt = f"""
what is the total number of cases registered under Cyber Crimes?
"""

response = index.query(prompt)
print(response)

これで、上記のコード行を使用して以前に作成したインデックスをプロンプトでクエリーし、次のような応答を返します。

応答をカウントのみに変更するために、プロンプトを次のように書き直すことができます。

「サイバー犯罪の下に登録された事件の総数は何ですか?整数の結果のみを返す」

これにより、次のような応答が返されます。

応答を辞書などのデータ構造に保存することもできます。そのために、まず空の辞書を作成します。そして、応答を関連するファイル名、犯罪の年などの特定のキーに割り当てます。

LangChainとLlamaIndexを使用するための完全なコード

current_directory = os.getcwd()
def extract_data():

    llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))
    service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
    for filename in os.listdir(current_directory):
      if os.path.isfile(os.path.join(current_directory, filename)):
        documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()
        index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)
        
        prompt = f"""
        what is the total number of cases registered under Cyber Crimes.

        return the integer result only
        """
        response = index.query(prompt)
        cyber_crimes[filename] = response.response
        print(response)

結論

この記事では、OpenAIのAPIをLangChainとLlamaIndexと組み合わせて、PDFドキュメントから貴重な情報を簡単に抽出する方法について探索しました。

OpenAIのAPI、LangChain、LlamaIndexの組み合わせた可能性は限りなくあります。ここでは、これらのツールが提供できるものの表面しか触れていません。

キーポイント

  • LangChainとLlamaIndexにあるさまざまなコネクタを使用することで、私たちは選択した任意のデータソースにLLMモデルをシームレスに統合することができます。
  • 必要な情報を抽出するために、さまざまなデータ形式とソースを探索できます。
  • 私たちは、私たちの要件に合わせた任意のデータ構造を選択でき、抽出したデータを簡単に分析できます。シンプルなリスト、構造化されたデータベース、カスタマイズされた形式など、抽出したデータを最も効果的に保存できます。

さらに、モデル自体にレスポンスのフォーマット方法を指示することもできます。たとえば、出力をJSONオブジェクトにすることを好む場合、これを簡単に指定できます。

よくある質問

この記事で表示されるメディアはAnalytics Vidhyaの所有物ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more