OpenAI 開発シリーズ (7): LLM プロンプト エンジニアリング (Prompt) と Chain of Thought (CoT)

全文は合計6,000文字以上、読了時間の目安は13~20分程度 | 乾物も充実、コレクションもオススメ!

この記事の目標: 大規模モデル (LLM) の新たな能力と推論能力を理解し、プロンプト プロジェクトの導入的なプロンプト手法に精通し、産業グレードのプロンプト プロセスを定義すること (重要)

画像-20230815154543241

1. 大規模言語モデル (LLM) の創発的能力

GPT が爆発的に普及するまでは、モデルが大きくなるほど、下流タスクにおけるモデルの能力が強化されるというのが常にコンセンサスでした。LLM の本来のトレーニング目標は、自然で一貫性のあるテキストを生成することです。LLM は事前トレーニング用に大量のテキストを受け入れるため、プロンプトに従ってテキストを完成および作成するのはモデルのネイティブ機能のみです。

ネイティブ機能のカテゴリでは、LLM モデルには小説、ニュース、詩を書くなどのテキストを作成する機能があり、GPT-3 モデルはこれらのことを行うために最初に使用されました。しかし、大規模言語モデルが新たな技術革命を引き起こすには、テキストを作成できるだけでは十分ではありません。この技術革命を爆発させる本当の理由は、大規模言語モデルの新たな能力です人々が大規模言語モデル テクノロジーに対して本当に楽観的である理由は、モデルが十分に大きい (パラメーターが十分に大きく、トレーニング データが十分に大きい) 場合、モデルは「創発能力」を示すからです

新しいモデルが継続的に導入されることで、大規模言語モデルは研究者の予想を超える多くの機能を示してきました。このように、小規模モデルには現れず、大規模モデルには現れる予測不可能な機能を 創発機能 と呼び、Jason Wei らの研究では次のように定義されています。

論文: Emergent Abilities of Large Language Models には次のように書かれています:能力は、より小さなモデルには存在しないが、より大きなモデルには存在する場合に創発されます

言い換えれば: いわゆる創発機能 (EmergentCapabilities) は、特定のタスクのトレーニングを行わずに、合理的なプロンプトの下でこれらのタスクを処理するモデルの能力を指します。場合によっては、創発機能はモデルの潜在力として理解することもできます。その技術的潜在力は巨大です。 LLM爆発の根本原因。

大規模な言語モデル (完了モデルなど) では、対話データのトレーニングを受けていないため、対話能力は実際にはその創発的な能力の現れであり、一般的に使用される翻訳、プログラミング、推論、意味理解などはすべて属します。大規模な言語モデルの出現。

2. ラージモデル(LLM)の創発能力を刺激する方法

大規模な言語モデルの創発的な力を引き出すには、迅速なエンジニアリングと微調整という 2 つのアプローチがあります

2.1 即時エンジニアリング(即時エンジニアリング)

ヒント エンジニアリングとは、特別なヒントを設計することによってモデルの創発的な能力を動機付けることを指しますこの方法では、モデルの追加のトレーニングは必要ありませんが、必要なのは、適切なヒントを設計することによって、モデルが特定のタスクを完了するようにガイドすることだけです。ヒント エンジニアリングは、モデル パラメーターを更新せずに新しい問題を迅速に解決するためによく使用されます

より合理的なプロンプトを入力することで、より効果的な結果を出力するようにモデルをガイドします。これは本質的に、モデルの能力をガイドし、刺激する方法です。

このアプローチは GPT3 論文で初めて提案されました。ヒント (自然言語コマンドなど) が与えられると、モデルはパラメーターを更新せずに応答を返すことができますこれに基づいて、Brown らは同じ研究で、プロンプトに入力例と出力例を追加し、モデルに推論プロセスを完了させるフューショット プロンプトを提案しました。このプロセスは、下流タスクによって指定された入出力とまったく同じであり、タスクを完了するプロセスに他の中間プロセスはありません。以下の図は、さまざまな大規模モデルでの少数ショットでのさまざまなタスクのテスト結果を示しています。

画像-20230718145029201

このうち、横軸はモデルトレーニングの事前トレーニングスケール(FLOP:浮動小数点演算、浮動小数点演算)です。モデルのトレーニングスケールはパラメーターだけでなく、データ量やデータ数にも関係します。したがって、モデルのサイズを包括的に表すために FLOP が使用されます)、縦軸は下流のタスクのパフォーマンスです。モデル サイズが特定の範囲内にある場合 (ほとんどの FLOP は1 0 22 10^{22}にある) であることがわかります。1 022 )、モデルの能力はモデル サイズの増加とともに増加するのではなく、モデルが臨界値を超えるとすぐに効果が向上し、この向上はモデルの構造と明らかな関係はありません。

