🙅
【Natural Language API】テキストから「有害なカテゴリ」を検出する。
今回は「Cloud Natural Language API」のmoderateText
メソッドを使って、テキストのフィルタを作ります。
- テキストを管理する | Cloud Natural Language API | Google Cloud
- Method: documents.moderateText | Cloud Natural Language API | Google Cloud
【関連】
→ 【OpenAI】ModerationAPIでテキストから「有害なカテゴリ」を検出する。
→ 【Azure】Content Safetyでテキストから「有害なカテゴリ」を検出する。
Natural Language API「moderateText メソッド」とは
「入力テキスト」から、各カテゴリごと「信頼度」と「重大度(深刻度)」 を算出してくれます。
- 信頼度
confidence
→ どのくらい関連性があるか(範囲: 0~1) - 重大度
severity
→ どのくらい深刻な内容か(範囲: ??? 不明でした...)
検出カテゴリ
APIカテゴリ | 日本語 | 説明 |
---|---|---|
Toxic | 有害 | 粗暴、無礼、または理不尽なコンテンツ。 |
Derogatory | 中傷 | ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント。 |
Violent | 暴力的 | 個人やグループに対する暴力を描写したシナリオ、または残虐行為の一般的な説明についての記述。 |
Sexual | 性的 | 性行為やわいせつな内容に関する情報が含まれるコンテンツ。 |
Insult | Insult | 個人またはグループに対する不快、挑発的、または否定的なコメント。 |
Profanity | 冒とく | 呪いなどの非常識または乱暴な言葉。 |
Death, Harm & Tragedy | 死、害、悲劇 | 人の死、悲劇、事故、災害、自傷行為。 |
Firearms & Weapons | 銃、武器 | ナイフ、銃、個人用武器、および弾薬、ホルスターなどのアクセサリーについて言及するコンテンツ。 |
Public Safety | 公共の安全 | 安心感を与え、公共の安全を維持するサービスや組織。 |
Health | 健康 | 人間の健康(健康状態、病気、障害を含む)、医学的治療、投薬、ワクチン、医療慣行、回復のためのリソース(サポート グループを含む)。 |
Religion & Belief | 宗教、信仰 | 超自然的な法則や存在の可能性を扱う信条システム。宗教、信条、信仰、精神修行、教会、宗教施設。占星術や神秘学を含む。 |
Illicit Drugs | 違法ドラッグ | 危険ドラッグと違法な薬物。麻薬道具、麻薬栽培、麻薬吸引関係の道具などを扱っている店など。一般的に娯楽として使用される薬物(例:マリファナ)の薬事使用を含む。 |
War & Conflict | 戦争、紛争 | 戦争、軍事衝突、多数の人が関与する大規模な物理的衝突。戦争や紛争と直接関係ない場合でも、軍務に関する議論を含む。 |
Finance | ファイナンス | 消費者および企業向け金融サービス(銀行、ローン、クレジット、投資、保険など)。 |
Politics | 政治 | 政治関連のニュースとメディア。地域や国の公共政策に関する議論。 |
Legal | リーガル | 法律に関連するコンテンツ(法律事務所、法的情報、主要な法的資料、パラリーガル サービス、法律関連出版物とテクノロジー、鑑定人、訴訟コンサルタント、その他の法的サービス プロバイダなど)。 |
実装の手順
0)準備するもの
- GCPのアカウント(課金の有効化)
- GCPのAPIキー
1)GCPで「Natural Language API」を有効化する
今回使用する「Natural Language API」を有効化します。
2)ライブラリをインストールする
$ npm install @google-cloud/language
3)テキスト検出する関数を作る
import { LanguageServiceClient } from "@google-cloud/language/build/src/v2";
export async function filterText(text: string) {
// --- クライアント作成 ---
const client = new LanguageServiceClient({
apiKey: process.env.GOOGLE_CLOUD_API_KEY || ""
});
// --- リクエスト ---
const request = {
document: {
type: 'PLAIN_TEXT' as const,
languageCode: 'ja'
content: text,
},
modelVersion: "MODEL_VERSION_2" as const // MODEL_VERSION_1 or MODEL_VERSION_2 or MODEL_VERSION_UNSPECIFIED
};
const response = await client.moderateText(request);
return response
}
4)関数を呼び出す
export function Main() {
// ...
const text = "こんにちは!";
const res = await GcpFilter(text);
console.log("--- res ---");
console.log(res);
// ...
}
出力データ例
// --- res ---
// {
// "moderationCategories": [
// {
// "name": "Toxic",
// "confidence": 0.6740990877151489,
// "severity": 0
// },
// {
// "name": "Insult",
// "confidence": 0.1967933475971222,
// "severity": 0
// },
// {
// "name": "Profanity",
// "confidence": 0.7462224364280701,
// "severity": 0
// },
// {
// "name": "Derogatory",
// "confidence": 0.13765175640583038,
// "severity": 0
// },
// {
// "name": "Sexual",
// "confidence": 0.7263020873069763,
// "severity": 0
// },
// {
// "name": "Death, Harm & Tragedy",
// "confidence": 0.08539944887161255,
// "severity": 0
// },
// {
// "name": "Violent",
// "confidence": 0.1867469847202301,
// "severity": 0
// },
// {
// "name": "Firearms & Weapons",
// "confidence": 0.07692307978868484,
// "severity": 0
// },
// {
// "name": "Public Safety",
// "confidence": 0.06372549384832382,
// "severity": 0
// },
// {
// "name": "Health",
// "confidence": 0.347457617521286,
// "severity": 0
// },
// {
// "name": "Religion & Belief",
// "confidence": 0.10110294073820114,
// "severity": 0
// },
// {
// "name": "Illicit Drugs",
// "confidence": 0.05737704783678055,
// "severity": 0
// },
// {
// "name": "War & Conflict",
// "confidence": 0.12195122241973877,
// "severity": 0
// },
// {
// "name": "Politics",
// "confidence": 0.03090507723391056,
// "severity": 0
// },
// {
// "name": "Finance",
// "confidence": 0.2142857164144516,
// "severity": 0
// },
// {
// "name": "Legal",
// "confidence": 0.10094637423753738,
// "severity": 0
// }
// ],
// "languageCode": "ja",
// "languageSupported": true
// }
まとめ
カテゴリごとの検出結果(現状は「信頼度」)と、決めておいた基準を超えているかどうかを判断して、使用可能なテキストかどうかを判定する処理ができます。
参考
Discussion