🌴
GPT等のトークン制限内で長文テキストを処理する方法
GPTのAPIなどで要約をしたりQ&Aに対応したりする時で、例えば論文などを参照したい場合にトークン上限に達してしまって処理できないことがあります。
そんな時の対処法として調べているといくつかの方法があったのでメモ。
1) RAG: 長文データから関連性の高いデータを取得して参照&生成する
- 長文データをベクトル化し、ベクトルデータベースに保存する
- タスク(質問)の内容でベクトル検索し、データベースから類似情報を取得
- 「取得した情報(コンテキスト)+入力タスク」でLLMのテキスト生成を行う
2) 長文データを要約して参照&生成する
RAGとは異なり、長文データを要約などでプロンプトに含められるように短く加工する方法として3つありました。
- MapReduce(マップリデュース)
- MapRerank(マップリランク)
- Refine(リファイン)
2-1: MapReduce
- 長文データを分割してそれぞれ要約する
- 全ての要約を結合して再要約する
- 要約の完成
2-2: MapRerank
- 長文データを分割し、それぞれ「分割テキスト+入力タスク(質問)」から「回答」と「自信度」を生成する
- 各回答の自信度スコアの一番大きいものを回答として選ぶ
- 回答の完成
2-3: Refine
- 長文データを分割する
- 1つ目の分割テキストを要約する
- 2つ目以降は前の要約とあわせて要約する(要約の改善を繰り返すイメージ)
- 要約の完成
まとめ
今回は主に長文テキストデータをLLMに渡す2つのパターンをまとめました。
「2) 長文データを要約して参照&生成する」は比較的簡単に利用できそうなので、LangChainを活用して試してみようと思います!
関連
Discussion