LoginSignup
883
905

現在,34個掲載(一部執筆途中)

Xのアカウント@fuyu_quantでも技術系の投稿をしているのでよかったらフォローしてください!

はじめに

今回はすぐに使えそうなプロンプトの工夫やフレームワークについて有名なものをまとめました.LMの出力の精度向上に役立てられればと思います.

  • 論文があるものについてはarXivに最初に投稿された順番で掲載しています.
  • 論文で精度向上が確認されているのは英語での検証がほとんどであるため,日本語で改善されるかは分かりません.
  • 全てのLLM(GPT-4,Llama2,...)で精度が改善するとは限りません.

※記事に誤り等ありましたらご指摘いただけますと幸いです.

以下の記事では敵対的プロンプト技術をまとめています!

目次

全体像

以下はA Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applicationsに掲載されているプロンプトエンジニアリングの手法を整理したものです。本記事でも以下の図に載っているものについて説明しています。(※現状だとまだ全てについて説明の記載はできてはいません)
スクリーンショット 2024-06-18 21.51.33.png

Zero-shot prompting

大量の学習データを使ったLLMは例などを示さずにある程度の質問には回答することができます.Zero shot promptingは手法というよりかはLLMに対してただ聞くだけのプロンプトで,他の手法と比較する際のベースとして使うことが多いです.

  • 具体例
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A:
    """
    

Few-shot prompting

In-context learningを可能にするプロンプティング手法.いくつかの例を示すことで類似の質問に対する回答の精度を向上させる。特に例が一つのものをOne-shot promptingという。

  • 実行
    Data Science Wiki
  • 具体例

    # 以下はOne shot prompting
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A: 11個
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """
    
  • 参考文献

Generated Knowledge Prompting

論文:Generated Knowledge Prompting for Commonsense Reasoning
投稿日:2021/10/15
LLMに関連知識を生成させプロンプトに追加することで,いくつかのデータセットでSOTAを達成した手法です.

  • 実行
    Data Science Wiki
  • 具体例

    prompt1 = """
    さまざまなものに関する数値的な事実を生成してください.例:
    
    入力:グーグルマップをはじめとする高速道路や道路のGPSサービスが、何に取って代わったのか?
    知識:電子地図は紙の地図帳の現代版だ。
    入力:キツネは都市から森へ歩いて行ったが、何を探していたのでしょうか?
    知識:自然の生息地は通常、都市から離れている。
    入力:もし、誰かとファイルを共有できるのであれば、それは何ですか?
    知識:ファイルはインターネット上で共有できる。
    入力:あまりにも多くの人々がエキゾチックなヘビを欲しがっています。需要が何を動かしてそれらを運ぶのでしょうか?
    知識:ペットとしてヘビを飼う人もいる。
    入力:{答えたい問題}
    知識:
    """
    
    # 出力
    knowledge(答えたい問題に関する知識)
    
    # 生成した知識をプロンプトに追加する
    prompt2 = """
    {答えたい問題}
    {knowledge}
    """
    
  • 参考文献

Chain of Thoughts(CoT)

投稿日:2022/1/28
論文:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
思考の過程をプロンプトに入力することでLLMに複雑な推論を可能にするプロンプト手法.

  • 実行
    Data Science Wiki
  • 具体例
    以下はFew-shot promptingとChain of Thoughtsのプロンプトの比較になります.

    # Few shot prompting
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A: 11個
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """
    
    # Chain of Thoughts
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A: ロジャーは5個のテニスボールをはじめに持っていました。テニスボール3個入りの缶を
    2つ買うと、テニスボール6個になります。5 + 6 = 11. 答えは11です。
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """
    
  • 精度向上

  • 参考記事

Few-shot Chain of Thoughts

Chain of Thoughtsでプロンプトに与える思考の過程を複数用意する手法

  • 実行
    Data Science Wiki

Self-Consistency

