私は数十冊の本を手作業で要約し始めましたが、要約ごとに数週間かかることがわかりました。それから私は、この AI 革命が起こっていることを思い出し、これらの領域に飛び込む予定はとうの昔に過ぎていたと決心しました。
大きなテキストを要約するためにラージ言語モデル (LLM) の使用を検討し始めたとき、その方法について明確な指示が見つかりませんでした。
このガイドでは、上記の変数の詳細を決定しテストする私のプロセスについて具体的に説明します。
完全なランキング データ、ウォークスルー、結果の概要は GitHub でご覧ください。
これらの用語の一部は、文脈に応じて異なる方法で使用されます (駄洒落ではありません)。
大規模言語モデル (LLM) : (別名モデル) 人間の言語を理解し、生成するために大規模なデータセットに基づいてトレーニングされた人工知能の一種。
例:世界を席巻したOpenAIのGPT3.5とGPT4。 (私たちの場合は、オープンソースまたはHugging Faceにある無料でダウンロード可能なモデルの中から選択しています。)
Retrieval Augmented Generation (RAG) : Meta AI によって開発された、LLM が特定のユーザー クエリ (ドキュメント Q/A) に対する回答を見つけるためにドキュメントをデータベースに保存する技術。
ユーザー指示: (別名プロンプト、またはコンテキスト) は、ユーザーが提供するクエリです。
例: 「次のテキストを要約します: { text }
」
システム プロンプト:ユーザー プロンプトの前に与えられる特別な指示。アシスタントの性格を形成するのに役立ちます。
例: 「あなたは役に立つ AI アシスタントです。」
コンテキスト:ユーザーの指示、場合によってはシステム プロンプト、場合によっては以前の質問と回答のペア。 (以前の Q/A ペアは、単にコンテキストとも呼ばれます)。
プロンプト スタイル: これらは、ユーザーの指示、システム プロンプト、および前の質問のコンテキストの違いを認識するために LLM がトレーニングされる特殊文字の組み合わせです。
例: <s>[INST] {systemPrompt} [INST] [INST] {previousQuestion} [/INST] {answer} </s> [INST] {userInstructions} [/INST]
7B:特定のモデル内のパラメーターの数を示します (一般に、大きいほど優れています)。パラメーターは、モデルがトレーニング中に学習し、予測を行うために使用される内部変数です。私の目的では、7B モデルは 12GB VRAM を搭載した GPU に適合する可能性があります。
GGUF:これは、コンシューマ ハードウェア (CPU/GPU) 向けに設計された LLM に特有の形式です。興味のあるモデルが何であれ、PrivateGPT で使用するには、その GGUF バージョン (通常はTheBlokeによって作成されています) を見つける必要があります。
Q2-Q8 0、K_M または K_S: GGUF リポジトリのファイルを参照すると、同じモデルの異なるバージョンが表示されます。数値が大きいほど、圧縮率が低くなり、品質が高くなります。 K_M の M は「中」を意味し、K_S の S は「小」を意味します。
VRAM:これは GPU のメモリ容量です。 GPU に完全にロードするには、利用可能な VRAM よりも小さいサイズのモデルが必要になります。
トークン:これは、LLM が言語を評価する指標です。各トークンはおよそ 4 文字で構成されます。
PrivateGPT (pgpt) は、ユーザーが自宅で自分のハードウェアで LLM を使用できるようにするユーザー インターフェイスとプログラム可能な API を提供するオープン ソース プロジェクトです。これにより、RAG がサポートするドキュメント Q/A のドキュメントを独自のローカル データベースにアップロードできます。
PrivateGPT は、プライベートなコンテキスト認識 AI アプリケーションの構築に必要なすべての構成要素を含むAPIを提供します。この API は OpenAI API 標準に従って拡張しており、通常の応答とストリーミング応答の両方をサポートします。つまり、ツールの 1 つで OpenAI API を使用できる場合、
local
モードで privateGPT を実行している場合は、コードを変更することなく、代わりに独自の PrivateGPT API を無料で使用できます。
私は、 PrivateGPT UI\RAG を使用して、章を予約するために質問することから始めました。
次に、要約用のテキストを事前に選択してみました。これは、ラウンド 1 のランキングのインスピレーションであり、私の結果がどれほど大きな違いを示すかを確認するためのものでした。 (事前に選択されたセクションの要約。)
次に、どのモデルがこのタスクに最も適しているかを調べたかったのですが、これがラウンド 2 のランキングにつながり、 Mistral-7B-Instruct-v0.2が明確な勝者となりました。
次に、プロンプト スタイルをランク付けし、期待どおりのプロンプト スタイルを取得するコードを作成することで、このモデルから最良の結果を得たいと考えました。
もちろんその後は、さまざまなシステム プロンプトをテストして、どれが最もパフォーマンスが高いかを確認する必要がありました。
次に、いくつかのユーザー プロンプトを試して、後処理が最小限で済む要約を生成するための正確な最適なプロンプトは何かを判断しました。
最終的には、この種のテストは LLM ごとに、またプロセスの改良の有効性を判断するために実施する必要があります。私の意見では、各モデルがその最も理想的な条件をターゲットにして初めて、相互に適切にランク付けできるようになります。
私がさまざまな LLM バリアントのテストを開始したとき、 mistral-7b-instruct-v0.1.Q4_K_M.gguf
は PrivateGPT のデフォルト セットアップ (CPU 上で実行するように作られている) の一部として付属していました。ここでは、Q8_0 バリアントを好みます。
同じタスクに対して 50 以上の異なる LLM を試してきましたが、Mistral-7B-Instruct が依然として最高の部類に入ります。特に v0.2 がリリースされて以来、これより優れたものは見つかりませんでした。
TLDR: Mistral-7B-Instruct-v0.2 - 要約タスクの現在のリーダーです。
Q/A を行うときに、小さいデータの塊をデータベースにアップロードし、毎回白紙の状態から開始すると、はるかに良い結果が得られることがすぐにわかりました。そこで、Q/A を目的として PDF を章に分割し始めました。
最初の分析では、次のタスクに対して 5 つの異なる LLM をテストしました。
モデル | 評価 | 検索精度 | キャラクター | 秒 | BS | フィラー | 短い | 良いBS |
---|---|---|---|---|---|---|---|---|
ヘルメス・トリスメギストス・ミストラル-7b | 68 | 56 | 62141 | 298 | 3 | 4 | 0 | 6 |
シンシア-7b-v2.0 | 63 | 59 | 28087 | 188 | 1 | 7 | 7 | 0 |
ミストラル-7b-命令-v0.1 | 51 | 56 | 21131 | 144 | 3 | 0 | 17 | 1 |
集団認知-v1.1-ミストラル-7b | 56 | 57 | 59453 | 377 | 3 | 10 | 0 | 0 |
kai-7b-指示 | 44 | 56 | 21480 | 117 | 5 | 0 | 18 | 0 |
この最初のラウンドでは、章の内容をさまざまなセクションに分割しました。
それぞれ 900 ~ 14000 文字 (または 225 ~ 3500 トークン)。
注: 数多くの大規模なコンテキスト モデルがリリースされているにもかかわらず、今のところ、私は依然としてコンテキストを小さくした方がより良い要約が得られると信じています。私は、要約タスクごとに 2750 トークン (11000 文字) を超えることを好みません。
驚くことではないが、概要は Q/A よりもパフォーマンスがはるかに優れていましたが、より細かく対象を絞ったコンテキストも含まれていました。
名前 | スコア | 生成される文字 | OG との差異 (%) | 生成までの秒数 | 短い | ごみ | BS | 埋める | 質問 | 詳細 |
---|---|---|---|---|---|---|---|---|---|---|
ヘルメス・トリスメギストス・ミストラル-7b | 74 | 45870 | -61 | 274 | 0 | 1 | 1 | 3 | 0 | 0 |
シンシア-7b-v2.0 | 60 | 26849 | -77 | 171 | 7 | 1 | 0 | 0 | 0 | 1 |
ミストラル-7b-命令-v0.1 | 58 | 25797 | -78 | 174 | 7 | 2 | 0 | 0 | 0 | 0 |
kai-7b-指示 | 59 | 25057 | -79 | 168 | 5 | 1 | 0 | 0 | 0 | 0 |
集団認知-v1.1-ミストラル-7b | 31 | 29509 | -75 | 214 | 0 | 1 | 1 | 2 | 17 | 8 |
完全なデータとランキングについては、 Google ドキュメントまたは GitHub ( QA スコア、 概要ランキング)でご覧ください。
繰り返しますが、私は 7B モデルの Q8 バージョンの方が好きです。
Mistral 7b Instruct v0.2 がリリースされたことを発見したことは、新たなテスト ラウンドを行う価値がありました。
プロンプトスタイルもテストしてみることにしました。 PrivateGPT は Mistral プロンプトには同梱されておらず、Mistral プロンプトは Llama2 プロンプトに似ていますが、デフォルト (llama-index) プロンプトの方がパフォーマンスが優れているようです。
要約のみ、Q/A は本の要約としては効率が低いだけです。
モデル | % 違い | スコア | コメント |
---|---|---|---|
シンシア 7b V2 | -64.43790093 | 28 | 良い |
ミストラル 7b 命令 v0.2 (デフォルトのプロンプト) | -60.81878508 | 33 | Vグッド |
ミストラル 7b 命令 v0.2 (Llama2 プロンプト) | -64.5871483 | 28 | 良い |
テス 7b v1.4 | -62.12938978 | 29 | あまり構造化されていない |
ラマ 2 7b 32k 指示 (デフォルト) | -61.39890553 | 27 | あまり構造化されていない。遅い |
完全なデータとランキングについては、 Google ドキュメントまたはGitHubでご覧ください。
前回のラウンドでは、 Mistral 7b Instruct v0.2 がデフォルトのプロンプトで llama2 よりもはるかに優れたパフォーマンスを示していることに気付きました。
実際、mistral プロンプトは llama2 に非常に似ていますが、まったく同じではありません。
system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
<s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
<s>[INST] {{systemPrompt}} [/INST]</s>[INST] {{userInstructions}} [/INST]
私はdefault
スタイルで出力のテストを開始し、次にllama2
プロンプトスタイルでテストしました。次に、ミストラル テンプレートのコーディングに取り掛かりました。
そのランキングの結果により、私は正しくコーディングできたという自信が得られました。
プロンプトスタイル | % 違い | スコア | 注記 |
---|---|---|---|
ミストラル | -50% | 51 | 完璧! |
デフォルト (ラマインデックス) | -42% | 43 | 不適切な見出し |
ラマ2 | -47% | 48 | 構造がありません |
完全なデータとランキングについては、 Google ドキュメントまたはGitHubでご覧ください。
プロンプト スタイルを設定したら、いくつかの異なるシステム プロンプトを試してみましたが、その結果には驚きました。
名前 | システムプロンプト | 変化 | スコア | コメント |
---|---|---|---|---|
なし | | -49.8 | 51 | 完璧 |
デフォルトのプロンプト | あなたは親切で、礼儀正しく、誠実なアシスタントです。 \n常にできるだけ親切に回答し、与えられたすべての指示に従ってください。 \n情報を推測したりでっちあげたりしないでください。 \n指定された指示やコンテキストを参照しないでください。」 | -58.5 | 39 | あまり良くない |
マイプロンプト1 | 「あなたは愛されています。要約、概要、構造化の専門家として行動してください。\nあなたの文章のスタイルは有益で論理的でなければなりません。」 | -54.4 | 44 | あまり良くない |
単純 | 「あなたは役立つ AI アシスタントです。出力の一部としてユーザーの指示やシステム コンテキストを含めないでください。」 | -52.5 | 42 | あまり良くない |
結局のところ、システム プロンプトを使用せずに要約を作成するには、 Mistral 7b Instruct v0.2が最適であることがわかりました。
おそらく、別のタスクでは異なる結果が得られるか、あるいはより適切なプロンプトが表示されるかもしれませんが、これはうまく機能するので、私はそれをいじりません。
完全なデータとランキングについては、 Google ドキュメントまたはGitHubでご覧ください。
私がすでに疑い始めているのは、プロンプト内の単語を減らすことでより良い結果が得られるということです。 Mistral 7b Instruct v0.2の最適なシステム プロンプトを見つけたので、どのユーザー プロンプトがそれに最も適しているかもテストしました。
| プロンプト | vs OG | スコア | 注記 |
---|---|---|---|---|
Propmt0 | 次の文章を要約した、簡潔かつ包括的なメモを書きます。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。外部情報を追加せずに、このテキストの重要な知識に焦点を当てます。 | 43% | 11 | |
プロンプト1 | 次の文章を要約した、簡潔かつ包括的なメモを書きます。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。外部情報を追加せずに、このテキストの重要な知識に焦点を当てます。 | 46% | 11 | 追加メモ |
プロンプト2 | 次の文章を要約した包括的なメモを書きます。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。 | 58% | 15 | |
プロンプト3 | 次のテキストの重要な部分を要約した簡潔な箇条書きメモを作成します。ネストされた箇条書きを使用し、見出しの用語と主要な概念を太字にし、読みやすさを確保するために空白を含めます。繰り返しを避けてください。 | 43% | 10 | |
プロンプト4 | 次の文章を要約した簡潔なメモを書きます。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。 | 41% | 14 | |
プロンプト5 | 次のテキストを要約した、包括的かつ簡潔なメモを作成します。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。 | 52% | 14 | 追加メモ |
完全なデータとランキングについては、 Google ドキュメントまたはGitHubでご覧ください。
おそらく、11b または 30b モデルをサポートできる強力なハードウェアがあれば、より説明的なプロンプトでより良い結果が得られるでしょう。 Mistral 7b Instruct v0.2 であっても、創造的な命令を試すことに前向きですが、今のところは既存のプロセスを改良することに満足しています。
次の文章を要約した包括的なメモを書きます。ネストされた箇条書きを使用します。見出し、用語、主要な概念を太字で示します。
この場合、包括的は「簡潔」よりもパフォーマンスが良く、さらには「包括的だが簡潔」よりも優れています。
ただし、これはユースケースによって異なることに注意してください。私が探しているのは、重要な知識を網羅した、非常に凝縮された読みやすいメモです。
基本的に、原作を読んでいなくても、特定の詳細すべてではないにしても、そこからどのような情報が伝えられているかはわかるはずです。原作を読んだとしても、後からはほとんど覚えていないでしょう。これらのメモは、主要なトピックへのクイックリファレンスです。
これらのテストから得た知識を使用して、539 ページの私の最初の完全な本を 5 ~ 6 時間で要約しました。信じられない!
要約ごとに何週間も費やす代わりに、最初の 9 冊の本の要約をわずか 10 日で完了しました。
ここで、公開されたテキストごとに以下のCopyLeaksの結果を確認できます。
特にこれが営利目的ではなく教育目的であることを考慮すると、この数字は許容範囲であると思います。
本 | モデル | 性格の違い | 同一 | マイナーな変更 | 言い換え | 一致した合計 |
---|---|---|---|---|---|---|
東洋の身体 西洋の心 | シンシア 7Bv2 | -75% | 3.5% | 1.1% | 0.8% | 5.4% |
治癒力 迷走神経 | ミストラル-7B-命令-v0.2; SynthIA-7B-v2.0 | -81% | 1.2% | 0.8% | 2.5% | 4.5% |
アーユルヴェーダと心 | ミストラル-7B-命令-v0.2; SynthIA-7B-v2.0 | -77% | 0.5% | 0.3% | 1.2% | 2% |
トラウマ生存者の断片化された自己を癒す | ミストラル-7B-命令-v0.2 | -75% | | | | 2% |
安全な基地 | ミストラル-7B-命令-v0.2 | -84% | 0.3% | 0.1% | 0.3% | 0.7% |
体がスコアを記録する | ミストラル-7B-命令-v0.2 | -74% | 0.1% | 0.2% | 0.3% | 0.5% |
チャクラの完全な本 | ミストラル-7B-命令-v0.2 | -70% | 0.3% | 0.3% | 0.4% | 1.1% |
愛着理論の50年 | ミストラル-7B-命令-v0.2 | -70% | 1.1% | 0.4% | 2.1% | 3.7% |
成人の愛着障害 | ミストラル-7B-命令-v0.2 | -62% | 1.1% | 1.2% | 0.7% | 3.1% |
心理学専攻の仲間 | ミストラル-7B-命令-v0.2 | -62% | 1.3% | 1.2% | 0.4% | 2.9% |
あなたの人生における心理学 | ミストラル-7B-命令-v0.2 | -74% | 0.6% | 0.4% | 0.5% | 1.6% |
要約ごとに何週間も費やす代わりに、最初の 9 冊の本の要約をわずか 10 日で完了しました。括弧内はオリジナルのページ数です。
私の手順を詳しく知りたい場合は、スクリプトと例が含まれているGitHub のウォークスルーを確認してください。
プロセスを改良し、自信を持ってプロンプト形式を使用できるようになったので、さらにテストを実施します。実際、私はすでにさらなるテストとランキングを実施しました (それらは次に公開します) が、もちろん、さらに多くのテストを再度実施し、学習を続けます。
AI を使用して実行するどのようなタスクでも最高の結果を得たい場合は、自分で実験を行って何が最も効果的かを確認する必要があると私は今でも信じています。人気モデルのランキングだけに頼るのではなく、ご自身の調査の参考にしてください。
ここにも登場します。