現在、大規模なモデルにプロンプ​​トを追加する方法がますます増えており、主な傾向として、通常の少数ショット モード (入力と出力のみ) のプロンプト モードと比較して、新しい方法ではモデルがタスクを完了できるようになります。いくつかの典型的な方法のような、より多くの中間プロセスがあります: 思考連鎖、スクラッチパッドなど モデルの推論プロセスを改良することにより、モデルの下流タスクの効果が向上します。次の図は、それぞれの効果を示していますモデル上のヒントを強化する方法:

画像-20230718150013397

上図では、数学的問題、命令回復、数値計算、モデル校正の 4 つの具体的なタスク タイプが使用されており、横軸はトレーニング スケール、縦軸は下流タスクの評価方法です。上の図と同様に、ある規模を超えると、モデルの能力はモデルの規模に応じて急激に増加しますが、これ以下の現象はあまり顕著ではありません。異なるタスクでは異なる励起方法が使用され、モデルが示す能力も異なります。これは継続的な研究のプロセスです。

ヒント エンジニアリングを通じてモデルの新たな機能を動機付けることの長所と短所は明らかです。

  • 利点: これは、試行および実装の障壁が低い、より軽量なブートストラップ メソッドです
  • 長所と短所: モデル ダイアログのコンテキストによって制限され、プロンプトの量も制限されます

2.2 微調整

微調整とは、事前にトレーニングされた大規模な言語モデルに基づいて、特定のタスクに対する追加のトレーニングを指します。このアプローチではモデルの追加のトレーニングが必要ですが、特定のタスクにおけるモデルのパフォーマンスを向上させることができます。微調整は、ヒント エンジニアリングでは解決できない問題を解決するためによく使用されます

言い換えれば、追加のサンプルを入力することでモデルの一部のパラメーターを変更し、それによってモデルの特定の機能を強化します本質的に、これはモデルの能力を導き、刺激する方法でもあります。

微調整については後で書くとかなりのスペースが必要になるため、ここでは詳しく説明しません

ヒントエンジニアリングと比較した微調整方法:

  • 利点: モデルの能力の特定の側面を永続的に強化できます

  • 長所と短所: モデル部分を再トレーニングする必要があり、トレーニング コストが高く、データを慎重に準備する必要があり、技術的な実装がより困難です

これら 2 つの方法には、それぞれ独自のアプリケーション シナリオがあり、** プロンプト エンジニアリングによって解決される問題は、多くの場合、微調整されていません (小さな意味空間での推論問題など)。微調整は、通常、解決できない問題を解決するために使用されます。特徴量エンジニアリングによって解決されます。**これらは、上流と下流の技術関係としてより頻繁に使用されます。たとえば、ローカルのナレッジ ベースの質問と回答をカスタマイズしたい場合、最良の方法は、ヒント プロジェクトを使用してデータをマークし、その後、微調整するためにマークされたデータ。

現在、大規模モデルの創発能力を刺激するためにヒント エンジニアリングと微調整が提案されていますが、モデルの本来の能力と比較すると、モデルの創発能力は非常に不安定であるため、ヒント エンジニアリングと微調整の手法を使用する必要があります。導き、刺激する モデルの能力を発現させるのは非常に困難です。

3. エンジニアリングの概念を促す

3.1 プロンプトエンジニアリングに対する誤解

多くの人は、プロンプト プロジェクトは次のようなものだと考えています

  • 単純なプロンプト接尾辞を追加します。「モデルに段階的に考えて段階的に答えるように依頼してください...」など。
  • 標準的な応答テンプレート「例として回答してください...」を提供します。
  • ロール ID を「XXX として返信してください...」と設定します。

技術的な内容はほとんどなく、主に多数のプロンプト単語テンプレート、またはオンライン ナビゲーション サイトにあるいわゆる「何万ものプロンプト テンプレート」を暗記することに依存しており、基本的には誰でもマスターできます。

ただし、実際のアプリケーションでは、効率的なプロンプト エンジニアリングには次の効果があります。

  • モデル思考を効果的に導きます。
  • 人間の経験と技術革新に頼って、複雑なシリアルまたはネストされたプロンプト プロセスを構築します。

人間の経験と複雑な計算を完璧に組み合わせることで、業界の多くの課題を解決するモデルの可能性を真に刺激することができ、これは非常に価値のある技術分野です