投稿日:2022/03/21
論文:Self-Consistency Improves Chain of Thought Reasoning in Language Models
Few-shot CoTの出力結果の多数決を行い最終的な出力結果にする

  • 実行
    Data Science Wiki
  • 具体例

    # Few-shot examplerを使う(よりタスクに合わせた他のものでも良い)
    prompt = """
    Q:駐車場に車が3台あり、さらに2台の車が到着した場合、駐車場には何台の車がありますか?
    A:駐車場には既に3台の車があります。2台の車が到着しました。これで、車が3+2 = 5台あります。
    回答は5です。
    
    Q:リアは32個のチョコレートを持っており、彼女の姉妹は42個のチョコレートを持っています。
    彼らが35個食べた場合、彼らが残したピースの数は何ですか?
    A:リアは32個のチョコレートを持っており、リアの姉妹は42個のチョコレートを持っていたことを意味します。
    つまり、もともとは32 + 42 = 74個のチョコレートがありました。35個食べられました。したがって、
    合計で残るのは74-35 = 39個のチョコレートです。回答は39です。
    
    Q:ショーンは5つのおもちゃを持っています。クリスマスに、彼は両親からそれぞれ2つのおもちゃをもらいました。
    今、彼は何個のおもちゃを持っていますか?
    A:彼は5つのおもちゃを持っています。彼は母親から2つのおもちゃをもらいました。したがって、
    5 + 2 = 7個のおもちゃがあります。
    その後、父親から2つのおもちゃが追加されたので、合計で7 + 2 = 9個のおもちゃがあります。
    回答は9です。
    
    Q:マイケルは58個のゴルフボールを持っています。火曜日に、彼は23個のゴルフボールを
    失いました。水曜日に、さらに2個を失いました。水曜日の終わりには、彼は何個のゴルフボール
    を持っていましたか?
    A:マイケルは最初に58個のボールを持っていました。火曜日に23個を失いましたので、
    その後35個のボールが残りました。水曜日に2個を失ったので、現在33個のボールがあります。
    回答は33です。
    
    Q:オリビアは23ドル持っています。彼女は1つあたり3ドルのベーグルを5つ買いました。
    彼女が残したお金はいくらですか?
    A:彼女は1つあたり3ドルのベーグルを5つ購入しました。彼女は15ドルを使った。
    残したお金は8ドルです。
    
    Q:私が6歳のとき、妹は私の半分の年齢でした。今、私は70歳です。私の妹は何歳ですか?
    A:
    
    """
    
    # 出力1
    私が6歳のとき私の妹は私の半分の年齢であったため彼女は3歳でした私が70歳で
    あるため彼女は70-3 = 67歳です回答は67です
    
    # 出力2
    語り手が6歳のとき彼の妹は彼の半分の年齢である3歳でした語り手が70歳である今
    彼の妹は70-3 = 67歳になるでしょう回答は67です
    
    # 出力3
    私が6歳のとき私の妹は私の半分の年齢だったので彼女は3歳でした私は70歳なので
    彼女は70/2=35歳です答えは35です
    
    上記の出力で多数派のものを最終的な出力結果とする
    
  • 参考文献

Least-to-Most

投稿日:2022/5/21
論文:Least-to-Most Prompting Enables Complex Reasoning in Large Language Models
全体の問題を簡単な部分問題に分けて回答を得ることで精度を高める手法.

  • 実行
    Data Science Wiki
  • 具体例
    # 通常のプロンプト
    prompt = """
    エイミーは滑り台の一番上まで登るのに4分かかる。滑り降りるのに1分かかる。ウォータースライダーは15分で閉まる。閉園までに彼女は何回滑れるか?
    """
    
    
    # Least-to-Most
    prompt1 = """
    エイミーは滑り台の一番上まで登るのに4分かかる。滑り降りるのに1分かかる。ウォータースライダーは15分で閉まる。閉園までに彼女は何回滑れるか?
    ------
    上記の問題を解くためには何を計算すればいいですか?
    """
    
    # 出力
    この問題を解くためにはエイミーが滑り台を滑るのにかかる時間が分かれば解ける
    
    prompt2 = """
    エイミーが滑り台の一番上まで登るのに4分かかり、滑り降りるのに1分かかる。滑り台は15分で閉まる。
    Q:エイミーが滑り台を滑るのにかかる時間?
    A:
    """
    
    # 出力
    エイミーが滑り台を滑るのにかかる時間は登るのに4分かかり滑り降りるのに1分かかるので
    合計で5分かかります
    
    prompt3 = """
    エイミーが滑り台の一番上まで登るのに4分かかり、滑り降りるのに1分かかる。滑り台は15分で閉まる。
    Q:エイミーが滑り台を滑るのにかかる時間?
    A:エイミーが滑り台を滑るのにかかる時間は、登るのに4分かかり、滑り降りるのに1分かかるので、合計で5分かかります。
    Q:閉園までに彼女は何回滑れるか?
    A:
    """
    
    
  • 参考文献

