Self-Refine論文
https://scrapbox.io/files/65aafd6f7261af002440c908.png
論文情報
タイトル:Self-Refine: Iterative Refinement with Self-Feedback
発行日:2023年3月
著者:Aman Madaan, Niket Tandon, Prakhar Gupta et al
所属:Carnegie Mellon University、NVIDIA , et al
ポイント
まずLLMを使用して初期出力を生成する
次に同じLLMがその出力に対してフィードバックを提供する
最後に、それを使って自己改善を反復的に行う
GPT-3.5/4を使って、ダイアログ応答生成から数学的推論まで、7つの多様なタスクで評価した。
感情反転、対話応答生成、コード最適化、コード可読性改善、数学推論、アクロニム生成、制約生成
https://scrapbox.io/files/668f86642b8980001d7e7549.png
対話応答生成、コード可読性向上、感情反転、アクロニム生成では自動メトリックが利用できないため、出力のサブセットに対してブラインドの人間A/B評価を行い、好まれる出力を選択した。
Self-Reineを使うと、人間/自動メトリクスによって好まれ、平均してタスク性能で約20%改善がみられた
特に、 対話応答生成、感情反転、アクロニム生成で大幅な改善が見られた
https://scrapbox.io/files/65ac93b68091370022d92353.png
Self-Refineは、数学推論にはあまり効果なかった
LLMの推論チェーンが一見、全て良さそうに見えてしまうことが原因
推論に間違いを特定できた場合、その改善率は高かったとのこと
漠然としたフィードバックではなく、具体的な行動につながるフィードバックが大事
https://scrapbox.io/files/65acd7bb39611e0023f3ce37.png
hiroya_iizuka.icon コードの効率を良くして、ではなく、for ループ内で繰り返し計算は避けて、などの明確なフィードバック(by self-refine)が好影響を与える
フィードバックの反復の回数が増える(Max: 4回)ほど、出力の品質が改善した
コード最適化タスク、感情反転タスク、制約付き生成の結果
https://scrapbox.io/files/65acdff0e9f7060023f179c2.png
実際、エラーが起きてしまう原因は、誤ったフィードバック
具体的には、成功しなかったケースの33%は、フィードバックが誤ってエラーの位置を特定したためであり、61%はフィードバックが不適切な修正を提案したためだった。
実際に使うには?
タスク開始、フィードバックのための、Few-Shotの例をいくつも作る必要がある 実際の例
task init https://scrapbox.io/files/65ad795e590bd30023739f36.png
feedback https://scrapbox.io/files/65ad801e0bea7d00244c815f.png
refineのロジックも必要か。
工数がかかりすぎてしまい、普段使いはなかなかできなそう...
ソースコード分析の具体例
https://scrapbox.io/files/65ad76245cd262002310ab7e.png
https://scrapbox.io/files/65ad76a194a3d50024487646.png
関連論文
概要
人間と同じように、大規模言語モデル(LLM)も常に最初の試みで最適な出力を生成するわけではありません。人間が書いたテキストを精錬する方法にヒントを得て、私たちはLLMからの初期出力を反復的なフィードバックと改善を通じて改善するアプローチ「SELF-REFINE」を紹介します。このアプローチの主な考え方は、まずLLMを使用して初期出力を生成し、次に同じLLMがその出力に対してフィードバックを提供し、それを使って自己改善を反復的に行うことです。
SELF-REFINEは、教師ありのトレーニングデータ、追加のトレーニング、または強化学習を必要とせず、代わりに単一のLLMを生成者、改善者、フィードバック提供者として使用します。私たちは、ダイアログ応答生成から数学的推論まで、7つの多様なタスクでSELF-REFINEを評価し、最先端のLLM(GPT-3.5およびGPT-4)を使用しました。評価された全タスクにおいて、SELF-REFINEで生成された出力は、従来の一段階生成を使用する同じLLMで生成されたものよりも、人間および自動メトリクスによって好まれ、平均してタスク性能で約20%絶対的に改善されています。私たちの研究は、GPT-4のような最先端のLLMでさえ、私たちのシンプルでスタンドアローンなアプローチを使用してテスト時にさらに改善できることを示しています。 導入
大規模言語モデル(LLM)は一貫性のある出力を生成することができますが、複雑な要件に対処することにはしばしば短所があります。これには、対話応答生成のような多面的な目的を持つタスクや、プログラムの可読性を高めるなど、明確に定義されていない目標を持つタスクが含まれます。これらのシナリオでは、現代のLLMは理解可能な初期出力を生成するかもしれませんが、望まれる品質が達成されることを確実にするために、さらなる反復的な洗練(候補出力を改善されたものに反復的にマッピングする)から利益を得るかもしれません。
反復的な洗練には通常、ドメイン固有のデータに依存する洗練モデルのトレーニングが含まれます。外部教師または報酬モデルに依存する他のアプローチには、大規模なトレーニングセットまたは高価な人間の注釈が必要であり(Madaan et al., 2021; Ouyang et al., 2022)、これらは常に入手可能とは限りません。これらの制限は、広範な教師ありを必要とせずにさまざまなタスクに適用できる効果的な洗練アプローチの必要性を強調しています。
この論文では、LLMが追加のトレーニングなしで反復的な自己改善を提供でき、幅広いタスクでより高品質な出力につながることを示しています。
私たちは、SELF-REFINEを紹介します:2つの生成ステップ、FEEDBACKとREFINE、が連携して高品質な出力を生成する反復的な自己洗練アルゴリズムです。モデルMによって生成された初期出力を同じモデルMに戻してフィードバックを得ることから始まります。次に、そのフィードバックを同じモデルに戻して、以前に生成されたドラフトを洗練します。このプロセスは、指定された反復回数まで繰り返されるか、Mがこれ以上の洗練が必要ないと判断するまで繰り返されます。
私たちは、フィードバックを生成し、フィードバックを改善されたドラフトに組み込むために、Mをガイドするために、Few-Shotプロンプトを使用します。Figure 1は、SELF-REFINEが同じ基礎となる言語モデルを使用してフィードバックを生成し、その出力を洗練するという高レベルなアイデアを示しています。 https://scrapbox.io/files/65ac898cbb88db002400ef27.png
私たちは、自然言語およびソースコード生成を含む多様なドメインにまたがる7つの生成タスクでSELF-REFINEを評価します。私たちは、SELF-REFINEが強力なLLMであるGPT-3.5(text-davinci-003およびgpt-3.5-turbo; OpenAI; Ouyang et al., 2022)とGPT-4(OpenAI, 2023)からの直接生成を5-40%の絶対的な改善で上回ることを示します。 コード生成タスクでは、SELF-REFINEはCodex(code-davinci-002; Chen et al., 2021)などの強力なコードモデルに適用された場合、初期生成を最大13%絶対的に改善します。私たちは、他のLLMに簡単に拡張可能なコードをすべて公開します。
本質的に、私たちの結果は、LLMが初回の試みで最適な出力を生成できない場合でも、しばしば有用なフィードバックを提供し、自身の出力を改善できることを示しています。その結果、SELF-REFINEは、反復的な(自己)フィードバックと改善を通じて、追加のトレーニングなしで単一のモデルからより良い出力を得る効果的な方法を提供します。
2. SELF-REFINEによる反復的な改善
与えられた入力シーケンスに対して、SELF-REFINEは初期出力を生成し、その出力に対してフィードバックを提供し、そのフィードバックに従って出力を改善します。SELF-REFINEはフィードバックと改善の間を反復し、望ましい条件が満たされるまで続けます。
SELF-REFINEは適切な言語モデルと、初期生成、フィードバック、改善のための3つのプロンプトに依存し、トレーニングを必要としません。SELF-REFINEはFigure 1とアルゴリズム1に示されています。次に、SELF-REFINEについてより詳細に説明します。
初期生成
入力x、プロンプトPgen、モデルMを与えられたSELF-REFINEは、初期出力y0を生成します:
https://scrapbox.io/files/65ac8a5b0d61440022b52e80.png
例えば、Figure 2(d)では、モデルは与えられた入力に対して機能的に正しいコードを生成します。
https://scrapbox.io/files/65ac8c02e822940025e3b91d.png
https://scrapbox.io/files/65ac8eccfd69a400249f8fff.png
ここで、Pgenは初期生成のためのタスク固有のFew-Shotプロンプト(または指示)であり、||は連結を示します。フューショットプロンプトには、タスクの入力-出力ペア⟨x(k), y(k)⟩が含まれます。 フィードバック
次に、SELF-REFINEは同じモデルMを使用して、フィードバックを生成するためのタスク固有のプロンプトpfbを与えられた自身の出力に対するフィードバックfbtを提供します:
https://scrapbox.io/files/65ac8c756e95eb00244c5a0a.png
直感的に、フィードバックは出力の複数の側面に対処するかもしれません。例えば、コード最適化では、フィードバックは効率性、可読性、およびコードの全体的な品質に対処する可能性があります。ここで、プロンプトPfbは入力-出力-フィードバックのトリプル形式でフィードバックの例を提供します⟨x(k), y(k), fb(k)⟩。
私たちは、モデルに具体的で実行可能なフィードバックを書くように促します。
「実行可能」とは、出力を改善する可能性のある具体的なアクションを含むフィードバックを意味します。「具体的」とは、出力の中で変更する具体的なフレーズを特定するフィードバックを意味します。
たとえば、Figure 2(e)のフィードバックは「このコードは、ブルートフォースなforループを使用しているため遅いです。より良い方法は、公式...(n(n+1))/2を使用することです」です。このフィードバックは、'公式を使用する'というアクションを提案しているため実行可能です。フィードバックは「forループ」と述べているため具体的です。
改善
次に、SELF-REFINEは、自身のフィードバックを与えられた最新の出力を改善するためにMを使用します:
https://scrapbox.io/files/65ac8d4a67114f0023e583a7.png
例えば、Figure 2(f)では、初期出力と生成されたフィードバックを与えられたモデルは、初期実装よりも短くてずっと高速に動作する再実装を生成します。
プロンプトPrefineは、フィードバックに基づいて出力を改善する例を、入力-出力-フィードバック-改善された四重組⟨x(k), y(k)t, fb(k)t, y(k)t+1⟩の形式で提供します。
SELF-REFINEの反復
SELF-REFINEは、フィードバックと改善のステップを交互に繰り返し、停止条件が満たされるまで続けます。停止条件stop(f bt, t)は、指定されたタイムステップtで停止するか、フィードバックから停止指標(例えばスカラーの停止スコア)を抽出します。実際には、モデルはpfbで停止指標を生成するように促され、条件はタスクごとに決定されます。
モデルに前回の反復について知らせるために、私たちは以前のフィードバックと出力の履歴を保持し、プロンプトに追加します。直感的には、これによりモデルは過去の間違いから学び、それらを繰り返さないようになります。より正確には、方程式(3)は実際には次のように具体化されます:
https://scrapbox.io/files/65ac8e4fae1f8f0023e4a1b5.png
最後に、SELF-REFINEの出力として最後の改善ytを使用します。
アルゴリズム1はSELF-REFINEを要約し、Figure 2は対話応答生成(Mehri and Eskenazi, 2020)およびコード最適化(Madaan et al., 2023)タスクにおけるSELF-REFINEの例を示しています。付録Sは、様々なタスクのためのpgen、pfb、prefineプロンプトの例を提供しています。重要な点は、SELF-REFINEが同じ基礎となるLLMを使用して、自身のフィードバックを受けて出力を生成し、フィードバックを得て改善することです。これはフューショット例に存在する監督にのみ依存しています。
https://scrapbox.io/files/65ac8e730b8ca700255883ae.png
3. 評価
私たちは7つの多様なタスクでSELF-REFINEを評価します:対話応答生成(付録M; Mehri and Eskenazi, 2020)、コード最適化(付録N; Madaan et al., 2023)、コード可読性改善(付録L; Puri et al., 2021)、数学推論(付録O; Cobbe et al., 2021)、感情反転(付録P; Zhang et al., 2015)、我々は、新しい2つのタスクを導入します:アクロニム生成(付録Q)および制約付き生成(Lin et al.(2020)の難しいバージョンで、3-5のキーワード制約の代わりに20-30のキーワード制約あり;付録R)。すべてのタスクの例とデータセットの統計は、表4(付録A)に記載されています。
https://scrapbox.io/files/65ad0357d3bee6002510ed1e.png
3.1 SELF-REFINEの具現化
我々は、セクション2の高レベルの説明に従ってSELF-REFINEを具体化します。FEEDBACK-REFINEの繰り返しは、望まれる出力品質またはタスク固有の基準に到達するまで、最大4回の繰り返しで続けられます。異なるモデル間で評価を一貫させるために、私たちはFEEDBACKとREFINEの両方を、指示にうまく応答するモデル(例えばChatGPTやGPT-4など)でさえ、Few-Shotプロンプトとして実装しました。 基本のLLM
私たちの主な目的は、SELF-REFINEを使用して任意の強力な基本LLMのパフォーマンスを向上させることができるかどうかを評価することです。
したがって、我々はフィードバック-リファインの反復がない同じ基本LLMとSELF-REFINEを比較します。
我々はすべてのタスクにわたって3つの主要な強力な基本LLMを使用しました:
GPT-3.5(テキスト-davinci-003)、ChatGPT(gpt-3.5-turbo)、およびGPT-4(OpenAI、2023)。
コードベースのタスクのために、我々はCODEX(コード-davinci-002)も実験しました。
すべてのタスクで、GPT-3.5またはGPT-4が以前の最先端技術です。
我々は以前の作業から利用可能なときに同じプロンプトを使用しました(例えばコード最適化や数学推論のために);そうでなければ、我々は付録Sで詳述されているようにプロンプトを作成しました。我々はすべてのセットアップで温度0.7の貪欲なデコーディング戦略を使用します。 3.2 メトリクス
我々は3種類のメトリクスを報告します:
タスク固有のメトリック
利用可能な場合、我々は以前の作業から自動メトリックを使用します(数学推論:%解決率;コード最適化:%プログラム最適化;制約付き生成:カバレッジ%)
人間の好み
対話応答生成、コード可読性向上、感情反転、アクロニム生成では自動メトリックが利用できないため、出力のサブセットに対してブラインドの人間A/B評価を行い、好まれる出力を選択します。詳細は付録Cに記載されています。
https://scrapbox.io/files/65ad01a57e607b0022bc5d76.png
GPT-4の好み
人間の好みに加えて、我々は以前の研究(Fu et al.、2023; Chiang et al.、2023; Geng et al.、2023; Sun et al.、2023)に従って、人間の好みの代理としてGPT-4を使用し、高い相関を見出しました(感情反転で82%、アクロニム生成で68%、対話応答生成で71%)。コード可読性向上のために、我々はGPT-4に文脈に応じて適切に名付けられた変数の割合を計算するように促します(例、x = [] → input_buffer = [])。詳細は付録Dに記載されています。
https://scrapbox.io/files/65ad01885eb637002326c028.png
3.3 結果
表1は我々の主な結果を示しています:
https://scrapbox.io/files/65ac93b68091370022d92353.png
SELF-REFINEは、すべてのモデルサイズにわたって基本モデルよりも一貫して改善し、さらにすべてのタスクにおいて以前の最先端技術を上回ります。例えば、GPT-4+SELF-REFINEは、基本のGPT-4よりも8.7%(絶対)コード最適化で改善し、最適化率を27.3%から36.0%に増加させます。信頼区間は付録Jに記載されています。コードベースのタスクでは、CODEXを使用して同様の傾向を見つけました。これらの結果は付録Fに含まれています。
基本モデルと比較して最も大きな利得が観察されるタスクの1つは、モデルに最大30の与えられた概念を含む文を生成するように求められる制約付き生成です。我々は、このタスクがSELF-REFINEから大きな恩恵を受けると考えています。なぜなら、最初の試みでいくつかの概念を見逃す可能性が多く、その結果、SELF-REFINEはモデルがその後これらの間違いを修正することを可能にするからです。さらに、このタスクには合理的な出力の非常に大きな数があり、したがってSELF-REFINEは可能な出力のスペースをよりよく探索することを可能にします。
対話応答生成、感情反転、アクロニム生成などの好みに基づくタスクでは、SELF-REFINEは特に高い利得をもたらします。例えば、対話応答生成では、GPT-4の好みのスコアが25.4%から74.6%に49.2%改善されます。同様に、他の好みに基づくタスクでもすべてのモデルにわたって顕著な改善が見られます。
数学推論における控えめなパフォーマンス向上は、エラーがあるかどうかを正確に特定することができないことに起因しています。数学では、エラーは微妙であり、時には単一の行または間違った操作に限定されることがあります。さらに、一貫して見える推論チェーンはLLMを欺いて「すべてが良さそうです」と思わせることがあります(例えば、ChatGPTの94%のインスタンスに対するフィードバックは「すべてが良さそうです」)。
付録H.1では、外部ソースが現在の数学回答が間違っているかどうかを特定できる場合、SELF-REFINEによる数学推論の利得がはるかに大きいこと(5%以上)を示しています。改善は基本LLMのサイズ全体で一貫しています。一般的に、GPT-4+SELF-REFINEは、GPT-3.5+SELF-REFINEやChatGPT+SELF-REFINEよりもすべてのタスクで優れています。これは、初期基本結果がGPT-3.5やChatGPTよりも低かったタスクでさえです。したがって、私たちはSELF-REFINEがより強力なモデル(例えばGPT-4)がその全潜在能力を解き放つのを可能にすると信じています。これは標準の一回通しの出力生成では表現されていない場合でもです。追加の強力な基準との比較は付録Fに記載されています。
4 分析
SELF-REFINEの3つの主要なステップは、FEEDBACK、REFINE、そしてそれらを反復的に行うことです。このセクションでは、これらのステップのそれぞれの重要性を分析するために追加の実験を行います。
フィードバックの品質の影響
フィードバックの品質はSELF-REFINEにおいて重要な役割を果たします。
hiroya_iizuka.icon 一緒だね。
その影響を定量化するために、具体的で実行可能なフィードバックを使用するSELF-REFINEを、一般的なフィードバックを使用するものとフィードバックなし(モデルは反復的に生成を洗練するかもしれませんが、そうするための明示的なフィードバックは提供されません)の2つの簡略化と比較します。
例えば、コード最適化タスクでは:実行可能なフィードバック、例えばforループ内の繰り返し計算を避ける、は問題を特定し、明確な改善を提案します。一般的なフィードバック、例えばコードの効率を改善する、はこの精度と方向性を欠きます。表2はフィードバックの明確な影響を示しています。
https://scrapbox.io/files/65acd7bb39611e0023f3ce37.png
コード最適化では、パフォーマンスはSELF-REFINEフィードバックの27.5から一般的なフィードバックの26.0にわずかに下がり、さらにフィードバックなしの24.8に下がります。これは、一般的なフィードバックがいくらかの指針を提供する一方で、具体的で実行可能なフィードバックが優れた結果をもたらすことを示唆しています。
この効果は、感情転送のようなタスクでより顕著です。ここでは、私たちのフィードバックから一般的なフィードバックに変更すると、パフォーマンスが大幅に低下します(43.2から31.2)、そしてフィードバックなしではタスクが失敗します。同様に、アクロニム生成では、反復的な洗練があっても、実行可能なフィードバックなしではパフォーマンスが56.4から48.0に低下します。これらの結果は、私たちのアプローチにおける具体的で実行可能なフィードバックの重要性を強調しています。一般的なフィードバックはある程度の利益をもたらしますが、最良の結果はターゲットを絞った建設的なフィードバックで達成されます。
hiroya_iizuka.icon 大事なのは、具体的で実行可能なフィードバック
FEEDBACK-REFINEの複数の反復がどれほど重要か?
Figure 4は、反復の数が増えるにつれて、平均的に出力の品質が改善されることを示しています。例えば、コード最適化タスクでは、初期出力(y0)は22.0のスコアを持ち、3回の反復後(y3)には28.8に改善します。同様に、感情反転タスクでは、初期出力は33.9のスコアを持ち、3回の反復後には36.8に増加します。この改善の傾向は制約付き生成でも明らかであり、スコアは29.0から3回の反復後には49.7に増加します。Figure 4は、反復の数が増えるにつれて改善の減少リターンを強調しています。全体として、複数のFEEDBACK-REFINE反復が出力の品質を大幅に向上させる一方で、より多くの反復で自然に限界の改善が減少します。
https://scrapbox.io/files/65acdff0e9f7060023f179c2.png
hiroya_iizuka.icon ほとんどの改善は最初で、その後も反復の回数が増えるにつれて、上昇の振れ幅は減るが、数値の上昇している。
パフォーマンスは反復で常に単調に増加するわけではありません:アクロニム生成のような多面的なフィードバックタスクでは、出力品質が反復中に変動し、一方の側面で改善がありながら別の側面で低下することがあります。
hiroya_iizuka.icon 複雑なタスクでは、反復で品質が変動した。
これに対処するために、SELF-REFINEは異なる品質側面のための数値スコアを生成し、バランスの取れた評価と適切な出力選択につながります。反復的に洗練する代わりに複数の出力を生成するだけではだめなのか? SELF-REFINEが改善するのは、反復的な洗練のためなのか、単により多くの出力を生成するためなのか? 我々はSELF-REFINEをChatGPTと比較しました。
ChatGPTはフィードバックや洗練なしでk = 4のサンプルを生成します。その後、1対kの評価でこれらのk個の初期出力に対するSELF-REFINEのパフォーマンスを比較します。言い換えれば、SELF-REFINEがすべてのk個の初期出力を上回るかどうかを評価します。この実験の結果は、付録Hの図6に示されています。1対kの設定の難易度が高まるにもかかわらず、SELF-REFINEの出力は、すべてのk個の初期出力よりも人間に好まれます。これは、フィードバックに従って洗練することの重要性を示しています。
https://scrapbox.io/files/65acf843b5f7650022f82d32.png
SELF-REFINEは弱いモデルでも機能するのか?
セクション3.3で行われた実験は、利用可能な最も強力なモデルで行われました。SELF-REFINEは、より小さなまたは弱いモデルでも機能するのでしょうか?この問題を調査するために、我々はより弱い基本モデルであるVicuna-13B(Chiang et al.、2023)でSELF-REFINEを実装しました。Vicuna-13Bは初期出力を生成する能力がありますが、洗練プロセスには大きな困難があります。具体的には、Vicuna-13Bは必要な形式でフィードバックを一貫して生成することができませんでした。さらに、Oracleやハードコードされたフィードバックが提供されたとしても、洗練のためのプロンプトに従うことにしばしば失敗しました。出力を洗練する代わりに、Vicuna-13Bは同じ出力を繰り返したり、幻覚的な会話を生成したりして、出力を効果的ではなくしてしまいました。そのため、Vicuna-13Bが会話に基づいてトレーニングされているため、テスト時のフューショットタスクに対して指示ベースのモデルほどうまく一般化しないという仮説を立てています。出力の例と分析は付録Gに提供されています。
質的分析
我々はSELF-REFINEによって生成されたフィードバックとその後の洗練について質的分析を行いました。我々は、コード最適化(Madaan et al.、2023)と数学推論(Cobbe et al.、2021)の70サンプル(成功ケース35件、失敗ケース35件)を手動で分析しました。数学推論とコード最適化の両方において、フィードバックは主に実行可能であり、元の生成の問題点を特定し、それらを是正する方法を示唆していることが大部分でした。
SELF-REFINEが元の生成を改善できなかった場合、問題の大部分は不適切な洗練ではなく、誤ったフィードバックによるものでした。具体的には、成功しなかったケースの33%は、フィードバックが誤ってエラーの位置を特定したためであり、61%はフィードバックが不適切な修正を提案したためでした。失敗の6%のみが、リファイナーが適切なフィードバックを誤って実装した結果でした。これらの観察は、SELF-REFINEにおける正確なフィードバックの重要な役割を強調しています。
成功したケースでは、リファイナーは正確で有用なフィードバックによって案内され、61%のケースで元の生成に対して正確な修正を行いました。興味深いことに、フィードバックが部分的に誤っている場合でも、リファイナーは問題を修正する能力を持っていました。これは、最適でないフィードバックに対するレジリエンスを示唆しています。今後の研究では、リファイナーのフィードバックエラーのさまざまなタイプに対する堅牢性を調査し、このレジリエンスを高める方法を探ることに焦点を当てることができます。図5では、洞察に満ちたフィードバックの結果、ブルートフォースアプローチを動的プログラミングソリューションに変換することで、プログラムの効率が大幅に改善された例を示しています。対話応答生成などの他のデータセットに関する追加分析は、付録Hに提供されています。
https://scrapbox.io/files/65acfa46b2164400247f7613.png
ベンチマークを超えて
私たちの評価はベンチマークタスクに焦点を当てていますが、SELF-REFINEはより広範な適用性を念頭に置いて設計されています。我々は、ウェブサイト生成の実世界のユースケースでこれを探求します。ここでは、ユーザーが高レベルの目標を提供し、SELF-REFINEがウェブサイトの反復的な開発を支援します。基本的な初期デザインから始まり、SELF-REFINEはHTML、CSS、JSを洗練して、使いやすさと美学の両方の面でウェブサイトを進化させます。これは、実世界の複雑で創造的なタスクにおけるSELF-REFINEの可能性を示しています。例と詳細な議論、および我々の作業のより広範な社会的影響については、付録Iを参照してください。
5 関連研究
人間および機械によって生成された自然言語(NL)フィードバックを使用して出力を洗練することは、要約(Scheurer et al.、2022)、スクリプト生成(Tandon et al.、2021)、プログラム合成(Le et al.、2022a; Yasunaga and Liang, 2020)、およびその他のタスク(Bai et al.、2022a; Schick et al.、2022b; Saunders et al.、2022a; Bai et al.、2022b; Welleck et al.、2022)など、さまざまなタスクに効果的でした。洗練方法は、フィードバックのソースと形式、リファイナーの取得方法によって異なります。表3は関連するアプローチのいくつかを要約しています。詳細な議論については、付録Bを参照してください。
フィードバックのソース
人間はフィードバックの効果的なソースであることが証明されています(Tandon et al.、2021; Elgohary et al.、2021; Tandon et al.、2022; Bai et al.、2022a)。人間のフィードバックはコストがかかるため、いくつかのアプローチでは、スカラー報酬関数を人間のフィードバックの代理(または代替)として使用しています(例:(Bai et al.、2022a; Liu et al.、2022; Lu et al.、2022; Le et al.、2022a; Welleck et al.、2022))。コンパイラ(Yasunaga and Liang, 2020)やWikipediaの編集(Schick et al.、2022b)などの代替ソースは、ドメイン固有のフィードバックを提供することができます。最近では、LLMが一般ドメインのフィードバック生成に使用されています(Fu et al.、2023; Peng et al.、2023; Yang et al.、2022)。しかし、我々の方法は、同じLLMを使用して自身の出力にフィードバックを生成し、同じLLMで洗練する目的で使用する唯一の方法です。
フィードバックの表現
フィードバックの形式は、一般的に自然言語(NL)フィードバックと非NLフィードバックに分けられます。非NLフィードバックは、人間によって提供された例のペア(Dasgupta et al.、2019)やスカラー報酬(Liu et al.、2022; Le et al.、2022b)で提供されることがあります。この作業では、NLフィードバックを使用します。これにより、モデルは同じLMを使用して自己フィードバックを簡単に提供でき、GPT-4などの既存の事前トレーニング済みLLMを活用できます。
リファイナーのタイプ
フィードバックと洗練のペアは、教師ありリファイナーを学ぶために使用されてきました(Schick et al.、2022b; Du et al.、2022; Yasunaga and Liang、2020; Madaan et al.、2021)。教師ありデータの収集はコストがかかるため、一部の方法ではモデル生成を使用してリファイナーを学びます(Welleck et al.、2022; Peng et al.、2023)。しかし、これらのリファイナーは各新しいドメイン用にトレーニングされます。最後に、(Yang et al.、2022)は、ストーリー生成のために特別に調整されたフィードバックと洗練を使用します。この作業では、別のリファイナーをトレーニングすることを避け、同じモデルを複数のドメインにわたってリファイナーとフィードバックのソースとして使用できることを示します。
非洗練強化学習(RL)アプローチ
明示的な洗練ではなく、フィードバックを組み込む別の方法は、スカラー報酬関数を最適化することです。例えば、強化学習を使用して(例えば、Stiennon et al.(2020); Lu et al.(2022); Le et al.(2022a))。これらの方法はSELF-REFINEとは異なり、モデルは中間生成に対するフィードバックにアクセスしません。第二に、これらのRL方法では、SELF-REFINEとは異なり、モデルのパラメータを更新する必要があります。
6 制限事項と議論
我々のアプローチの主な制限は、基本モデルが十分なフューショットモデリング能力や指示に従う能力を持っている必要があることです。これは、教師ありモデルをトレーニングしたり、教師ありデータに依存したりすることなく、コンテキスト内でフィードバックを提供し、洗練するために学習するためです。
さらに、この作業で行われた実験は、オープンソース化されていない言語モデル、すなわちGPT-3.5、ChatGPT、GPT-4、CODEXを使用して行われました。既存の文献(Ouyang et al.、2022)では、これらのモデルの詳細、例えば事前トレーニングコーパス、モデルサイズ、モデルのバイアスなどを完全には説明していません。さらに、これらのモデルは無料ではなく、研究に使用するためにはいくらかの資金が必要です。それにもかかわらず、我々は我々の作業の再現性を確保するために、我々のコードとモデルの出力を公開しています。
我々の作業のもう一つの制限は、英語のデータセットでのみ実験を行ったことです。他の言語では、現在のモデルが同じ利益を提供しない可能性があります。
最後に、悪意のあるアクターがプロンプト技術を使用して、モデルにより有害または有害なテキストを生成させる可能性があります。我々のアプローチは、これに対して明示的に防御していません。
7 結論
我々はSELF-REFINEを提案します:これは大規模言語モデルに、自己フィードバックを反復的に提供し、自身の出力を洗練することを可能にする新しいアプローチです。SELF-REFINEは単一のLLM内で動作し、追加のトレーニングデータや強化学習を必要としません。我々は、幅広いタスクにわたってSELF-REFINEのシンプルさと使いやすさを実証します。さまざまなタスクでSELF-REFINEの可能性を示すことで、我々の研究は大規模言語モデルの継続的な探求と開発に貢献し、実世界の設定における人間の創造的プロセスのコストを削減することを目指しています。我々は、我々の反復的なアプローチがこの分野でのさらなる研究を促進することを期待しています。