LLMによる長文ドキュメントの攻略

100ページの技術PDFから質問に回答するシステムを構築しました。

単純なスクリプトではうまくいきませんでした。数週間にわたり、トークン制限や高額なコストとの戦いが続きました。

最初はGPT-4に全文を入力する方法を試しました。これは10ページ程度なら機能しましたが、100ページになるとトークン上限に達しました。モデルは中盤の詳細を忘れてしまい、コストも高すぎました。

以下の手法を試しました:

  • 基本的なチャンキング:モデルが誤ったセクションを選択してしまい、文脈を見失いました。
  • Map-reduce:具体的な詳細が失われてしまいました。
  • スライディングウィンドウ:処理が遅すぎ、コストもかかりすぎました。

私は人間が読む方法を模倣することにしました。人間はまず目次をざっと読み、それから特定のセクションを読みます。

新しいワークフローは以下の通りです:

  • 階層構造を作成する。LLMを使用して、各チャンクの短い要約を作成する。
  • 要約と全文をベクトルデータベースに保存する。
  • ハイブリッド検索を使用する。キーワード検索とセマンティック検索を組み合わせる。
  • まず上位3つの要約を取得する。
  • それらの要約に対応する全文を取得する。
  • このコンテキストをLLMに渡す。

結果:

  • コストが70%削減されました。
  • 技術用語が正確になりました。
  • 精度が向上しました。

セットアップのヒント:

  • 要約にはGPT-3.5を使用する。
  • 最終的な回答にはGPT-4を使用する。
  • 早めにテストデータセットを作成する。
  • 20ページ未満のドキュメントについては、プロンプトに全文を詰め込む(Stuffing)。

出典: https://dev.to/__c1b9e06dc90a7e0a676b/how-i-finally-tamed-long-document-analysis-with-llms-it-wasnt-simple-chunking-5ed3