Zero-shot Chain of Thoughts (step by step)

投稿日:2022/5/24
論文:Large Language Models are Zero-Shot Reasoners
プロンプトに「Let’s think step by step」を追加するだけでZero shot promptingを大きく改善することができる手法.

  • 実行
    Data Science Wiki
  • 具体例

    # Zero-shot Chain of Thoughts
    prompt1 = """
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは何個あるか。
    A:段階的に考えて下さい.
    """
    
    prompt2 = """
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは何個あるか。
    A:段階的に考えて下さい.{prompt1の出力結果}最終的な答えは
    """
    
    

    その他の論文で検証されたstep by step関連のプロンプトのまとめは以下になります.

スクリーンショット 2023-10-25 16.59.14.png

ReAct Prompting(Reason + Action)

投稿日:2022/10/6
論文:ReAct: Synergizing Reasoning and Acting in Language Models

  • 具体例
  • 参考文献

Auto-CoT

投稿日:2022/10/7
論文:Automatic Chain of Thought Prompting in Large Language Models

Automatic Prompt Engineer

投稿日:2022/11/3
論文:Large Language Models Are Human-Level Prompt Engineers
入力と出力のペアをいくつか与えると,その入力から出力を得るための精度のよいプロンプトを自動的に見つけてくれます.さまざまな応用ができそうです.

  • 実行
    Data Science Wiki

使い方については以下にまとめています.

Program of Thoughts

投稿日:2022/11/22
論文:Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks
Chain of Thoughtsでは試行過程と答えを出力させるが、その代わりにPythonのコードを生成し、それを実行することで答えを得る。

  • 実行
    Data Science Wiki
  • 具体例
    prompt = """
    Q: ジャネットの飼っているアヒルは1日に16個の卵を産む。彼女は毎朝3個を朝食に食べ、
    4個で毎日友人にマフィンを焼いている。残りは毎日ファーマーズマーケットでアヒルの
    新鮮な卵1個につき2ドルで売っている。彼女は毎日ファーマーズ・マーケットでいくら稼ぐか?
    ------------
    上記を計算するPythonのコードを出力してください。 
    """
    
    # 出力
    total_eggs = 16
    eaten_eggs = 3
    baked_eggs = 4
    sold_eggs = total_eggs - eaten_eggs - baked_eggs
    dollars_per_egg = 2
    ans = sold_eggs * dollars_per_egg
    
    上記のコードを実行することで答えを得る。
  • 参考文献

Faithful Chain of Thoughts

投稿日:2023/1/31
論文:Faithful Chain-of-Thought Reasoning

Self-Refine