たとえば、産業グレードのプロンプト エンジニアリング プロセスは次のとおりです。

20

3.2 言語プロンプトプロジェクト (LanguagePrompting)

プロンプト プロジェクトの場合、言語プロンプト プロジェクト (Language Prompting) とコード プロンプト プロジェクト (Code Prompting) にさらに分けることができます。

言語プロンプト エンジニアリングは、実際には、ChatGPT を使用して自然言語を通じて複雑な質問や意図を表現し、複数回の対話を行うプロセスとして理解できます

フレンドリーで非技術者に適していますが、欠点もあります。たとえば、自然言語のあいまいさにより、モデルの誤った理解や誤解を招く回答が生じる可能性があります。文法上の誤りや不規則な単語が存在し、理解が困難になる可能性があります。モデルを正しく理解するための問題; インタラクション手法ではユーザーの意図や推論プロセスを正確に理解することが難しく、解釈可能性が低い これらの問題はすべて存在するため、優れた言語プロンプト プロジェクトには次の基本原則が必要です

  1. 明確で曖昧さのない質問の説明:モデルが質問の意図を正確に理解し、正確な回答を提供できるように、明確で曖昧さのない質問の説明を提供します。あいまいな、あいまいな、またはあいまいな問題の説明を避けてください。

例: 出力をカンマ区切りリストにすることが目的である場合は、カンマ区切りリストを返すように依頼してください。

即案: 答えがわからないときに「わかりません」と言わせたい場合は、「答えがわからない場合は、「わかりません」と言ってください」と伝えます。

  1. 必要なコンテキスト情報を提供する: モデルが問題をよりよく理解できるように、ケースバイケースで適切なコンテキスト情報を提供します。コンテキスト情報には、関連する背景、以前の言及、またはその他の関連する詳細が含まれます。

  2. 複雑なタスクをより単純なサブタスクに分割し、重要な情報を提供する: 質問が複雑な場合、または特定の回答が必要な場合は、複雑なタスクをより単純なサブタスクに分割し、モデルが問題をよりよく理解して解決できるように重要な情報を段階的に提供できます。

  3. 冗長または冗長な情報を避ける: モデルの理解や回答を妨げないように、冗長または不必要な情報の提供を避けるようにしてください。質問は簡潔にし、質問に関連する重要な情報を提供します

  4. 回答の検証と質問: モデルによって与えられた回答について、回答の正確性と合理性を保証するために検証と質問を行います。必要に応じて、フィードバックや追加の説明を提供して、モデルの応答をさらにガイドします。

  5. 別の表現を試す: モデルが特定の質問に正確に答えることができない場合は、モデルが理解し、正しい答えを与えるためのより多くのヒントを提供するために、別の表現や角度で質問を試みます。

  6. 複数の出力を生成し、モデルを使用して最適な出力を選択します

3.3 コードプロンプト

コード ヒンティング エンジニアリングとは、特別なコード ヒントを設計することによってモデルの創発的な能力を刺激することを指しますこの方法では、モデルの追加のトレーニングは必要ありませんが、適切なコード ヒントを設計することによって、モデルが特定のタスクを完了するようにガイドするだけで済みます。コード ヒント エンジニアリングは、通常、言語ヒント エンジニアリングでは解決できない問題を解決するために使用されます。その後のモデル開発のキーポイント、最優先事項。これについては後ほど説明するスペースがあるので、ここでは詳しく説明しません。

3.4 クラシックなフューショット

プロジェクトにプロンプ​​トを表示する最も簡単な方法は、いくつかの同様の質問とその質問に対する回答を入力し、モデルにそこから学習させ、同じプロンプトの最後に新しい質問をして、モデルの推論能力を向上させることです。この方法は、ワンショットまたはフューショット プロンプト方法としても知られています

ワンショットとフューショットは、論文「言語モデルは少数ショット学習者である」で OpenAI 研究チームによって最初に提案されました。この論文は、ヒント エンジニアリング手法の創始者でもあります。ヒントの 2 つのコア手法を紹介するだけでなく、エンジニアリングだけでなく、その背後にある具体的な理由も詳しく説明してください。

この論文では、そのような現象について説明しています: OpenAI 研究チームは、175b パラメーターを使用して GTP3 言語モデルのサイズを増加し、勾配や微調整を更新することなく、このモデルでその少数ショット能力を測定しました。そしてその結果は突然のジャンプです。次の 3 つのグラフに対して 1 パス分析が行われました。

2

