ピンクの象
https://gyazo.com/77fcac0bb1f5d8fae7007b0b4219fb20
https://gyazo.com/3c69733635d3aa143b9f91f31a33883a
AIエージェントがプロンプトの指示を守ってくれない!と言っている人、「ピンクの象」問題の罠にはまっていませんか?LLMは「Don't」の否定形の対応が本質的に苦手です。やってほしくないことを言葉にした上で否定するのは、それをやってほしいと言ってるようなもの。
ChatGPTなどのLLMには「ピンクの象」問題がある。同じ指示をするなら「〜するな」という否定文ではなく「〜しろ」と肯定文に書き換えるほうが良い。人間も「ピンクの象を想像するな」と言われるとピンクの象が思い浮かぶ。ここからリンクした高野さんの回答が秀逸。 なんでif !=で済むところにunlessがあるんですか?1つでよくないですか? https://jp.quora.com/nande-if-de-sumu-tokoro-ni-unless-ga-aru-nde-suka-1-tsu-de-yoku-nai-desu-ka/answers/89139468?ch=10&oid=89139468&share=2489d15f&srid=5g3qr&target_type=answer
https://x.com/kenn/status/1907802197469123067
そうなんだ。全然知らなかった。「すんな!」「すんな!」って言ってるのにもち.iconが関西弁使いまくるのはそういうことか。
なぜ否定文をうまく扱えないのか
単語埋め込み(トークン埋め込み)ベースの言語モデルは構造上、否定文を扱うのが苦手です。
言語モデルはアテンションや MLP などでこれまでの文脈を一本の埋め込みベクトル z にまとめ、これを出力単語埋め込み層に入力し、softmax 関数 exp(z⊤vi)∑jexp(z⊤vj) で単語を予測します。
「日本の首都は〇〇ではない。」の〇〇の正解は、東京以外のあらゆるものです。なので、この softmax の結果は東京だけ 0 をとり、京都・岡山・名古屋・札幌などに値を持つのが正解です(りんごやバナナなどにも値を持つべきかもしれません)。しかし、これを実現するためには、文脈ベクトル z は v京都 や v岡山 や vバナナ とは近く、v東京 とは遠くなければいけないわけですが、v京都 と v東京 は近くにあるため、v京都 をはじめとするあらゆるものに値を立てて、v東京 にだけ値を一切立てないというようなことは不可能です。どれだけ前段のアテンションや MLP などのエンコーダーが強力であっても、そもそもそのような z が存在しないので適切な埋め込み z が見つかるはずがありません。https://joisino.hatenablog.com/entry/negation#なぜ否定文をうまく扱えないのか
AIは否定文を扱うのが苦手。