例の順序と新しさ
例の順序が出力に与える影響を学びます。
「例の順序と新しさ」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。
順序は隠れたハイパーパラメータ
Few-shot例の順序によって、精度が数ポイント変動することがあります。固定した例のセットでも、ほぼランダムなプロンプトが強力なプロンプトに変わったり、その逆になったりする場合があります。
順序を後回しにせず、第一級のハイパーパラメータとして探索してください。順序を制御せずにfew-shotの結果を報告するのは、科学的に妥当ではありません。
import itertools
def order_search(demos, eval_set, build, max_perms=24):
perms = list(itertools.permutations(demos))[:max_perms]
scored = [(p, evaluate(build(p), eval_set)) for p in perms]
return max(scored, key=lambda x: x[1])直近性バイアスの説明
デコーダーのみのTransformerには直近性バイアスがあります。生成位置に近いトークンほど、不釣り合いに大きな影響を及ぼします。クエリの直前にある最後のデモンストレーションが、フォーマット、ラベル、トーンを最も強く形作りやすくなります。
これは、注意のパターンと位置エンコーディングによる影響の一部です。実際には、最後に置いたものをモデルが最も容易に模倣するということです。
# Position weight intuition (illustrative, not exact)
# influence(example_i) roughly increases with proximity to the query
# => the FINAL demo disproportionately anchors the next generation
weights = [0.1, 0.15, 0.25, 0.5] # earlier ... latest中央で見失われる情報
長いコンテキストに関する研究から、注意のプロファイルはU字型になることがわかっています。モデルはコンテキストの先頭と末尾にはよく注意を向けますが、中央部分には十分な注意を向けません。プロンプトの中央に埋もれた重要なデモンストレーションは、実質的に軽視されます。
最も重要な例や最も難しい例は、先頭、または直近性バイアスを考慮して末尾近くに配置してください。長いデモブロックの中央に取り残してはいけません。
def place_key_demos(key, filler):
# U-shape aware: key items at the edges, filler in the middle
head = key[: len(key)//2]
tail = key[len(key)//2 :]
return head + filler + tail多数派ラベルと最後の位置
直近性バイアスと多数派ラベルバイアスは相乗的に作用します。最後のデモンストレーションがクラスAなら、モデルはAを予測しやすくなります。Aに偏ったデモセットと組み合わさると、事前分布は大きく偏ります。
バランスの取れた分類では、ラベルを交互に配置し、プロンプトのバリエーションを変えても最後の例が常に同じクラスにならないようにしてください。
def alternate_labels(by_label, k):
labels = list(by_label)
out = []
i = 0
while len(out) < k:
lbl = labels[i % len(labels)]
if by_label[lbl]:
out.append(by_label[lbl].pop())
i += 1
return out # final element varies by construction類似度順(昇順)のデモ
検索拡張 few-shot における堅牢なヒューリスティックの一つは、取得したデモをクエリに対する類似度の昇順で並べることです。これにより、最も関連性の高いデモがクエリの直前に置かれ、直近性の恩恵を受けられます。
これは動的な選択と直近性の活用を組み合わせたものです。関連するコンテキストが存在するだけでなく、モデルが最も強く注目する位置に配置されます。
def order_by_similarity(query_emb, retrieved):
scored = [(d, cos(query_emb, d.emb)) for d in retrieved]
scored.sort(key=lambda x: x[1]) # ascending
return [d for d, _ in scored] # most similar last (near query)カリキュラム順序
推論や生成では、カリキュラム順(易しいものから難しいものへ)にすると、モデルが目的の振る舞いを段階的に身につけるのに役立つ場合があります。最後に、完全な推論の深さを示す複雑なデモをクエリの直前に置きます。
これはタスクによって異なるため、効果があると決めつけず、ランダム順や類似度順と比較して検証してください。
def curriculum(demos, difficulty_fn):
return sorted(demos, key=difficulty_fn) # easiest first, hardest last順序感度の測定
多数の順序をサンプリングし、正解率の分散を報告することで、プロンプトがどれほど脆弱かを定量化できます。分散が大きい場合、本番環境で予測不能な性能低下を起こしかねない不安定なプロンプトであることを示します。
この指標を使ってプロンプト設計を比較してください。順序に頑健なプロンプトは、スコアがわずかに高いだけで変動の大きいプロンプトより安全です。
import random
def order_sensitivity(demos, eval_set, build, trials=20):
accs = []
for _ in range(trials):
perm = random.sample(demos, len(demos))
accs.append(evaluate(build(perm), eval_set))
return mean(accs), stdev(accs) # report both; low stdev = robustプロービングなしの順序選択
順序を評価するためのラベルがない場合は、プロービング用データセットに対するモデルの予測のエントロピーを使って順序を選択できます。確信度が高く、エントロピーが低く、予測が十分に分散する順序は、より適切に汎化する傾向があります(Lu et al., 2022)。
これにより、ラベル付きの検証セットなしで適切な順列を選択できます。
def select_order_by_entropy(perms, probe_inputs, build):
def score(perm):
ents = [entropy(model_probs(build(perm), x)) for x in probe_inputs]
return -mean(ents) # prefer confident, low-entropy orderings
return max(perms, key=score)キャリブレーションによる安定化
順序感度と直近性バイアスは、どちらも特定のラベルの確率を過大にします。コンテキストキャリブレーションは、内容を含まない入力に対するモデルの事前分布を推定し、予測確率を補正することで、この影響を抑えます。その結果、特定の順序一つに左右されにくくなります。
適切な順序とキャリブレーションを組み合わせると、単一の最良順列を追い求めるよりも、本番環境での挙動が安定します。
p_prior = model_probs(build(perm), content_free='N/A')
def calibrate(probs):
return normalize(probs / p_prior) # cancels order-induced label skewキャッシュと順序の安定性
プロンプトキャッシュを使う場合、キャッシュを利用するには、デモブロックを含むプレフィックスをバイト単位で一定に保つ必要があります。リクエストごとにデモを頻繁に並べ替えると、キャッシュの再利用が失われ、コストとレイテンシが増加します。
対策として、静的なデモブロックには検証済みの単一の順序を固定してキャッシュし、動的な並べ替えは取得したクエリ固有の末尾部分だけに限定します。
# Stable cached prefix + dynamic tail
prefix = render(FIXED_ORDERED_DEMOS) # cache_control on this block
tail = render(order_by_similarity(q_emb, retrieved))
prompt = prefix + tail + query順序付け戦略のチェックリスト
実用的なデフォルトは、ラベル数を均衡させて交互に配置すること、重要または難しいデモを端に置くこと(中央は避けます)、取得したデモを類似度の昇順で並べて最良のものをクエリの近くに置くこと、順序による分散を測定すること、そしてキャリブレーションで残った偏りを抑えることです。
その後、キャッシュのために順序を固定し、デモセットが変わるたびに再検証してください。
def final_order(demos, q_emb):
demos = alternate_labels(group(demos), len(demos))
return order_by_similarity(q_emb, demos) # validated, then cachedクイックチェック
重要なデモをどの位置に置くべきか考えてみましょう。
まとめ
要点:
- デモの順序は、正解率を数ポイント変動させるハイパーパラメータです。探索を行い、分散を報告してください。
- 直近性バイアスにより最後のデモが最も大きな影響を持ちます。「中央の見落とし」によって中央のデモは過小評価されます。
- ラベル数を均衡させて交互に配置し、取得したデモを類似度の昇順で並べ、カリキュラム順序も検討してください。
- ラベルが少ない場合はエントロピーで順序を選択し、コンテキストキャリブレーションで偏りを抑えてください。
- プロンプトキャッシュのために安定した順序を固定し、並べ替えは動的に取得する末尾部分だけで行ってください。
よくある質問
「例の順序と新しさ」レッスンは無料ですか?
はい。「例の順序と新しさ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。
「例の順序と新しさ」で何を学びますか?
例の順序が出力に与える影響を学びます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Prompt Engineeringを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「例の順序と新しさ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Prompt Engineeringレッスンでコードを書いて実行できますか?
はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。