この論文の結論は次の 2 点です。

  • ゼロショット、ワンショット、数ショットでは、スケールが大きいほど効果が高くなります
  • 数ショットのパラメータが微調整より悪くない限り

穴あけの原理が気に入ったら、自分で論文を読んでみてください。とても刺激的です。

特定のアプリケーションに関する限り、Few-shot Prompt メソッドは複雑ではなく、プロンプトの一部としていくつかの同様の質問と回答を入力するだけで済みます

  • **ステップ 1: ゼロショットヒント法**

ゼロショットは、大規模モデルにプロンプ​​トを与えず、直接質問し、大規模モデルに独自の決定を行わせることとして理解できますのように:

プロンプト 1

TB のレビューを送信しました。良いレビュー、中程度のレビュー、悪いレビューのいずれであるかを特定するのにご協力ください。
コメント: この靴はとても履きやすく、足が擦れません。
評価カテゴリー:

大きなモデルからの応答は次のとおりです。

画像-20230815120623009

プロンプト 2

TB レビューを送信しました。良いレビュー、中程度のレビュー、悪いレビューのいずれであるかを特定するのにご協力ください。
コメント: この靴は履きにくくて、長時間履いていると足から血が出てしまいます。
評価カテゴリー:

大きなモデルからの応答は次のとおりです。

画像-20230815120849138

ChatGPT に良いレビュー、中評価、悪いレビューを分ける基準を何も与えずに、この基本的な識別能力を備えていることがわかり、直接質問して回答を得る方法がゼロショットであることがわかります。

プロンプト 3

文中でwhatpuを使うのを手伝ってください

この時点で、モデルの応答は次のようになります。

画像-20230815140446231

大きなモデルが未知の知識に遭遇した場合、ゼロショット プロンプトを使用してもより良い応答を得るのは不可能ですが、学習能力がないわけではありません。それでも非常に優れているため、高度なプロンプトを使用します。この方法はフューショットと呼ばれます。

  • **ステップ 2: 数ショット プロンプト方式**

少数ショット プロンプト法は、次のように簡単に理解できます。質問する前に、まず大規模なモデルに例と説明を与えて学習させ、模倣させることで、モデルにある程度の一般化能力を与えます例えば:

プロンプト 1

文本:「ワトプ」はタンザニア原産の小さな毛むくじゃらの動物です。

用 “whatpu” 造句:私たちはアフリカを旅行していて、とてもかわいい whatpu を見ました。

文本:「ファーダドル」とは、非常に速く飛び跳ねることを意味します。

文の中で「ファーダドル」を使用します。

大きなモデルからの応答は次のとおりです。

画像-20230815141132529

上記のプロセスから、大規模モデルは 1 つの例だけでタスクの実行方法を学習できることがわかりますが、これは確かに強力な創発的能力ですが、推論という複雑なタスクに関しては、次のようにまだ無力です

プロンプト 3

今、次の数字があります: 1、3、5、23、69、70、10、84、923、32。これらの数字のうち、奇数はいくつ存在し、偶数はいくつ存在しますか?

画像-20230718170115575

3.5 思考連鎖 (CoT) のヒント

思考チェーンの本質は、複雑なタスクを複数の単純なサブタスクに分解することです。思考チェーンは、思考プロセスにおける連続的な論理的推論ステップまたは関連するシーケンスを指し、思考プロセスにおける相互に関連する一連のアイデア、意見、または概念です。シリーズ思考の連鎖は、問題を解決したり、意思決定をしたり、推論したりするためによく使用されます。思考を論理的な順序で結び付けて整理し、複雑な問題をより単純なステップまたは概念に分解して、より良い理解と問題解決を実現します。

人間が数学や数学の問題を解決するとき、段階的に正しい答えを導き出しますが、モデルについても同様です。そのため、論文『Large Language Models are Zero-Shot Reasoners』では、ステップバイステップのゼロショットのアイデアが次のようになります。提案された:

大きなモデルを使った二段階推論、つまり第一段階で質問を分割して回答し(推論抽出)、第二段階で回答を要約する(回答抽出)という考え方です。 )、図に示すように:

画像-20230718171001735

画像-20230718171217981

ステップバイステップのゼロショットを使用して、この問題を再度解決します。

**プロンプト **:

これらの数字 1、3、5、23、69、70、10、84、923、32 のうち、奇数はいくつ、偶数はいくつありますか。段階的に考えてみましょう。

画像-20230718171145035

返信から、ゼロショットのステップバイステップアプローチにより、モデルがステップバイステップで考えることができるため、もう少し複雑な推論問題の解決に役立つことがわかります。

3.6 CoT+少数ショットのヒント

