【トークンヒーリング】
トークンヒーリング とは?
最終更新:
💡 入力の文字を保ちながら、補完の切れ目をつなぎ直す手法
LLMのテキスト補完で、入力末尾と続きの間に生じるトークンの切れ目の条件を緩める手法。末尾の1個以上のトークンを戻し、元の入力文字列を保つように生成を条件して、境界をまたぐトークンも選べるようにする。文章の正しさを保証するものではない。
📌 このページのポイント
- 入力と続きの境界で、選べるトークンが限られる場合がある
- 末尾の1個以上のトークンを戻し、生成し直す
- 元の入力末尾を含む候補に条件を付け、入力文字列を保つ
- 補完の改善を狙う手法で、文法や事実の正しさの保証ではない
どんな問題を直すの?
入力と続きは、別々にトークン化すると、完成した文字列をまとめてトークン化した場合と切れ目が変わることがあるよ。そのまま入力を固定すると、境界をまたぐ長いトークンが選べず、自然な続きの生成に影響する場合があるんだ。
具体例は?
Guidanceの資料では、あるトークン分割器で `http:` を `http` と `:` に分ける例があるよ。続きが `//` なら、全体では `://` というトークンを使える。でも `:` を入力として固定したままでは、そのトークンを次に選べないんだ。
入力を消してしまうの?
トークンとしては末尾を戻すけれど、再生成するときに元の末尾で始まるよう条件を付けるよ。例えば `:` を戻したなら、再生成部分も `:` で始まるようにする。元の文字列 `http:` を失わずに、境界をまたぐ候補を選べるんだ。
必ず1トークンだけ戻す?
Guidanceの説明では1個以上を戻す方法として扱われているよ。戻す範囲や条件の実装は道具による。単に候補を採点し直せば必ず最適な文章になる、という手法ではないんだ。
どこでも使える?
Guidanceでは、モデルの生成やトークンの選択を直接制御できる接続で使う仕組みだよ。外部APIへ文章を送るだけで、同じ制御ができるとは限らない。コードなどの補完に役立つ場合があるけれど、構文や事実の確認は別に必要だよ。
まとめ:ざっくりこれだけ覚えればOK!
「トークンヒーリング」って出てきたら「入力の文字を保ちながら、補完の切れ目をつなぎ直す手法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Token Healing」 = トークンの修復
💬 Tokenは文字列を扱う単位、Healingは修復や癒しという意味だよ。入力の誤字を勝手に直すというより、補完の境界で生じる条件を扱う名前なんだ。