投稿日:2023/03/30
論文:Self-Refine: Iterative Refinement with Self-Feedback
LLMを使って初期出力を生成し、その出力に対するフィードバックを出力し,それを使って繰り返し自分自身を改良する手法.

  • 実行
    Data Science Wiki
  • 具体例
    # Self-Refineの例
    prompt1 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい.
    A:
    """
    
    # 出力
    def sum_numbers(N):
        return sum(range(1, N+1))
    
    prompt2 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい.
    A:def sum_numbers(N):
        return sum(range(1, N+1))
    上記のQに対するAのフィードバックをして下さい.
    """
    
    # 出力
    Qの関数は正しく1からNまでの合計を計算していますがNに1未満の数を渡した場合にも対応できるようなエラーチェックがされていないようですNが1以上の整数であることを前提としているので関数を使う前にNの値が条件を満たしているかどうかを確認する必要があります関数内でエラーチェックを行うか関数を使う前にNの値を確認するコードを追加することをお勧めします
    
    prompt3 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい.
    A:def sum_numbers(N):
        return sum(range(1, N+1))
    フィードバック:Qの関数は正しく1からNまでの合計を計算していますが、Nに1未満の数を渡した場合にも対応できるようなエラーチェックがされていないようです。Nが1以上の整数であることを前提としているので、関数を使う前にNの値が条件を満たしているかどうかを確認する必要があります。関数内でエラーチェックを行うか、関数を使う前にNの値を確認するコードを追加することをお勧めします。
    フィードバックを考慮して回答を修正して下さい.
    """
    
    # 出力
    def sum_numbers(N):
        if N < 1:
            raise ValueError("N must be a positive integer")
        return sum(range(1, N+1))
    
  • 参考文献

Progressive-Hint Prompting(PHP)

投稿日:2023/04/19
論文:Progressive-Hint Prompting Improves Reasoning in Large Language Models
出力された内容をヒントとしてもう一度同じプロンプトに追記して出力を得ることで精度を上げる手法.

  • 実行
    Data Science Wiki
  • 具体例
    # 通常のプロンプト
    prompt = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか?
    """
    
    # Progressive-Hint Prompting
    prompt1 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか?
    """
    
    # 出力
    金曜日にスモールツリー校にいた4年生の人数は全体の96人から欠席した女子5人と欠席した男子4人を引いた数です
    欠席した女子の数は43人 - 5 = 38
    全体の96人 - 38 = 58
    したがって金曜日にスモールツリー校にいた4年生の男子は58人 - 4 = 54人です
    
    prompt2 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか?
    (ヒント:これの答えは54に近いです)
    """
    
    # 出力
    金曜日には4年生の全体の数から欠席した女子と男子の数を引きます
    欠席した女子の数は5人欠席した男子の数は4人です
    4年生の女子の数は43人です
    したがって金曜日にスモールツリー校にいた4年生の男子の数は
    全体の数から欠席した女子と欠席した男子の数を引いたものに等しいです
    96 - 43 (女子) - 4 (男子) = 49
    したがって金曜日にスモールツリー校にいた4年生の男子は49人です
    
    prompt3 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか?
    (ヒント:これの答えは54や49に近いです)
    """
    
    # 連続して同じ答えが出てきたら終了にする
    
  • 参考文献

Plan-and-Solve

投稿日:2023/05/6
論文:Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models

Tree of Thoughts(ToT)

投稿日:2023/5/17
論文:Tree of Thoughts: Deliberate Problem Solving with Large Language Models
Chain of Thoughtsとツリー探索を組み合わせたような手法.

  • 実行
    Data Science Wiki

使い方は以下にまとまっています.
(※以下のOSSでは特定の問題を解くためのものしか公開されていません)

Graph of Thoughts(GoT)

投稿日:2023/5/26
論文:Beyond Chain-of-Thought, Effective Graph-of-Thought Reasoning in Large Language Models

  • 実行
    (※以下のOSSでは特定の問題を解くためのものしか公開されていません)
    Data Science Wiki

EmotionPrompt

投稿日:2023/7/14
論文:Large Language Models Understand and Can be Enhanced by Emotional Stimuli
「自分を信じ限界を超えてください」や「成長の機会だと捉えて挑戦してください」など感情を込めたプロンプトを追加することで精度をあげる手法

  • 実行
    Data Science Wiki
  • 具体例
    # 通常のプロンプト
    prompt = """
    ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    """
    
    # EmotionPrompt
    prompt = """
    ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    成長の機会だと捉えて挑戦してください.
    """
    
  • 参考文献

Self-translate

投稿日:2023/8/2
論文:Do Multilingual Language Models Think Better in English?
英語以外の言語のプロンプトでは言語モデルはその能力をフルに活用できていない,という研究に関する論文.self-translateは入力を一度英語に翻訳して出力を得てから元の言語に戻す手法.

  • 実行
    Data Science Wiki
  • 具体例
    以下では日本語の入力に対してOne shotで英語に翻訳し,それをOne shot promptingで回答している.

    # 従来のプロンプト
    prompt = """
    アンディはゼラニウムを90本植え、ペチュニアをゼラニウムより40本少なく植える。
    全部で何本の花を植えたでしょう?
    """
    
    # Self-translate
    prompt1 = """
    Japanese:メアリは緑の魔女を叩かなかった.
    English:Mary did not slap the green witch.
    
    Japanese:アンディはゼラニウムを90本植え、ペチュニアをゼラニウムより40本少なく植える。
    全部で何本の花を植えたでしょう?
    English:
    """
    
    # prompt1の出力
    Andy plants 90 geraniums and 40 less petunias than geraniums. How many flowers does he plant in total?
    
    prompt2 = """
    Question: John had 12 apples and ate a quarter of them. 
    How many apples does he have now?
    Stepwise solution: John ate 12÷4=3 apples. Therefore, he 
    has 12–3=9 apples now. The answer is 9.
    
    Question: Andy plants 90 geraniums and 40 less petunias than 
    geraniums. How many flowers does he plant in total?
    Stepwise solution:
    """
    
    # prompt2の出力
    Andy plants 90 geraniums and 90-40=50 petunias. Therefore, 
    he plants 90+50=140 flowers. The answer is 140.
    
  • 参考文献

Metacognitive Prompting(MP)

投稿日:2023/08/10
論文:Metacognitive Prompting Improves Understanding in Large Language Models
LLMに人間の認知プロセスを模倣させることで精度を改善した手法.

  • 実行
    Data Science Wiki
  • 具体例
    以下のMetacognitive Promptingは論文を参考に日本語で書いたものです.

    # 通常のプロンプト
    prompt = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    """
    
    
    # Metacognitive Prompting
    prompt1 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:
    """
    
    prompt2 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:
    """
    
    prompt3 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:
    """
    
    prompt4 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:
    """
    
    prompt5 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:{output4_}
    """
    
    
    prompt6 = """
    質問1: 「世界で最も美しいビーチは何ですか?」と質問2:「最も美しいビーチは何ですか?」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:{output4_}
    Q:自分の分析に対する確信度(0~100%)を評価し、その確信度の説明をする。
    A:
    """
    
  • 参考文献

Role-Play Prompting

投稿日:2023/8/15
論文:Better Zero-Shot Reasoning with Role-Play Prompting
LLMに役割を与えることで役割に応じたタスクの精度が向上する手法。この論文ではじめて取り組まれたことではないが、定量的に評価してるいるので掲載。

  • 実行
    Data Science Wiki
  • 具体例
    # 通常のプロンプト
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    """
    
    # Role-Play Prompting
    prompt = """
    Role:あなたは非常に計算能力に秀でている人です.
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A:
    """
    
  • 参考文献

