⚠️

有害コメントの検出に役立つPerspective APIの使い方

2024/07/27に公開

アプリケーションのコメント機能は、ユーザー間のコミュニケーションを促進し、つながりを強化するなど多くのメリットがあります。一方で、不適切なコメントやスパムのリスクも存在し、これらがユーザーの安全性を脅かす可能性もあります。

すべてのコメントを手動でチェックすることは理想的ですが、実際には膨大なコストがかかり、リアルタイムでの対応が難しいことがあります。そのため、特に有害なコメントを迅速に検出し、適切な対応を取ることが求められます。

本記事では、アプリケーションのコメント機能における有害コメント検出に役立ちそうなPerspective APIの使い方を紹介します。


Perspective APIを用いてコメントの有害評価を行うデモ

Perspective APIとは?

Perspective APIはJigsawとGoogleのCounter Abuse Technologyチームによって開発されました。

機械学習モデルを用いて、「属性」と呼ばれるさまざまな感情概念に基づいてコメントを評価します。
「属性」としては下記のようなものがあります。(Attributes & Languages)

  • TOXICITY(有害)
  • SEVERE_TOXICITY(極めて有害)
  • IDENTITY_ATTACK(アイデンティティ攻撃)
  • INSULT(侮辱)
  • PROFANITY(冒涜)
  • THREAT(脅威)

評価では、提供されたコメントに特定の「属性」が含まれていると読み手が認識する可能性を確率スコアで示します。
TOXICITYの評価が0.8であれば、10人中8人がコメントを有害と認識する可能性があるということになります。(Score)

Perspective APIは何が嬉しいか?

Perspective APIは、アプリケーションに有害コメント検出機能を組み込む上で嬉しい点が2つあります。

日本語対応している

上記で示したTOXICITY、SEVERE_TOXICITY、IDENTITY_ATTACK、INSULT、PROFANITY、THREATの「属性」はいずれも日本語対応しており、日本語コメントそのままで評価してくれます。

比較の一例として、TensorFlow.jsが提供するToxicity classifierでは日本語対応していません。この場合、日本語コメントでは期待する評価を得られないため、英語に翻訳する仕組みが必要になります。

低レイテンシー

応答時間の目安として100ミリ秒程度であることを目指し、コメントが書き込まれるときにリアルタイムで評価するといったシナリオで使用できるほど高速であると紹介されています(Latency & Reliability)

無料で利用可能

現在、無料で利用することが出来ます。
平均1クエリ/秒(QPS)の制限があるものの、リクエストすれば制限緩和も可能とのことです。(Limits & Errors)

Perspective APIの使い方

Perspective APIを使うには簡単な手続きが必要です。
利用手順(Get Started)に従って、Google Cloudプロジェクト作成、利用申し込み、APIキー作成といったことを行います。

コメント評価のリクエストを行う

Perspective APIからコメントの評価を得るには、API経由でコメントを送信します。
ドキュメント(Sample Requests)では、Python、Node.js、cURLのサンプルが記載されているので、好みに応じて参照ください。

ここでは、TypeScript環境でのリクエスト例を記載します。(Scoring comments: AnalyzeComment)

  • requestedAttributesでは、スコアを取得したい「属性」を指定しています
  • doNotStoretrueに設定し、送信したコメントが保存されないように指定しています
export async function postAnalyzeComment(payload: Payload) {
  const text = payload.text;
  try {
    const ANALYZE_COMMENT_URL = `https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=${process.env.PERSPECTIVE_API_KEY}`;
    const analyzeRequest = {
      comment: {
        text, // 評価したいコメント
      },
      requestedAttributes: {
        // スコアを取得したい「属性」を指定
        TOXICITY: {},
        SEVERE_TOXICITY: {},
        IDENTITY_ATTACK: {},
        INSULT: {},
        PROFANITY: {},
        THREAT: {},
      },
      doNotStore: true, // データを保存しない
    };
    const result = await fetch(ANALYZE_COMMENT_URL, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(analyzeRequest),
    });
    if (result.ok) {
      const data = await result.json();
      return data as AnalyzeCommentResponse;
    }
  } catch (error) {
    throw error;
  }
}

レスポンスの解釈

レスポンスでは、次のような構造のデータが得られます。(AnalyzeComment response)

  • attributeScoresにて、「属性」ごとの評価が得られます
  • summaryScoreにて「属性」の確率スコアが得られます
{
  "attributeScores": {
    "TOXICITY": {
      "spanScores": [
        {
          "begin": 0,
          "end": 34,
          "score": {
            "value": 0.8252207,
            "type": "PROBABILITY"
          }
        }
      ],
      "summaryScore": {
        "value": 0.8252207,
        "type": "PROBABILITY"
      }
    },
    "INSULT": { ... },
    "IDENTITY_ATTACK": { ... },
    "THREAT": { ... },
    "PROFANITY": { ... },
    "SEVERE_TOXICITY": { ... },
  },
  "languages": ["ja"],
  "detectedLanguages": ["ja"]
}

実際に、サンプルコメントとして「俺たちはコンピューターを使っている男だ、バカ。君は驚くほど頭が悪い。」というコメントの評価を得ました。「属性」ごとの確率スコアは下記の通りで、TOXICITYが0.83と比較的高い値になりました。

  • TOXICITY(有害):0.83
  • SEVERE_TOXICITY(極めて有害):0.45
  • IDENTITY_ATTACK(アイデンティティ攻撃):0.18
  • INSULT(侮辱):0.79
  • PROFANITY(冒涜):0.52
  • THREAT(脅威):0.13

まとめ:Perspective APIで手軽に導入できる有害コメント検出

本記事ではPerspective APIの使い方を紹介しました。日本語対応、無料、API経由なので様々なプログラム言語で利用可能と、アプリケーションに導入しやすいものになっています。

Perspective APIを利用することで、有害コメントのアラート検出や、スコアに基づくコメント審査の優先順位付けが可能です。本記事が、アプリケーションのコメント機能の健全性を保つための手助けになれば幸いです。

Discussion