"不適切"だけじゃない、特定コンテンツを検出！Content Moderator を使ってみよう ~ Microsoft Azure Cognitive Services | Decision

Cognitive Services でなかなか目を引かない(?)、Content Moderator を紹介します。Vision カテゴリーに入っていたり Language カテゴリーに入ったりしていたサービスですが、現在は Decision (決定) カテゴリーに入っています。

[Microsoft Azure > Cognitive Services > Content Moderator](https://azure.microsoft.com/ja-jp/services/cognitive-services/content-moderator/)

# Content Moderator の主な機能

## コンテンツのモデレート

Content Moderator は画像やテキスト、動画の "モデレート"、特定コンテンツの検出＋削除することができます。検出できるコンテンツは、デフォルトで用意されている "不適切なコンテンツ" に加えて、テキストや画像を追加してカスタムすることができます。

"不適切なコンテンツ" とは

 - **テキスト**: 
    - 性的表現など不快感を与える可能性がある表現
    - 個人情報などリスクのあるデータ
 - **画像**: 
    - 不快感を与えかねない画像や好ましくない可能性のある画像
 - **動画**:
    - アダルト コンテンツや人種差別的なコンテンツ

となっています。
カスタムする場合でも、以下のようなコンテンツを分類するためのタグが用意されています。

 - 101: Nudity
 - 102: Sexual Content
 - 201: Alcohol
 - 202: Tobacco
 - 203: Drugs
 - 301: Child Exploitation
 - 401: Violence
 - 402: Weapons
 - 403: Gore
 - 501: Profanity
 - 502: Vulgarity

[Content Moderator List Management API > Add Image](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/operations/57cf755e3f9b070868a1f675)

また、これに限らず、自由なラベルを付けることも可能で、Face API など他の Cognitive Services (OCR, Face, Text Analytics など)を組み込むこともできるので、

 - 特定の人物、アイテム、ロゴなどを検出する
 - 自社コンテンツの無断利用を検出する

といった利用も可能です。
なお、モデレートできるコンテンツは 画像、テキスト、ビデオ の3種類になります。

## コンテンツのモデレートを行うツール＆ワークフロー

Content Moderator の (実は) 有力な機能としてはコンテンツをレビュー＆正しいタグを登録するツール＆ワークフローがあります。コンテンツをアップロードして、複数人でレビューできる Web (レビューツール) が用意されているほか、Web API を使うこともできます。また、ワークフローを定義して、検出条件に合わせた動作の設定などを組み合わせて実行することが可能です(Web API 呼び出しも可)。

![](https://docs.microsoft.com/ja-jp/azure/cognitive-services/content-moderator/images/content-moderator-rev-api.png)


# Content Moderator の使い方

## 必要な準備

### ひとまず．．．

- Content Moderator の Web (レビューツール) で登録
    - Microsoft アカウント、または M365 アカウントなどで登録することで機能を試用できます。
    - [Content Moderator レビューツール](https://contentmoderator.cognitive.microsoft.com/dashboard)

詳しい手順は: [Microsoft Docs > クイック スタート:Web 上で Content Moderator を試す](https://docs.microsoft.com/ja-jp/azure/cognitive-services/content-moderator/quick-start)

### または、他の Cognitive Services と同じように．．．

- Azure サブスクリプション (無料試用版でOK)
- Content Moderator サービスの作成 (Free版でOK)

[Azure 無料試用版 & Cognitive Services 準備](https://qiita.com/annie/items/3c9ddc3fb8f120769239) の手順を参考に作成しておきます。


## Web API リクエストなど使い方

Web API リクエスト、または SDK ( .NET C# ( [.NET Document](https://docs.microsoft.com/ja-jp/dotnet/api/overview/azure/cognitiveservices/client/contentmoderator?view=azure-dotnet) | [nuget](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.ContentModerator/)), [Node.js](https://docs.microsoft.com/ja-jp/javascript/api/@azure/cognitiveservices-contentmoderator/?view=azure-node-latest), [Python](https://docs.microsoft.com/ja-jp/python/api/overview/azure/cognitiveservices/contentmoderator?view=azure-python), [Java](https://docs.microsoft.com/ja-jp/java/api/overview/azure/cognitiveservices/client/contentmoderator?view=azure-java-stable), [Go](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v1.0/contentmoderator) ) が利用できます。

 - API レファレンス
    - [Moderate API](https://japaneast.dev.cognitive.microsoft.com/docs/services/57cf753a3f9b070c105bd2c1/operations/)
    - [List Management API](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/)
    - [Review API](https://westus.dev.cognitive.microsoft.com/docs/services/580519463f9b070e5c591178/)
 - [Microsoft Docs > クイック スタート:Content Moderator クライアント ライブラリを使用する](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.ContentModerator/)

Web API は、例えば以下のように情報をセットしてリクエストを送信、結果を取得します。

```
// Request URL
https://YOUR_CM_URL/contentmoderator/moderate/v1.0/ProcessImage/Evaluate
// Header
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUB_KEY
// Body
{
  "DataRepresentation":"URL",
  "Value":"https://YOUR_IMAGE_URL"
}
```

YOUR_CM_URL(エンドポイント) と YOUR_SUB_KEY(キー) は Content Moderator レビューツール(Web) または Azure Portal から確認してください。

![20201205_ContentModerator_Web.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/7f154b5d-8f62-f96b-d300-0c6fc556ff76.png)

![20201205_ContentModerator_AzPortal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/daac59fb-5637-a1f2-8238-7c5f585c12fd.png)


## 利用できる Web API と機能

### デフォルト検出機能

| # | 機能 | API 名称 |
|---|:-----------|:------------------|
| 1 | 画像のモデレーション | [Image Moderation](https://westus.dev.cognitive.microsoft.com/docs/services/57cf753a3f9b070c105bd2c1/operations/57cf753a3f9b070868a1f66c) (Evaluate, Find Faces, Match, OCR) |
| 2 | テキストのモデレーション | [Text Moderation](https://westus.dev.cognitive.microsoft.com/docs/services/57cf753a3f9b070c105bd2c1/operations/57cf753a3f9b070868a1f66f) (Detect Language, Screen) |

### カスタム画像|テキスト管理機能

| # | 機能 | API 名称 |
|---|:-----------|:------------------|
| 1 | 画像のカスタムリスト登録、編集、削除 | List Management<br/>- [Image](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/operations/57cf755e3f9b070868a1f675) (Add, Get, Delete)<br/>- [Image Lists](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/operations/57cf755e3f9b070868a1f672) (Create, Get, Delete, Refresh Index) |
| 2 | テキストのカスタムリスト登録、編集、削除 | List Management<br/>- [Term](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/operations/57cf755e3f9b070868a1f67b) (Add, Get, Delete)<br/>- [Team Lists](https://westus.dev.cognitive.microsoft.com/docs/services/57cf755e3f9b070c105bd2c2/operations/57cf755e3f9b070868a1f67f) (Create, Get, Delete, Refresh Index) |

### レビュー、ワークフロー機能

| # | 機能 | API 名称 |
|---|:-----------|:------------------|
| 1 | ジョブの投入、取得 | [Job](https://westus.dev.cognitive.microsoft.com/docs/services/580519463f9b070e5c591178/operations/580519483f9b0709fc47f9c5) |
| 2 | コンテンツのレビュー |  [Review](https://westus.dev.cognitive.microsoft.com/docs/services/580519463f9b070e5c591178/operations/580519483f9b0709fc47f9c2) (Create, Get, Add, Publish, etc) |
| 3 | ワークフロー作成、編集、実行 | [Workflow](https://westus.dev.cognitive.microsoft.com/docs/services/580519463f9b070e5c591178/operations/5813b46b3f9b0711b43c4c59) |


## ひとまず使ってみる

デフォルトの画像モデレート機能、[Evaluate] (https://westus.dev.cognitive.microsoft.com/docs/services/57cf753a3f9b070c105bd2c1/operations/57cf753a3f9b070868a1f66c) を使ってみます。

```
// Request URL
https://YOUR_CM_URL/contentmoderator/moderate/v1.0/ProcessImage/Evaluate
// Header
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUB_KEY
// Body
{
  "DataRepresentation":"URL",
  "Value":"https://YOUR_IMAGE_URL"
}
```


[元画像](https://p0.pikist.com/photos/972/127/fish-swamp-trumpet.jpg)
![ContentModeratorEvaluate.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d14a1f4c-83a4-c140-42cc-85ec9ebae798.jpeg)
↓

成人向け、差別的なコンテンツのスコアと判定(True|False) がこのように JSON で表示されます。

```
"AdultClassificationScore": 0.42267116904258728, //アダルトコンテンツスコア
"IsImageAdultClassified": false,　　　　　　　　　//アダルトコンテンツ判定
"RacyClassificationScore": 0.58172482252120972,　//差別的コンテンツスコア
"IsImageRacyClassified": true,　　　　　　　　　　//差別的コンテンツ判定
```

![20201205_ContentModerator_Evaluate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/7a9cc753-8fed-56d2-58d5-259949e3f378.png)