見出し画像

LlamaIndexとChatGPT APIを活用して書籍の全文要約を行う

先日は書籍をOCRしたテキストデータの内容をChatGPT APIを利用して補正してみました。今回は早速LlamaIndexを利用して書籍の全文要約をしてみようと思います。

LlamaIndexとは?

LlamaIndex(旧:GPT Index)はチャットボット作成ツールとして紹介されることが多いようですが、LLMに設定できるコンテキストサイズの限界を超えるためのツールという方が正しい理解だと思います。

例えばChatGPT APIであるgpt-3.5-turboのリクエスト最大トークン数は4,096(日本語で4000文字ぐらい)ですが、この制限は応答トークン数も含んだトークン数なので、実際にはもっと小さな値になります。

例えば特定の書籍の内容を踏まえて回答して欲しい場合、書籍の内容をまるっとリクエストに含めれば良いことになりますが、そんなことをすれば当たり前のようにリクエストトークン数は制限を超えてしまいます。

LlamaIndexはこのような制限を超えるためのライブラリで、事前にコンテキストとなる情報をインデックスした上で、クエリ内の文字列に関係のある箇所をAPIコール時のプロンプトに埋め込むことで、コンテキストの効いた文字生成を実現しています。

インデックスの仕方やレスポンスの合成方法については各種オプションがあるようなので、詳しくは下記ドキュメントを参照のこと。

コード

# パッケージのインストール
pip install llama-index

パッケージをインストールしたら下記のコードでインデックスを作成します。推論器としてChatGPTLLMPredicatorを指定しています。

from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader
from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor

llm_predictor = ChatGPTLLMPredictor(
    prepend_messages = [
        {"role": "system", "content": "あなたは優秀な批評家です。明快な理由と共に本質をおさえた回答が得意です。"},
    ]
)

# dataディレクトリに入っているファイルをロード
documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex(
    documents=documents,
    llm_predictor=llm_predictor
)

以下のコードでクエリを実行できます。

response = index.query("この書籍の要点は何ですか?")
print(response)

クエリ毎にどのぐらいのトークンを消費しているか表示されます。

実行結果の検証

response = index.query("著者は人月によって何が引き起こされると考えていますか? また、問題が引き起こされないようにするためには、どんな対処が必要であると考えていますか? 1000字以上で答えて下さい。")
print(response)

以下は「人月の神話」のテキストを与えてインデックスを生成した上で、上記のクエリを実行した結果の出力です。

著者は、人月によってプロジェクトの進捗に影響があることを認識しています。例えば、プロジェクトの見積もりが誤っていた場合、必要な人月数が増えたり、スケジュールが遅れたりすることがあります。また、プロジェクトの進捗が遅れた場合、マネージャーはどのような対処策をとるべきかを考える必要があります。

著者は、プロジェクトの進捗を遅らせないために、いくつかの対処策を提案しています。まず、プロジェクトの見積もりを正確に行うことが重要です。見積もりが正確であれば、必要な人月数やスケジュールを適切に設定することができます。また、スケジュールを立て直すことも重要です。新しいスケジュールでは、十分な時間を確保して、仕事を慎重に行うことができます。これにより、今後スケジュールのし直しをする必要がなくなります。

さらに、著者は、プログラム事務係を導入することで、プログラマーが事務的な雑用から解放され、プログラムの品質が向上すると主張しています。プログラム事務係は、プログラミング製品ライブラリ内にあるチームの技術記録全般のメンテナンスを責任もって行うことにあるため、プログラマーはより専門的な仕事に集中することができます。

また、著者は、プロジェクトの進捗を遅らせないために、コンセプトの完全性が重要であると主張しています。プロジェクトのデザインや実装において、アーキテクチャとインプリメンテーションを厳密に区別することが必要であり、システムアーキテクトはアーキテクチャから逸脱せぬよう細心の注意を払わなければならないと述べています。

以上のように、著者は人月によってプロジェクトの進捗に影響があることを認識しており、正確な見積もりやスケジュールの立て直し、プログラム事務係の導入、コンセプトの完全性の維持など、様々な対処策を提案しています。これらの対処策を実行することで、プロジェクトの進捗を遅らせることなく、品質の高い成果物を生み出すことができます。

LlamaIndexによる「人月の神話」要約結果

要約品質の向上には、プロンプトとインデックスのチューニングがもっと必要ですね。

いいなと思ったら応援しよう!