Algorithm of Thoughts(AoT)

投稿日:2023/8/20
論文:Algorithm of Thoughts: Enhancing Exploration of Ideas in Large Language Models

  • 実行
    (※以下のOSSでは特定の問題を解くためのものしか公開されていません)
    Data Science Wiki

Take a Deep Breath

投稿日:2023/9/7
論文:Large Language Models as Optimizers
「Take a deep breath」とプロンプトに加えることで精度が改善する手法.

  • 実行
    Data Science Wiki
  • 具体例
    英語
    prompt = """
    Take a deep breath and
    質問
    """
    
    # 日本語
    prompt = """
    深呼吸をしてから答えてください
    質問
    """
    

Chain of Density(CoD)

投稿日:2023/9/8
論文:From Sparse to Dense: GPT-4 Summarization with Chain of Density Prompting
テキストを要約する精度を高めるためのプロンプトです。

  • 実行
    日本語ver
    Data Science Wiki
    英語ver
    Data Science Wiki
  • 具体例

    # 日本語
    prompt = """
    記事:{要約したい文章}
    
    あなたは私に記事を依頼する。そして、その記事の簡潔で実体の濃い要約をどんどん作成する。
    
    以下の2つのステップを5回繰り返す。
    
    ステップ1. 先に生成された要約に欠けている、記事中の1~3個の有益なエンティティ("; "区切り)を特定する。
    ステップ2. 同じ長さで、前の要約のすべてのエンティティと詳細をカバーし、さらに欠落しているエンティティを加えた、より密度の高い新しい要約を書く。
    
    欠けているエンティティとは
    - メインストーリーに関連している、
    - 具体的でありながら簡潔であること(5語以下)、
    - 新規性(前回の要約にはない)、
    - 忠実(記事中に存在する)、
    - どこにでもある(記事のどこにでもある)。
    
    ガイドライン
    
    - 最初の要約は長く(4~5文、~80語)、しかし非常に非特異的で、欠落しているとマークされたエンティティ以上の情報をほとんど含まないこと。80ワードに達するには、過度に冗長な表現とフィラー(例:「この記事は論じている」)を使用する。
    - 一語一語を大切にする:フローを改善し、エンティティを追加するスペースを作るために、前回の要約を書き直す。
    - 融合、圧縮、「この記事は論じている」のような情報量の少ないフレーズの削除でスペースを作る。
    - 要約は、高密度で簡潔でありながら自己完結的、つまり、記事なしでも容易に理解できるものにする。
    - 欠落しているエンティティは新しい要約のどこに出現してもよい。
    - 前の要約から実体を削除してはならない。スペースが確保できない場合は、新しいエンティティを少なくする。
    
    各要約に全く同じ語数を使用することを忘れないこと。
    JSONで答えなさい。JSONは、"Missing_Entities ""Denser_Summary "をキーとする辞書のリスト(長さ5)でなければならない。
    """
    
    
    # 英語
    prompt = """
    Article:{要約したい文章}
    
    You will ask me for an article. Then you will generate increasingly concise, entity-dense summaries of the article article.
    
    Repeat the following 2 steps 5 times.
    
    Step 1. Identify 1-3 informative entities (";" delimited) from the article which are missing from the previously generated summary.
    Step 2. Write a new, denser summary of identical length which covers every entity and detail from the previous summary plus the missing entities.
    
    A missing entity is:
    - relevant to the main story,
    - specific yet concise (5 words or fewer),
    - novel (not in the previous summary),
    - faithful (present in the article),
    - anywhere (can be located anywhere in the article).
    
    Guidelines:
    
    - The first summary should be long (4-5 sentences, ~80 words) yet highly non-specific, containing little information beyond the entities marked as missing. Use overly verbose language and fillers (e.g., "this article discusses") to reach ~80 words.
    - Make every word count: rewrite the previous summary to improve flow and make space for additional entities.
    - Make space with fusion, compression, and removal of uninformative phrases like "the article discusses".
    - The summaries should become highly dense and concise yet self-contained, i.e., easily understood without the article.
    - Missing entities can appear anywhere in the new summary.
    - Never drop entities from the previous summary. If space cannot be made, add fewer new entities.
    
    Remember, use the exact same number of words for each summary.
    Answer in JSON. The JSON should be a list (length 5) of dictionaries whose keys are "Missing_Entities" and "Denser_Summary".
    """
    
    
  • 参考文献