Chain of Thinking (CoT) と Few-shot を併用すれば、必ず良い結果が得られると思われがちですゼロショットのみを使用する場合は、次のようにテストします。

プロンプト1

1356 掛ける 2569 は何ですか?

画像-20230718171558999

CoT + Few-shot 組み合わせヒントを使用する場合は、次のようになります。

プロンプト2

例:

13 掛ける 17 は何ですか? まず 13 と 17 の大きさを比較します。13 は 17 より小さく、17 を大きい順に 10+7 に分解してから、13 と 17 を比較します。

桁ごとに分解した結果を乗算し、13 に (10+7)=221 を乗算します。

256 掛ける 36 は何ですか? まず 256 と 36 のサイズを比較します。256 は 36 より大きく、256 を次のように分解します。

200+50+6、次に 36 と 256 を桁ごとに分解した結果を乗算し、36 に (200+50+6)=9216 を 325 回乗算します。

559はいくらに等しいですか? まず 325 と 559 のサイズを比較します。320 は 559 より小さいので、559 を大きさの桁に従って 500+50+9 に分解し、次に 325 と 559 を大きさの桁に従って分解した結果を乗算し、325 に を乗算します。 (500+50+9)=181675

質問: 1356 掛ける 2569 は何ですか?

画像-20230718171803153

3.7 STAR Fine-Tune ヒント方法

STaR Fine-Tune プロンプト メソッド (Self-taught Reasoner) は、少数ショット プロンプト メソッドを通じてモデルを微調整するために使用できるラベル付きデータ セットを多数生成します

论文:STAR: 独学の推論者、推論による推論のブートストラッピング

画像-20230718172453232

一般的なプロセスは次のとおりです。

  1. 少数のラベル付きサンプルを例として取り上げます

  2. モデルを使用してラベルなしデータを生成することに対する答えとその理論的根拠

  3. 正しい答えとその答えの根拠を微調整データセットの一部として保持します

  4. 正しく答えられなかった質問については、質問の一部として正しい答えを再入力し、数ショット プロンプトを再利用して正しい答えと対応する理由を生成し、それを微調整データ セットに要約します。

  5. 最後に、最終的なデータセットを使用してモデルを微調整します。

この部分はまだ勉強していませんが、フォローアップの微調整部分で行う可能性があります。興味があれば、まず自分で調べてみてください。

4. モデルの推論能力

モデルの推論能力とは、新たな問題に直面した際に、既存の知識や経験に基づいて推論・判断するモデルの能力、すなわちモデルの論理的理解能力を指しますたとえば、モデルが論理的推論の問題をうまく解決できるかどうか、またはコンテキスト内のプロンプトに従ってモデルの背後に隠された論理関係を見つけて掘り出すことができるかどうかなどです。

より学術的な観点から見ると、大規模モデルの推論能力は、複合一般化能力とも呼ばれます。これは、トレーニング データに見られる概念と構造を理解し、適用して、問題に対処するモデルの能力を指します。訓練データに見られない状況または問題がある**プロンプトエンジニアリングの基本的な目的は、モデルの推論能力を向上させることです。**したがって、言語プロンプト プロジェクトであっても、コード プロンプト プロジェクトであっても、それが問題を解決するための重要な要素となります。

V. まとめ

この論文では、LLM モデルの創発力を明らかにし、ヒント エンジニアリングと微調整を通じて大規模モデルの創発力を刺激する方法を説明します。次に、ヒンティング エンジニアリングの誤解、言語ヒンティング エンジニアリング、コード ヒンティング エンジニアリング、および古典的な小さなサンプル ヒント、思考連鎖ヒント、CoT+Few-shot ヒント、STAR Fine などのさまざまなヒンティング手法を含む、ヒンティング エンジニアリングのさまざまな側面について詳しく説明します。プロンプトを調整する方法。記事の最後では、モデルの推論能力について説明しますが、この知識は、LLM モデルを理解して適用する上で重要な参考値となります。

最後に、この記事を読んでいただきありがとうございます! 何か得をしたと感じたら、ぜひ「いいね!」「ブックマーク」「フォロー」をしてください。これが私が創作を続けるモチベーションです。ご質問やご提案がございましたら、コメント欄にメッセージを残してください。できる限りお答えし、フィードバックを受け付けます。知りたい特定のトピックがございましたら、お知らせください。喜んでそれに関する記事を書きます。ご支援に感謝し、あなたと一緒に成長することを楽しみにしています!

おすすめ

転載: blog.csdn.net/Lvbaby_/article/details/131792716