AIの「壊れ方」を学習させる手法がヤバい件

山田 拓海
山田 拓海 30代・ テック系インフルエンサー
Xのタイムラインを流し見してたら、Hugging FaceのブログにDPOについての記事が上がってて思わず止まった。チャットボットのファインチューニング話かと思ったら、全然違う切り口でマジで面白かった。

DPOってDirect Preference Optimizationの略で、モデルに「これは好ましい出力、これはダメな出力」という対比を学ばせる手法だ。チャットAIの安全性調整とかに使われてることが多い技術なんだけど、今回の記事はそこから外れた使い方をしてる。

テキスト生成の「ループ地獄」をどうやって直すか



AIが同じテキストをひたすら繰り返してしまう現象、見たことある人いると思う。ループに入ったら止まらなくなるやつ。技術的には「テキスト劣化」とか「デジェネレーション」と呼ばれてる現象だ。Dharma AIというチームがブラジルポルトガル語のOCRモデルを開発した際、この問題を徹底的に調べたらしい。

で、驚いたのが数値。検証したオープンソースモデルのファミリー群で、通常状態のデジェネレーション発生率が最低1%未満から最高33%超まであったと。33%ってかなりヤバい数字で、3回に1回以上ループするってことだから実用レベルじゃない。

普通のファインチューニング(SFT)でこれを直そうとしても、ある程度は改善するけど「天井」があるらしい。SFTはトークン単位で正解を教える仕組みだから、ループという「完成形レベルの失敗」を直接罰する仕組みになっていないのが原因だと説明してる。

失敗した出力そのものをトレーニングデータにする発想



ここからが面白い。Dharma AIがやったのは、モデル自身が失敗して生成したループ出力を「リジェクション(不正解)サンプル」として使ったDPOだ。「正しい書き起こし=選択」と「ループ=拒否」のペアを作って、SFTのあとにもう一段階だけ追加学習させた。

その結果が全5モデルファミリーで例外なくデジェネレーションが減少。平均削減率59.4%、最良ケースだと87.6%まで改善した。しかも一番改善が目立ったケースはNanonets-OCR2という3Bパラメータのモデルで、発生率が1.61%から0.20%まで下がってる。

自分が毎日AIツールを触ってて感じてた「なんか同じ文が繰り返されるな」という現象に、ここまでちゃんと原因と対策の構造があるとは正直思ってなかった。自分の解像度がまだ甘かった。

この「自分の失敗から学ぶ」という設計の発想、ある種の自己改善ループに近くて概念としてすごく好みだ。ちょうど先日、YouTubeの動画でAIの幻覚問題について話したあとに妻から「AIって自分で気づかないの?」と聞かれたばかりで、あのとき上手く答えられなかったけど今回の記事はその答えの一片になってる気がした。

チャット系AIじゃない領域でDPOが使われてるのが新鮮



DPOってほぼ全ての公開事例がチャット系AIのアライメント目的で、人間の好みを学ばせるために使ってきた技術だ。でも今回はOCR、つまり文書をテキストに変換するタスクに使っている。主観的な「好み」ではなく、正誤が明確なタスクにDPOを当てた点が新しい。

海外のAI界隈ではこういう「目的外使用」が普通にリサーチになってることが多い。日本だとまだDPO自体の認知が低くて、フォロワーにこの話してもピンとくる人が少ないんだよね。ただこの流れは絶対広がる。


  • OCRや構造化抽出タスクでのDPO活用

  • モデル自身の失敗を拒否サンプルにするアプローチ

  • SFTだけでは直せない失敗モードへの対処



この3点セットはこれからのファインチューニング話で絶対出てくると思うから、今週の動画ネタにしてみるつもりだ。自分も実際にDPOのコードを触ったことがないから、小さいモデルで試しながら解説できたらフォロワーにも届きやすくなる。理解が浅いまま紹介するよりずっといい。

無料相談受付中

AI開発・DX推進についてお気軽にご相談ください。オンライン30分から。

無料相談を申し込む