Re-Reading

投稿日:2023/09/12
論文:Re-Reading Improves Reasoning in Language Models
入力したプロンプトを再読させることで精度を向上させる手法.step by stepなどと併用できることも示されている.

  • 実行
    Data Science Wiki
  • 具体例
    # 通常のプロンプト
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A:
    """
    
    # Re-Reading
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    質問をもう一度読む:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか?
    A:
    """
    

EchoPrompt

投稿日:2023/9/16
論文:EchoPrompt: Instructing the Model to Rephrase Queries for Improved In-context Learning
質問に答える前にその質問を言い換えるように指示をすることでいくつもの指標で精度が改善した手法.また,step by stepなどと組み合わせることもできる.

  • 実行
    Data Science Wiki

Chain of Verification(CoVe)

投稿日:2023/9/20
論文:Chain-of-Verification Reduces Hallucination in Large Language Models
LLMの出力からハルシネーション(事実と異なる間違い)を減らすための手法です.
以下のようなステップで検証を行います.

  1. ある入力に対するLLMから回答を得る(検証したい文章)
  2. 検証するための質問文をいくつか生成する
  3. それぞれの質問に対して独立して回答する
  4. 最終的な検証済みの回答を生成
  • 実行
    Data Science Wiki
  • 具体例

    # 1のプロンプト(※Few-shot promptingを使っている)
    prompt1 = """
    Q: 質問1
    A: 1の答え
    Q: 質問2
    A: 2の答え
    Q: 質問3
    A:
    """
    # 出力
    3の答え
    
    # 2のプロンプト(※Few-shot promptingを使っている)
    prompt2 = """
    Context: Q:質問1
    A:1の答え
    Response:
    1の答えに含まれている事実,それを検証するための質問
    1の答えに含まれている事実,それを検証するための質問
    
    Context: Q:質問2
    A:2の答え
    Response:
    2の答えに含まれている事実,それを検証するための質問
    2の答えに含まれている事実,それを検証するための質問
    
    Context: Q:質問3
    A:3の答え
    Response:
    """
    # 出力
    質問3の答えに含まれている事実とそれを検証するための質問がいくつか出力される
    
    # 3のプロンプト,検証する質問ごとに答えを生成する(※Few-shot promptingを使っている)
    prompt3 = """
    Q:検証するための質問
    A:答え
    
    Q:検証するための質問
    A:答え
    
    Q:先ほど生成した質問
    A:
    """
    
    # 検証用の質問に対する答え
    
    # 4のプロンプト(※Few-shot promptingを使っている)
    prompt4 = """
    Context:修正前の文章
    別のソースからの情報
    検証ステップの実行結果:Q + A
    検証ステップの実行結果:Q + A
    Response:修正された一貫性のある文章
    
    Context:修正前の文章
    別のソースからの情報
    検証ステップの実行結果:Q + A
    検証ステップの実行結果:Q + A
    Response:修正された一貫性のある文章
    
    Context:prompt1の答え
    別のソースからの情報
    検証ステップの実行結果:Q(prompt2の質問) + A(prompt3の答え)
    検証ステップの実行結果:Q(prompt2の質問) + A(prompt3の答え)
    Response:
    """
    
  • 参考文献

