2回書け?いや、上手く書け!
巷で噂のGoogle Resaerchの論文を読んでみました。
Prompt Repetition Improves Non-Reasoning LLMs
内容を一言でまとめると、
『同一プロンプトを2回連結して入力するだけで、
ある条件下では、出力長やレイテンシを増やさずに
One Shot Promptの性能が向上する』
という、なかなか夢のある、お話しでした。
どんな条件かというと、論文で提示されていたのは、
①選択肢➡質問という順序のプロンプト
・Prompt Repetitionにより正答率が明確に上昇。
・質問➡選択肢という順序の場合は、性能は落ちはしないが、改善幅は限定的
という非対称な結果に。
②正解が「文脈全体」や「トークンの相対位置」に依存するようなタスク
論部中では、
・長い文章列の中のN番目に登場する言葉・数字を応える
・中央にある要素を特定する
といったもので、Prompt Repetitionが正答率を劇的に向上させる。
となっていました。
このような改善が見られた仕組みは因果アテンションの構造的問題を補っているからということでした。
この構造的問題とは、プロンプトの文章をトークンに分解しトークン間でアテンションをかけるのですが、
自分より過去に出てきたトークンにしかアテンションがかけれない(テキスト生成という能力を得る代償)ため、
文章全体を読み直すことができないというものですが、それを簡単な入力側の工夫で緩和する手法ということで、
「仕組み上、再現性のある」こういったテクニックは実務上、大いに参考になります。
むかし噂になった、スタンフォード大、カリフォルニア大学バークレー校の
Lost in the Middle: How Language Models Use Long Contexts
も長文コンテキストの中央にある関連情報を取りこぼしやすいというのも根幹の原因は同じところにあるのでしょう。
さて、読み終えた後の感想として、真っ先に実務影響を考えるのですが、
正直、「実務でそのまま使えるシチュエーションはかなり限定的」というのが率直な印象でした。
ChatGPTが世に出てきてから何回「アテンション構造、大事。」を説明してきたか分かりませんが、
改めて再認識させてもらえた良い研究でしたし、今後の応用にも期待を寄せています。
んが、コピペを2回してうまくいく分量のものを実務で使うことは少なく(直接自分がChatGPTをたたくときぐらい?)
システム開発用に最新モデルを使っていても、コンテキストウィンドウが強化されているとはいえ、
数万トークンを越えたあたりから、ガクっと落ち込む性能劣化が顕著なので、
アテンションが適切にかかりやすくするために、いまだに王道なのは、
・プロンプトはコンパクトに
・なるべく具体的な記載で
・順序も流れるように
が鉄則で、当社のメンバにも徹底してもらっています。
数万しかないトークン量のなかに、何を含めて、何を除くか?結果何を得たいのか知恵を絞ることが、
エンジニアにとって重要で、決してコピペすれば性能アップでOKという安直な結論に飛びつくわけにはいかないのであります。