【LLM】Few-shot推論は言語化の壁を越えられるか
こんにちは。メディア研究開発センターの川畑です。
みなさん ChatGPT 使ってますか?便利ですよね。何か訊いたら大概のことは正確に教えてくれますし、論文等の文書もわかりやすくまとめてくれたりと万能な存在です。
そんな便利な ChatGPT もとい LLM (large language model) ですが、その知識を引き出すためには質問や指示をキチンと言葉にしなければいけません。ちゃんと指示を言葉にする、というのは一見すれば簡単なことですが、何度もチャットしていると面倒さゆえに指示文が適当になったり、そもそも知識の不足ゆえに指示文として言語化するのが難しいシチュエーションもありますよね。たとえばプログラミング初心者の人が ChatGPT を使う状況を想定してみると、〇〇のようなプログラムを書きたいという漠然としたイメージはあっても具体的な処理の詳述まではできないかもしれません。そしていくら高性能な LLM といっても、そもそもの入力指示が曖昧であればそのポテンシャルを発揮できないでしょう。
ただ一方で、指示文として言葉にすることはできなくとも、いくつかの例を示すことはできるかもしれません。たとえば「こんな風な文章を書いて」という指示と共にお手本の文章を羅列したり、「コードにこんな処理を追加して」という指示と共に処理の実行例を持ってきて自分のコードに組み込んでもらったり...。
前置きが長くなりましたが、今回のテックブログではそんな「やってほしいことのイメージはあるけど正確に指示を言葉にすることが難しい」状況で LLM がどれほどの能力を発揮できるのか、という疑問を自由研究的に検証します!
何を行うか
さて、改めて今回行う検証の内容を整理します。
今回確かめたいことは、「曖昧な指示文と、その指示文を実現している例をLLMに入力として与えた時にLLMがどれほどの性能を発揮できるのか、できないのか」ということです。理想的な状況、つまり指示を正確に言語化できる状況との性能差を見ることでこの疑問に答えます。つまり曖昧な指示文 + 例をLLMに与える設定と正確な指示文のみをLLMに与える設定の性能差を比較します。
どうやって行うか
タスク
タスクとしては文章の書き換えタスクを考えます。このタスクでは、モデルに入力として元文章と、その文章をどのように書き換えるか明示した指示文を連結して与え、その指示文に基づいて書き換えられた文章をモデルに出力させます。
入力例を示します。
このデータをたとえばGPT-4oに入力すると、以下のような出力が書き換え後の文章として返ってきます。
今回はこの文章書き換えタスクをケーススタディとして、指示が曖昧な状況下でのLLMの性能を評価します。なお、データはつい最近まで開催されていた kaggle の LLM Prompt Recovery というコンペで配布されていたデータを使わせていただきます。元文章データはこちらから、指示文データはこちらから拝借しています。
書き換え文章の評価
自動評価尺度で評価するのはタスクの複雑さゆえに難しい & 今回は簡単に行いたいので GPT-4o に以下のようなプロンプトを与えて10点満点で評価してもらい、その平均をスコアとします。なお、このプロンプトの書き方は MTBench のプロンプトを参考にしました。
実験設定
今回は実験設定として以下の二つの状況を比較する設定を考えます。
指示文が正確な状況 (指示文正確設定)
指示文は曖昧だがいくつかの例が示せる状況 (指示文曖昧設定)
なお、今回使用するデータセットのサイズは $${N=300}$$とし、$${i ∈ {1, ..., N} }$$とします。
指示文正確設定
モデルに 指示文 $${p_i}$$ と元文章 $${o_i}$$ を与えます。シンプルですね。
指示文曖昧設定
$${p_i}$$ (e.g. "Rewrite this article as if it were a myth being told by ancient storytellers. ") の内容を曖昧にした指示文 $${p'_i}$$ と $${o_i}$$, ユーザーの書き換え意図 ($${p_i}$$) を実現している複数の例 (few-shot samples) をモデルに与えます。
$${p_i}$$ は大まかにまとめれば全て文書の書き換えを指示する文なので、$${p'_i}$$ は全ての $${i}$$ について "Rewrite" という指示文に統一します。
few-shot samples としては $${o_i}$$ 以外の他の文章 $${o_j}$$ と、$${o_j}$$ を指示文 $${p_i}$$ に基づいてGPT-4oで書き換えた文章 $${ r_j }$$ のペアを $${k}$$ ペア (i.e., $${ \{ (o_j, r_j) | j ∈ {1, ..., k}, j ≠ i \} }$$) 与えます。$${k}$$ は 1から10まで動かすことで、few-shot sample の事例数の効果を観察します。
本来であれば few-shot の例を与えるのはユーザーなので $${ r_j }$$ は人手で作成するのが理想なのですが、時間と手間との兼ね合いで (=めんどくさすぎるので) GPT-4oを採用しました。
つまりこの設定は「書き換えてほしいけどどうやって書いてほしいか言葉にできない....書き換えの例はk個出せるんだけど...」という状況を想定しています。もしかすると勘の鋭い読者の方*は 指示文曖昧設定では曖昧な指示 $${p'_i}$$しかわからないはずなのに $${p_i}$$ にアクセスできているじゃないか!と思うかもしれないのですが、$${p_i}$$ は few-shot examples を GPT-4o で作る際に便宜的に使用しているだけでモデルには直接的には与えていないので、この $${p_i}$$ のことはユーザーが例を示すときに頭の中にホワホワとあるイメージの代替物という風にお考えください。
書き換えモデルには Qwen2-7B Instructを用います。Qwen2-7Bのインストラクションチューニング済みモデルです。
結果発表
以下に指示文正確設定 (accurate instruction) と k = 1 ~ 10shot まで変化させた指示文曖昧設定 (ambiguous instruction) の結果を示します。
果たして few-shot samples を多く盛り込むことで本来の指示文と同等の効果は得られるのでしょうか!!
残念…!!
few-shot の事例数 (k) を増やすことでスコアも順調に改善されはしましたが、10事例入れても正確な指示文を与えた時のスコアには及びませんでした。これ以上の伸び代もスコアの推移から見るに期待できなさそうです。ただ、k=1では3ポイントの差があったにも関わらずk=10ではあと0.4ポイントというところまで迫っているところを見ると流石の in-context learning 能力の高さといえます。実際の状況で10事例入れられるかというと厳しいものがあるので、kごとのスコアの上がり幅を見るに k=3 くらいがちょうど良いラインなのかもしれません。
終わりに
今回の記事では曖昧な指示下におけるLLMの性能を、文章書き換えタスクを例に取り観察しました。その結果、
指示が極めて曖昧であっても、事例数を増やせば本来の指示に沿うような生成が実現できる
3つ程度の事例数がコストと生成の品質のバランスの観点から望ましい
事例数を増やしても正確な指示文を与えた時の品質には追いつかなさそう
ということがわかりました。ただ、今回は単一の比較的小規模なモデルのみを対象にしているので、さらに大きいサイズのモデルになれば少数の事例からでも正確な指示文レベルの生成ができるかもしれません。
それでは、ここまで読んでいただきありがとうございました。
*この言い回し好き
(メディア研究開発センター・川畑輝)