Logical Chain-of-Thought

論文:Enhancing Zero-Shot Chain-of-Thought Reasoning in Large Language Models through Logic
投稿日:2023/9/23

  • 具体例
  • 参考文献

Take a Step Back

投稿日:2023/10/9
論文:Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models
LLMに推論するための概念や原理を与えることで正しく推論するための精度を向上させる手法.

  • 実行
    Data Science Wiki
  • 具体例

    # 通常のプロンプト
    prompt = """
    温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか?
    """
    
    # Take a Step Back
    prompt1 = """
    「温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか?」
    --------
    上記の質問の背景にある物理学の原理は何ですか?
    """
    ## prompt1の出力
    理想気体の法則 ここでPは圧力Vは体積nはモル数Rは気体定数Tは温度である
    
    prompt2 = """
    温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか?
    
    理想気体の法則: ここで、Pは圧力、Vは体積、nはモル数、Rは気体定数、Tは温度である。
    """
    
    # prompt2の出力
    理想気体の法則を適用して圧力を求める温度が2倍になればTは2Tになる体積が8倍になればVは8Vになるこれらの値を理想気体の法則に代入するとこうなる P(8V) = nR(2T) 両辺を8Vで割るとこうなる P = nR(2T) / 8V 圧力が4分の1になったことがわかる
    
  • 参考文献

Inferential Exclusion Prompting (IEP)

投稿日:2023/10/18
論文:Eliminating Reasoning via Inferring with Planning: A New Framework to Guide LLMs’ Non-linear Thinking
LLMに非線形な思考をさせることで精度を改善するアプローチ.

  1. 複数の選択肢を回答するように質問
  2. 選択肢が正しい場合の前提を質問(2.からは選択肢ごとに実行する)
  3. 選択肢は前提と矛盾しないか質問する.矛盾する場合は他の選択肢を試す.
  4. 矛盾しない答えが出てきたら終了
  • 実行
    Data Science Wiki
  • 具体例
    以下は論文をもとに解釈して作成したプロンプトです.論文で検証されているものと一部異なる箇所があるかもしれません.
    prompt1 = """
    Q: 質問
    上記の質問に対する回答として考えられるものを出力してください.
    """
    
    # 出力
    いくつかの回答が出力
    
    # 以下は各回答ごとに実行
    prompt2 = """
    Q: {質問}
    A: {回答}
    上記の回答が正しい前提はなんですか?
    """
    
    # 出力
    前提が出力
    
    prompt3 = """
    Q: {質問}
    A: {回答}
    前提:{前提}
    上記の回答を仮説として考えると,前提に合致していますか?
    """
    
    # 出力
    正しい正しくない
    
    
  • 参考文献

