データポイズニングとは、モデルが能力を学ぶ前に、誰かが学習データに手を加えることです。ある一批のサンプルのラベルを変えたり、隠れたトリガーを持つサンプルを混ぜたり、重要なサンプルを削除したりして、モデルに誤った関連を学ばせます。モデルを公開後にだますこととは別物で、手を加えるタイミングは学習の前であり、防ぎ方もまったく異なります。一般の利用者が目にする誤った回答の多くはデータポイズニングではなく、モデルの失敗をすべてこの言葉で片づけるべきではありません。
3つの代表的な手口、それぞれ壊し方が違う
- ラベルを反転させる。一部のサンプルのラベルを入れ替えます。たとえば悪意のあるトラフィックを良性とラベルづけすれば、モデルは危険を安全と学び、サンプルの見た目だけをチェックしてもほとんど気づきません。
- バックドアを仕込む。サンプル群に目立たないトリガーの印を付け、すべてを標的クラスで統一してラベルづけします。モデルはトリガーに出会うまで正常に振る舞い、その後、攻撃者の意図どおりに誤ります。これが最も見つけにくい形です。
- クリーンラベル・ポイズニング。サンプルもラベルも一見すると適合しているのに、内容が巧妙に改変されており、単純なデータ検査をすり抜けて、モデルの判断境界を静かにずらします。3つの手口はいずれも正常なデータの中に紛れ込むことで機能します。毒された割合が大きい必要はなく、サンプルが的確な位置に置かれているかどうかが重要です。
プロンプトインジェクションやデータ汚染とは別物です
| 現象 | 手を加える時期 | 本質的な違い |
|---|---|---|
| データポイズニング | 学習の前 | モデルが学ぶデータを変えるため、学ぶ内容そのものが変わる |
| プロンプトインジェクション | 利用時 | モデルに渡すテキストを変えるだけで、モデル自体は変わらない |
| データ汚染 | たいていは意図せず | 学習データに誤りや重複が混ざるが、誰かが意図的に害を与えたわけではない |
この3つを区別すれば、対処の方向も間違いません。プロンプトインジェクションは入力フィルタリングと権限の引き締めで、データ汚染は洗浄と重複除去で、データポイズニングはデータの出所そのものに立ち返ることでしか対処できません。
モデルを作る人、データを管理する人にとって役立つ実践は4つです。データの出所を記録すること。誰が提供し、どのバッチで、何を変更したかを追跡可能にします。サンプル検査は全体の精度だけで判断せず、トリガー条件下での振る舞いも見ること。疑わしいカテゴリ専用のクリーンな検証セットを確保すること。あるカテゴリでエラーが集中したら、パラメーターを調整する前にまずそのデータバッチを隔離して調べることです。「モデルが毒された」と聞いたら、まず3つ尋ねてください。証拠は学習データの中にあるのか、それとも1回の会話の中だけなのか。特定の種類の入力だけなのか、全体が悪化したのか。再現可能なトリガー条件はあるのか。答えられないのであれば、まずは通常の不具合やデータ品質の問題として扱い、結論を急がないことです。