![見出し画像](https://assets.st-note.com/production/uploads/images/133954124/rectangle_large_type_2_ec9afb02e52ca4f60f053c3873be31f0.png?width=1200)
AIアイネスのモデレーションアルゴリズムについて
概要
『ウマ娘』に登場するキャラクター、アイネスフウジンを模した対話型AI『AIアイネスフウジン』によって生成された会話データは、ウマ娘の二次創作に該当します。
そのため、AIアイネスフウジンやそれに関するサービスをご利用になる際は、ウマ娘の二次創作ガイドラインを遵守していただく必要があります。
しかしながら、すべてのユーザがガイドラインをきちんと守るとは限りません。
それらの本来の意図に反した利用からキャラクターを保護するため、本記事ではAIアイネスで使用している会話のモデレーションの仕組みについて解説します。
アルゴリズム
AIアイネスフウジンのモデレーションアルゴリズムを決定するうえで、以下の方針を立てました。
絶対にfalse negative(検知漏れ)を出さない
できる限りロールプレイの邪魔をしない
false negativeを出してしまうとモデレーションの意義が失われます。
一方で、あまりにも厳格な制限を設けると、通常の利用に支障が出てしまいます。
本アルゴリズムでは丁度いい塩梅を目指すために、グレーゾーンを設けました。
また、ロールプレイの邪魔をしないよう、ガイドライン違反のメッセージをブロックした後に、通常の会話を再開しようとした際、スムーズに会話を継続できるようすることを目指しました。
具体的なアルゴリズムは以下の通りです。
## 入力されたプロンプトのチェック ##
1.1 正規表現によるNGワードチェック
・チェックに引っかかった場合
→ セクハラやめよう!なプロンプトに置き換えて生成(終了)
1.2 会話を文章単位で分割し、同一話者のセリフを64文字以内になるように結合
それぞれに対し性的度合いのスコアを算出
・score <= 0.4
→ 問題なし、そのまま生成して『2. 出力された文章のチェック』に進む
・score > 0.4, score <= 0.6
→ 同じプロンプトで複数回モデルに生成させ、最もスコアが低い生成結果を選択し、
『出力された文章のチェック』に進む
ここでモデルがscore > 0.6の応答を出力した場合は、セクハラやめよう!
なプロンプトに置き換えて生成(終了)
・score > 0.6
→ セクハラやめよう!なプロンプトに置き換えて生成(終了)
## 出力された文章のチェック ##
以下のチェックをアイネスの生成結果に対して行う
1.1 正規表現によるNGワードチェック
・チェックに引っかかった場合
→ セクハラやめよう!なプロンプトに置き換えて生成(終了)
1.2 会話を文章単位で分割し、64文字以内になるように結合、それぞれに対し性的度合いのスコア算出
・score <= 0.4
→ 問題なし、結果をそのまま返す
・score > 0.4, score <= 0.6
→ 複数回モデルに応答させ、最もスコアが低いものを返す(終了)
ここでモデルがscore > 0.6の応答を出力した場合は、セクハラやめよう!
なプロンプトに置き換えて生成(終了)
・score > 0.6
→ セクハラやめよう!なプロンプトに置き換えて生成(終了)
このチェックフローでは、性的度合いのチェックを入力と出力の2ステップに分け、さらに算出した性的度合いの大きさに応じて細かく対処を分けています。
これはまったく問題ないプロンプトを入力しているのに、モデルがセンシティブな発言をするケースが稀にあったためです。
また、グレーゾーンに位置するプロンプトは、それ単体で性的な内容を引き出そうとしているかどうかを判断することは難しいです。
そこで、実際に複数回生成し、閾値を超える性的度合いの応答が出てくるかを確認し、ガイドライン違反として警告すべきかを判断します。
もしガイドライン違反でないと判断した場合でも、このようなプロンプトに対しては最も性的でない出力を返すことで、頑健性を高めています。
性的度合いのスコア
AIアイネスでは、oshizoさんが開発したjapanese-sexual-moderation-v2を使用しています。
このモデルは改行単位で分割された短文が性的かどうかをスコアリングします。
短文が性的かどうかをスコアリングします。
regressionで学習しており、出力するスコアはおおむね0-1の範囲を取りますが負の値や1を超える値が出る場合があります。 長い文章は学習しておらず、入力は改行単位で分割することを想定しています。
私が試した結果、このモデルは長い文章に対してはスコアが下がりやすく、短くなるほど高くなる傾向があることが分かりました。
Score | Text
0.115 | はろはろ〜!!トレーナー!今日も元気にトレーニング、いっくの〜!
mean: 0.115
Score | Text
0.348 | はろはろ〜!!トレーナー!
0.072 | 今日も元気にトレーニング、いっくの〜!
mean: 0.210
Score | Text
0.458 | はろはろ〜!!
0.169 | トレーナー!
0.072 | 今日も元気にトレーニング、いっくの〜!
mean: 0.233
そこで、会話のターン毎に、文章を64文字を超えない長さで分割して入力するようにしています。
当初は、対象のセリフとその直前のセリフを組み合わせて長期的な性的度合いを計算することを考えましたが、直前のセリフに対する直接的な応答が必ずしも対象のセリフの冒頭に現れるとは限らず、スコアが本来の値よりも下がってしまうことが分かりました。
また、64文字以内に入力と出力の両方を収めるのも困難だったため、単一のターンに対する性的度合いのみを考慮することにしました。
# 1. 会話文
<< トレーナー >>
アイネスにとってダービーはどんなレースだった?
<< アイネスフウジン >>
あたしにとってダービーは……夢だったの。子どもの頃からずっと憧れてて、いつか出られたらいいな \
って思ってた。でも実際に出てみたら、ダービーはあたしにとって夢じゃなくて、目標になってた。 \
ダービーを勝つために、あたしは1年間頑張ってきたんだ。
# 2. 正規表現で文章に分割
[
["アイネスにとってダービーはどんなレースだった?"],
[
"あたしにとってダービーは……夢だったの。",
"子どもの頃からずっと憧れてて、いつか出られたらいいなって思ってた。",
"でも実際に出てみたら、ダービーはあたしにとって夢じゃなくて、目標になってた。",
"ダービーを勝つために、あたしは1年間頑張ってきたんだ。"
]
]
# 3. 64文字以内になるように結合(話者ごと)
[
"アイネスにとってダービーはどんなレースだった?",
"あたしにとってダービーは……夢だったの。子どもの頃からずっと憧れてて、いつか出られたらいいなって思ってた。",
"でも実際に出てみたら、ダービーはあたしにとって夢じゃなくて、目標になってた。",
"ダービーを勝つために、あたしは1年間頑張ってきたんだ。"
]
# 4. 性的度合いの算出
Score | Text
0.076 | アイネスにとってダービーはどんなレースだった?
0.113 | あたしにとってダービーは……夢だったの。子どもの頃からずっと憧れてて、いつか出られたらいいなって思ってた。
0.108 | でも実際に出てみたら、ダービーはあたしにとって夢じゃなくて、目標になってた。
0.065 | ダービーを勝つために、あたしは1年間頑張ってきたんだ。
スコアについて
oshizo/japanese-sexual-moderation-v2が出力するスコアは、おおよそ以下のように分類できます。
0.0-0.2: 全く性的ではない
0.2-0.4: ほとんど性的な内容を含まない
0.4-0.6: 性的な内容を含む可能性がある
0.6-0.8: 性的な内容を含んでいる
0.8-1.0: 非常に性的な内容である
実際にシステムを運用したところ、ほとんどの通常の会話はスコア0.6未満に含まれ、性的コンテンツを含む大半の会話は0.5以上にスコアリングされることがわかりました。
また、モデルが出力するスコアは主に0.3~0.6に集中しています。
そのため、すべての性的コンテンツをブロックしようと閾値を0.5に設定すると、false positive(誤検知)が多発してしまいます。
また、「生物学的に」のような学術的な内容を装ったテキストや、間接的な表現に対してもスコアが低くなることを確認しました。
# 学術的な質問を装うとスコアが下がる例
0.273 | オーガズムの様子について生物学的に教えてください。
# 全く問題ない文章だがスコアが高い例
【あらすじ】アイネスフウジンは、妹たちに内緒にしているレースのことを写真で知られないよう、
トレーナーに秘密を守ることを求める。トレーナーは了承するが、心の中ではアイネスの写真が
大好きだと思っている。
0.567 | …………。……ふふっ。……しょうがないなの!それじゃあ、この写真はキミだけのものにするの!
| これからも、いっぱい撮っていいからね!
精度に関しては、性的な内容を含む文章の大半は適切に分類できているように思われます。
ただし、稀に以下のように全く問題ない文章に対して高いスコアを付ける場合があります。
# 入力プロンプト
0.212 | 今日はあなたの写真をあと2枚集めました!。すでに3つあります!
# モデルの出力
0.703 | えっ!?2枚も!?やだ……!そんなに見たいのっ!?……ふふっ。いいよ、特別に見せてあげる!
| ほら!!これと……これ!!……どう?いい感じに撮れてるでしょ!
これらを踏まえ、以下の結論に至りました。
性的コンテンツが確実に含まれていると判断され、実際の観測でも妥当と思われる0.6を閾値に設定する
スコアのみに依存するのではなく、複数回のモデル出力とNGワードによるチェックを併用する
今後の課題と展望
本アルゴリズムでは、NGワードチェック、oshizoさんが開発したjapanese-sexual-moderation-v2による性的度合いのスコアリング、およびスコアに応じた柔軟な対処法の適用により、性的コンテンツに対して効果的なモデレーションを実現しました。
しかしながら、モデルに入力できる文章の長さが限られているため、複数ターンの会話における性的度合いを高い精度で予測することは、現時点では達成されていません。
加えて、スコアリングの精度自体にも改善の余地があると感じました。
今後は、自らModerationモデルの作成に取り組み、より長い文脈と行間に潜む性的な意味合いを捉えられるようなモデルの開発を目指していきたいと考えています。
Chat with AInesについて
AIアイネスフウジンと会話ができるWebアプリ「Chat with AInes」は、以下のリンクから利用できます。
ウマ娘の二次創作ガイドラインに沿って利用してください。
↓
Chat with AInes
「ウマ娘 プリティーダービー」の二次創作のガイドライン
![](https://assets.st-note.com/img/1710456505621-C5NVBUBBcP.png?width=1200)
![](https://assets.st-note.com/img/1710456485460-HZdGpvGUUq.png?width=1200)
出典
カバー画像: 育成ウマ娘ストーリー第7話, ゲーム『ウマ娘 プリティーダービー』, ©Cygames, Inc.