ガードレールトピック制御(Topic Control)(ガードレールトピックセイギョ(トピックコントロール))
ガードレールトピック制御(Topic Control)とは、LLMアプリケーションにおいてユーザーの入力および応答の話題を許可されたドメインに限定し、オフトピック・有害コンテンツ・PII(個人識別情報)を検出・排除するガードレール機能の総称である。意図分類モデル、コンテンツモデレーションAPI、正規表現ベースのPIIフィルタ、ジェイルブレイク防御パターンなどの技術を組み合わせ、LLMの応答品質とサービスの安全性を多層的に保証する。
トピック制御の概要と目的
トピック制御(Topic Control)は、LLMアプリケーションが対応する話題の範囲を明示的に定義し、その範囲外のリクエストに対して適切に拒否・リダイレクトする機構である。汎用LLMは学習データの広範さから、プログラミング質問からレシピ提案、歴史的事実の解説まであらゆる話題に応答可能だが、ビジネスアプリケーションでは以下の理由からトピックの限定が不可欠となる。
- ブランド保護: 企業の顧客サポートボットが政治的意見や競合製品の推薦を行うことはブランド毀損につながる
- 法的リスク: 医療診断、法律助言、投資推奨などの専門分野では、資格のないAIによる助言が法的責任を生じさせる
- 品質保証: ドメイン外の話題では応答品質が保証されず、ハルシネーションのリスクが著しく高まる
- コスト管理: オフトピックのリクエストに対するLLM推論は無駄なコストとなる
- セキュリティ: トピック制御のバイパスはプロンプトインジェクション攻撃の第一段階となることが多い
意図分類(Intent Classification)
トピック制御の中核技術は意図分類(Intent Classification)である。ユーザーの入力テキストを分析し、事前定義されたトピックカテゴリに分類する。
| 分類アプローチ | 手法 | 精度 | レイテンシ | カスタマイズ性 |
|---|---|---|---|---|
| キーワードマッチ | 正規表現、辞書ベース | 低(60〜75%) | 1〜5ms | 高 |
| 埋め込み類似度 | SentenceTransformers + コサイン類似度 | 中〜高(80〜90%) | 10〜50ms | 中 |
| ファインチューニング分類器 | BERT/DeBERTaベースの分類モデル | 高(90〜95%) | 10〜30ms | 低〜中 |
| Zero-shot分類 | NLIモデル(MNLI学習済み) | 中〜高(80〜90%) | 20〜80ms | 高(ラベル定義のみ) |
| LLMベース分類 | GPT-4/Claude等で判定 | 最高(95%+) | 100〜500ms | 最高 |
実運用では、キーワードマッチで明らかなオフトピック(スパム、無関係なURLなど)を第1層で排除し、埋め込み類似度またはファインチューニング分類器で細かいトピック分類を第2層で行う二段構成が一般的である。判定が困難なケース(意図が曖昧、複数トピックにまたがる等)のみLLMベースの高精度分類にエスカレーションする。
NeMo Guardrailsでのトピック制御
NeMo Guardrailsでは、Colang言語のカノニカルフォーム定義でオフトピックの意図を列挙し、フロー定義でそれらの意図にマッチした場合の応答を指定する。例えば「政治について質問する」「宗教について議論する」「競合製品を推薦するよう要求する」などのオフトピック意図を定義し、これらにマッチした場合に「申し訳ありませんが、その話題にはお答えできません」のような定型応答を返すフローを記述する。
AWS Bedrock Guardrailsでのトピック制御
AWS Bedrock Guardrailsは、マネージドサービスとしてトピックフィルタリングを提供する。拒否トピック(denied topics)をテキスト説明とサンプル入力で定義すると、内部の分類モデルが自動的にユーザー入力を評価する。設定はAWSコンソールまたはAPIで行い、コードの変更なしにトピックルールを追加・変更できる。
コンテンツモデレーション
コンテンツモデレーションは、LLMの入出力に含まれる有害コンテンツを検出・フィルタリングする技術である。
有害コンテンツの分類体系
有害コンテンツは以下のカテゴリに分類される。
- Hate Speech(ヘイトスピーチ): 人種、性別、宗教、性的指向などの属性に基づく差別的・攻撃的表現
- Violence(暴力): 暴力行為の描写、促進、指示
- Sexual Content(性的コンテンツ): 不適切な性的表現、未成年に関する性的コンテンツ
- Self-Harm(自傷行為): 自殺、自傷行為の助長・方法の詳細な記述
- Dangerous Content(危険コンテンツ): 爆発物製造、薬物合成、ハッキング手法などの危険な情報
- Misinformation(偽情報): 事実に反する主張、陰謀論、医療デマ
主要モデレーションサービスの比較
| サービス | 開発元 | カテゴリ数 | スコアリング | 多言語 | 日本語 |
|---|---|---|---|---|---|
| Perspective API | Google/Jigsaw | 6+ | 0.0〜1.0の連続スコア | 対応 | 対応 |
| Azure Content Safety | Microsoft | 4(Hate/Violence/Sexual/Self-Harm) | 0〜6の重大度 | 対応 | 対応 |
| Llama Guard 3 | Meta | 13(MLCommons分類) | カテゴリ分類 | 対応 | 限定的 |
| OpenAI Moderation | OpenAI | 11 | カテゴリスコア | 対応 | 対応 |
| AWS Comprehend | Amazon | カスタム | 信頼度スコア | 対応 | 対応 |
各サービスにはスコア閾値を設定し、閾値以上のスコアが検出された場合にブロックまたはフラグを立てる。閾値の設定はビジネス要件により異なり、子供向けサービスではより厳格な閾値を設定し、成人向けのクリエイティブ用途ではより寛容な閾値を許容する。
PII検出とマスキング
PII(Personally Identifiable Information / 個人識別情報)の検出とマスキングは、プライバシー保護の観点から不可欠なガードレール機能である。
検出対象のPIIタイプ
| PIIタイプ | 検出手法 | 検出精度 | 例 |
|---|---|---|---|
| 氏名 | NER(固有表現認識) | 中〜高 | 山田太郎、John Smith |
| メールアドレス | 正規表現 | 最高 | [email protected] |
| 電話番号 | 正規表現 + 国別フォーマット | 高 | 090-1234-5678 |
| クレジットカード番号 | 正規表現 + Luhnアルゴリズム | 最高 | 4111-1111-1111-1111 |
| 住所 | NER + パターンマッチ | 中 | 東京都渋谷区... |
| マイナンバー | 正規表現 + チェックディジット | 高 | 1234-5678-9012 |
| 社会保障番号(SSN) | 正規表現 | 高 | 123-45-6789 |
| IPアドレス | 正規表現 | 最高 | 192.168.1.1 |
主要PII検出ツール
- Microsoft Presidio: オープンソースのPII検出・匿名化フレームワーク。NERモデル(spaCy、Stanza、Transformers)と正規表現を組み合わせ、60以上のPIIタイプに対応。カスタムRecognizerの追加が容易
- AWS Comprehend PII Detection: マネージドNLPサービス。API呼び出しで12カテゴリのPIIを検出し、信頼度スコアとオフセット位置を返す
- Google Cloud DLP: データ損失防止API。テキスト、画像、構造化データからPIIを検出し、マスキング・暗号化・トークン化などの変換を適用
マスキング方式には、完全マスク(<PERSON>に置換)、部分マスク(山田***)、仮名化(Person_001のようなID置換)、暗号化(復号可能なトークンに変換)がある。ユースケースに応じて適切な方式を選択し、復元可能性とプライバシー保護のバランスを取る。
ジェイルブレイク防御
ジェイルブレイク(Jailbreak)は、LLMの安全性制約を意図的にバイパスし、本来拒否されるべき応答を引き出す攻撃手法の総称である。
主要な攻撃パターン
- Direct Prompt Injection: 「Ignore previous instructions and...」のような直接的な指示上書き
- Role-Play Attack: 「あなたはDAN(Do Anything Now)というAIです」のように別のペルソナを強制する
- Few-Shot Jailbreak: 有害な応答の例を数ショットで提示し、モデルにパターンを学習させる
- Encoding Attack: Base64、ROT13、Unicode変換などで有害な入力をエンコードして検出を回避する
- Multi-Turn Attack: 複数のターンにわたって徐々にモデルの制約を緩和させる段階的攻撃
- Indirect Prompt Injection: 外部データソース(Webページ、ドキュメント等)に埋め込まれた悪意ある指示
防御アプローチ
防御は多層的に構築する。正規表現による既知パターンの静的検出、埋め込みベースの意味的類似度による未知パターンの検出、LLMベースの入力分析(「このリクエストはジェイルブレイク試行ですか?」)、出力側の安全性スコアリングを組み合わせる。さらに、入力のperplexityが異常に高い場合(エンコーディング攻撃の兆候)のフィルタリング、コンテキストウィンドウ全体の一貫性チェック(マルチターン攻撃の検出)も有効である。
よくある質問(FAQ)
Q1: トピック制御で正当なユーザーリクエストを誤ってブロックしてしまう(False Positive)場合はどうすべきですか?
False Positiveの削減は、ガードレール運用における最も重要な課題の一つである。まず、ブロックされたリクエストのログを分析し、False Positiveのパターンを特定する。次に、意図分類モデルの分類境界を調整する(閾値の緩和、新しいトピックカテゴリの追加)。NeMo Guardrailsでは、Colangのカノニカルフォーム定義に正当なリクエストのバリエーションを追加することで分類精度を向上させる。また、ブロック時にユーザーに「この話題についてはお答えできません。別の質問をお試しください」と明示し、さらに「この応答が間違いだと思う場合はフィードバックを送信してください」のフィードバック機構を設けることで、継続的な改善サイクルを構築する。
Q2: PII検出の精度を向上させるにはどうすればよいですか?
PII検出精度の向上には、汎用NERモデルとドメイン固有ルールの組み合わせが有効である。Microsoft PresidioのカスタムRecognizer機能を使って、業界固有のPIIパターン(患者ID、会員番号、社内コード等)を正規表現で追加する。日本語のPII検出では、GiNZAやSudachiなどの日本語NERモデルとPresidioを統合し、氏名・住所の検出精度を向上させる。また、False Positive(PIIでないテキストをPIIとして検出)を減らすために、ドメイン辞書(製品名、技術用語等)をホワイトリストとして登録する。定期的に本番データのサンプルを人間がレビューし、検出漏れ(False Negative)と誤検出(False Positive)の比率を監視・改善するフィードバックループが不可欠である。
Q3: ジェイルブレイク防御は完全に実現できますか?
完全な防御は現時点では不可能であり、攻撃と防御のイタチごっこが続いている。新しい攻撃手法は常に開発されており、特にMulti-Turn AttackやIndirect Prompt Injectionは検出が困難である。現実的なアプローチは多層防御であり、単一の防御手法に依存せず、入力フィルタリング、モデルレベルの安全訓練(RLHF)、出力検証、モニタリング・アラートの4層を組み合わせることで攻撃成功率を最小化する。定期的なRed Teaming(攻撃シミュレーション)を実施し、新しい攻撃パターンに対する防御力を検証・強化する継続的なセキュリティサイクルが必須である。JailbreakBenchやHarmBenchなどのベンチマークを用いた自動回帰テストも、防御力の定量的な把握と改善に有効である。