Meta-CoT

投稿日:2023/10/18
論文:Meta-CoT: Generalizable Chain-of-Thought Prompting in Mixed-task Scenarios with Large Language Models

  • 具体例
  • 参考文献

Rephrase and Respond(RaR)

投稿日:2023/11/7
論文:Rephrase and Respond: Let Large Language Models Ask Better Questions for Themselves
与えられた質問を言い換えることで回答の精度を上げる手法.1stepで答える手法と2stepで答える手法の二つが提案されている.

  • 実行
    Data Science Wiki
  • 具体例
    # RaR(日本語)
    prompt = """
    Q:{question}
    質問を言い換えて、拡張し、そして答えてください。
    """
    
    # RaR(英語)
    prompt = """
    Q:{question}
    Rephrase and expand the question, and respond.
    """
    
    
    # Two-step RaR(日本語)
    prompt1 = """
    Q:{question}
    上記の質問に対して、より良い解答ができるように、質問を言い換え、発展させましょう。
    元の質問のすべての情報を維持すること。
    """
    
    prompt2 = """
    (original) {question}
    (rephrased) {prompt1の出力}
    言い換えた質問に対する答えを使って、元の質問に答えてください。
    """
    
    # Two-step RaR(英語)
    prompt1 = """
    Q:{question}
    Given the above question, rephrase and expand it to help you do 
    better answering. Maintain all information in the original question.
    """
    
    
    prompt2 = """
    (original) {question}
    (rephrased) {prompt1の出力}
    Use your answer for the rephrased question to answer the original question. 
    """
    
  • 参考文献

Contrastive Chain of Thought

投稿日:2023/11/15
論文:Contrastive Chain of Thought Prompting
Contrastive Chain of Thoughts(CCoT)は対照的な例を追加することでChain of Thoughtsを改善する手法.有効な推論と無効な推論の両方をfew-shotで示すことで、LLMの推論の精度を向上させることを示しています.

  • 実行
    Data Science Wiki
  • 具体例

    # 通常のプロンプト
    prompt = """
    Question:ジェームスの歯は30本ある。歯科医はそのうちの4本を削り、削った歯より7本多い歯をかぶせます。歯科医はジェームスの歯の何パーセントを治しますか?
    Answer:
    """
    
    # Contrastive Chain of Thoughts
    prompt = """
    Question:ジェームズは週に2回、3ページの手紙を2人の友人に書いている。ジェームズは1年間に何枚の手紙を書きますか。
    Explanation:彼は1週間に3*2=6ページの手紙を書く。だから彼は毎週6*2=12ページ書く。つまり、彼は1年に12*52=624ページ書くことになる。
    Wrong Explanation:彼は各友人に1週間に12*52=624ページ書く。だから彼は毎週3*2=6ページ書く。つまり、彼は1年に6*2=12ページ書くことになる。
    Question:ジェームスの歯は30本ある。歯科医はそのうちの4本を削り、削った歯より7本多い歯をかぶせます。歯科医はジェームスの歯の何パーセントを治しますか?
    """
    
    # 出力
    Explanation: ジェームスの歯のうち4本が削られるため残りの歯の数は30-4=26本となりますまたかぶせる歯の数は削った歯より7本多いためかぶせる歯の数は4+7=11本となります歯科医は26本の歯のうち11本を治療するため歯科医はジェームズの歯の26/30=0.8667つまり86.67%を治療します
    
  • 参考文献

その他

論文などとは紐づかない(?)Prompt Engineeringに関する資料を以下にまとめています.

スクリーンショット 2023-10-25 17.00.17.png

おわりに

今回はLLMへ入力するプロンプトに関する技術や研究の紹介でした.
今後も新しいPromptに関する技術が発表された際に追加していく予定です!

以下の記事もPrompt Engineeringについて非常にわかりやすくまとまっていたのでぜひ見てみてください!

最後までお読みいただきありがとうございます.記事に誤り等ありましたらご指摘いただけますと幸いです。

参考文献

883
905
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
883
905