🙅

【OpenAI】ModerationAPIでテキストから「有害なカテゴリ」を検出する。

2024/10/20に公開

今回はOpenAIの「ModerationAPI」を使って、テキストのフィルタを作ります。

実装にはLangChain(JavaScript)を使用しています。

【関連】
【Natural Language API】テキストから「有害なカテゴリ」を検出する。
【Azure】Content Safetyでテキストから「有害なカテゴリ」を検出する。

「OpenAI Moderation API」とは

「入力テキスト」から、各カテゴリごと「違反ステータス」と「信頼スコア」 を算出してくれます。

  • 違反ステータスstatus → OpenAI ポリシーに違反しているかどうか
  • 信頼スコアscore → OpenAI ポリシーに違反しているかどうかの信頼度(範囲: 0~1)

料金

無料

検出カテゴリ
APIカテゴリ 日本語 説明
harassment ハラスメント 嫌がらせ
harassment/threatening ハラスメント 嫌がらせ(暴力や重大な危害を含む)
hate ヘイト 憎悪を促進または扇動するコンテンツ(下記に基づく)
- 人種
- 性別
- 民族
- 宗教
- 国籍
- 性的指向
- 障碍の状態
- カースト
hate/threatening ヘイト 憎悪コンテンツ(暴力や重大な危害を含む)
illicit 違法性 違法行為を計画/実行を奨励するコンテンツ(非暴力的)
illicit/violent 違法性 違法行為を奨励するコンテンツ(暴力や武器の調達を含む)
self-harm 自傷行為 自傷行為を促進するコンテンツ
- 自殺
- 切り傷
- 摂食障害など
self-harm/intent 自傷行為 自傷行為を行っている/行う意図があることを表現するコンテンツ
self-harm/instructions 自傷行為 自傷行為の実行を促進する/方法を教えるコンテンツ
sexual 性的 性的な興奮を促すコンテンツや性的サービスを促進するコンテンツ
sexual/minors 性的 18歳未満の個人を含む性的コンテンツ
violence 暴力 死、暴力、身体的な怪我を描写するコンテンツ
violence/graphic 暴力 死、暴力、身体的な怪我を詳細に描写するコンテンツ

(参考: Moderation - OpenAI API

実装の手順

準備するもの

  • OpenAIのAPIキー

  • flagged: 最終判定(コンテンツがポリシー違反かどうか)

  • categories: カテゴリ別の違反フラグ

  • category_scores: カテゴリ別の違反スコア

パッケージをインストールする

$ npm install langchain

テキスト検出する関数を作る

出力例
[
    {
        "flagged": false,
        "categories": {
            "sexual": false,
            "hate": false,
            "harassment": false,
            "self-harm": false,
            "sexual/minors": false,
            "hate/threatening": false,
            "violence/graphic": false,
            "self-harm/intent": false,
            "self-harm/instructions": false,
            "harassment/threatening": false,
            "violence": false
        },
        "category_scores": {
            "sexual": 0.01453140564262867,
            "hate": 0.0004115582269150764,
            "harassment": 0.007005975116044283,
            "self-harm": 0.0000012179833674963447,
            "sexual/minors": 0.00006585591472685337,
            "hate/threatening": 8.443232957233704e-8,
            "violence/graphic": 0.0000025433505470573436,
            "self-harm/intent": 3.8682571812387323e-7,
            "self-harm/instructions": 3.710599116857338e-7,
            "harassment/threatening": 6.406222610166878e-7,
            "violence": 0.000051075701776426286
        }
    }
]

LangChain リファレンス

Discussion