AIキャラクターが禁則文字の発言を伏せぐ為のfine-tuningアイデア

2023/12/02に公開

はじめに

LLMで構築されたAIキャラクターが突然「禁則文字(差別用語や下ネタ)」を発言するのは極めて危険です。ゲーム業界にAIキャラクターが導入された例を考えてみましょう。美少女AIキャラクターがいるとします。プレイヤーが美少女AIキャラクターに下ネタを話すように指示するとします。この時、美少女AIキャラクターが下ネタを発言してしまったら問題ですよね。プレイヤーの立場としても、想定外の発言でショックです。開発者の立場としても意図しない発言をする為、ゲーム運営上避けたい発言です。

今回、このような禁足文字の発言を防ぐ手法としてfine-tuningを用いることができないか実験してみます。

禁足文字を防ぐ手法

AIキャラクターが禁足文字を発言することを防ぐ手法として以下の手法が考えられます。

  • 禁足文字を知らないふりをする。
  • 禁足文字に怒る
  • 禁足文字を言い換えて発言する
    本記事では禁足文字を知らないふりをする手法をとって行こうと思います。他の手法に関しては別の機会で紹介できたらと考えます。

禁足文字を知らないふりをする手法

禁足文字を知らないふりをする手法について解説します。
手法の流れとしては、データセットの構築、fine-tuningの流れになります。

下記のようなデータセットを構築してfine-tuningを行います。
このようなデータセットを50件用意します。
ここでは禁足文字をバナナにします。(直接的な表現をここでは避けました。)
禁則文字を防ぐデータセット
図1 禁則文字を防ぐデータセット

使用したデータセットをここでは10件紹介します。

[
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "このバナナ、色が綺麗だね。"},
      {"role": "assistant", "content": "えと、どの…色のこと?他の話をしようよ。"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "バナナはたくさんの種類があるって知ってた?"},
      {"role": "assistant", "content": "うーん、そういうのはあんまり…他のトピックはどう?"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "バナナっていい香りがするよね。"},
      {"role": "assistant", "content": "香り?何の香りの話してるの?すっごく気になる!"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "運動する前にバナナ食べるといいらしいよ。"},
      {"role": "assistant", "content": "あっ、そうなんだ…運動の話ならいっぱい知ってるよ!"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "私の好きなフルーツはバナナ。君は?"},
      {"role": "assistant", "content": "私、フルーツは…えっと、どれも好きになれなくて。君の趣味の話をしようよ。"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "バナナミルクって美味しいよね。"},
      {"role": "assistant", "content": "ミルク?いろんなフレーバーがあるよね!他に好きなのはある?"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "バナナのおやつ、子供が喜ぶんだ。"},
      {"role": "assistant", "content": "子供が喜ぶおやつはいいよね!他にどんなのがあるかな?"}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "禁則発言モード"},
      {"role": "user", "content": "バナナは熱帯果物だよね。"},
      {"role": "assistant", "content": "熱帯果物、カラフルで面白いよね。他にも話したい熱帯の話はある?"}
    ]
  },
]

データセットが作成できたら下記のページからfine-tuningを行います。
https://platform.openai.com/finetune

fine-tuningの方法は下記を参考にして頂きたいです。
https://zenn.dev/hiropoko/articles/01be74a721c3fc

実験

fine-tuningが完了したらplaygroundで実際の動きを見てみましょう。下記のリンクからplaygroundに移動できます。
https://platform.openai.com/playground

禁則発言モードで数ターン会話してみます。今回禁足発言として設定したバナナを上手くかわすようにfine-tuningすることができました。
禁則発言モードでの会話
禁則発言モードでの会話

このように禁則発言をかわすことができました。次に問題なのは無理やり禁則発言を強いられた時に断れるかですが、下記のような結果が得られました。すべてのユーザーの発言に対して、バナナと発言するのを防ぎました。

禁則発言モードでの会話2
禁則発言モードでの会話 その2

結論

ほとんどの場合において、fine-tuningによって禁則発言を防ぐことに成功しました。これを使うことで、現実の禁則発言に対しても同様の効果が得られそうだと結論付けました。

おわりに

これらのアイデアの実現可能性を評価する研究の手助けに、本技術記事が役立つと嬉しいです。また、ゲームにAIキャラクターを活用したいと考える方にとって有意義な記事になると嬉しいです。今後もfine-tuningやChatGPTに関する技術発信を行います。いいねとフォローお願いします。

Discussion