マルチモーダルコンテンツ分析（Azure AI Content Safety）

近年、インターネット上にはテキスト、画像、動画など、多様な形式のコンテンツが溢れています。これらのコンテンツを安全に利用するためには、有害な情報や不適切なコンテンツを検出し、フィルタリングする技術が不可欠です。

Azure AI Content Safetyは、テキストだけでなく、画像などのマルチモーダルコンテンツを分析し、有害なコンテンツからユーザーを保護するためのAzure AIサービスです。本記事では、Azure AI Content Safetyのマルチモーダル分析の概要、機能、使用方法について詳しく解説します。

https://learn.microsoft.com/ja-jp/azure/ai-services/content-safety/quickstart-multimodal

## マルチモーダル分析とは

マルチモーダル分析とは、テキスト、画像、音声などの複数のモダリティ（形式）の情報を組み合わせて分析する手法です。例えば、画像とテキストを組み合わせることで、画像だけでは判断できないコンテキストを理解し、より正確なコンテンツ分析が可能になります。

Azure AI Content Safetyのマルチモーダル分析機能は、画像の内容と、画像に関連するテキスト（キャプション、コメントなど）を組み合わせて分析することで、より高度なコンテンツの安全性評価を実現します。

### 主な目的

* **有害コンテンツの検出精度の向上:** 画像とテキストを組み合わせることで、画像単体では判断が難しい有害コンテンツ（ヘイトスピーチ、暴力的なコンテンツ、露骨な性的コンテンツなど）の検出精度を向上させます。
* **コンテキストの理解:** 画像に関連するテキストを分析することで、画像の内容をより深く理解し、誤検出を減らします。
* **包括的なコンテンツ安全性評価:** テキストと画像を組み合わせた総合的な分析により、より安全で信頼性の高いコンテンツ環境を構築します。


## 前提条件

Azure AI Content Safetyを利用するためには、以下の前提条件を満たす必要があります。

1. **Azureサブスクリプション:** Azureアカウントが必要です。お持ちでない場合は、無料アカウントを作成してください。
2. **Content Safetyリソース:** Azure portalでContent Safetyリソースを作成し、キーとエンドポイントを取得します。
    * Azure portalにサインインします。
    * 「Content Safety」を検索し、Content Safetyリソースを作成します。
    * リソースの一意の名前、サブスクリプション、リソースグループ、サポートされているリージョン、価格レベルを選択します。
    * **［作成］** を選択します。
    * リソースのデプロイが完了したら、**［リソースに移動］** を選択します。
    * 左側のペインの **［リソース管理］** で、**［キーとエンドポイント］** を選択します。
    * エンドポイントとキーは、APIを呼び出すために使用します。
3. **cURL:** コマンドラインからAPIを呼び出すために、cURLがインストールされている必要があります。
4. **画像ファイル:** 分析する画像ファイル（JPEG、PNG、GIFなど）。
5. **Base64エンコード:** 画像ファイルをBase64形式にエンコードする必要があります。オンラインツールやコマンドラインツールを使用してエンコードできます。

## 画像とテキストの分析方法

ここでは、cURLを使用してマルチモーダルコンテンツ分析を行う方法を説明します。

1. **cURLコマンドの作成:** 次のcURLコマンドをテキストエディターにコピーし、必要な情報を入力します。
```bash
curl --location --request POST '<endpoint>/contentsafety/multimodal/image:analyze?api-version=2024-09-15-preview' \
--header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "image": {
        "content": "<base64_encoded_image>"
    },
    "text": "<分析するテキスト>"
}'
```

* `<endpoint>`を、Content SafetyリソースのエンドポイントURLに置き換えます。
* `<your_subscription_key>`を、Content Safetyリソースのキーに置き換えます。
* `<base64_encoded_image>`を、Base64エンコードされた画像データに置き換えます。
* `"text"`フィールドを、画像に関連するテキストに置き換えます。

**例:**

```bash
curl --location --request POST 'https://your-resource-name.cognitiveservices.azure.com/contentsafety/multimodal/image:analyze?api-version=2024-09-15-preview' \
--header 'Ocp-Apim-Subscription-Key: YOUR_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "image": {
        "content": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w+r8DAAAAo8DAALVwOW5AAAAAAAAAA=="
    },
    "text": "猫の画像"
}'
```

2. **cURLコマンドの実行:** コマンドプロンプトまたはターミナルを開き、作成したcURLコマンドを実行します。

### その他の入力方法

画像データは、Base64エンコードされた文字列として直接指定するだけでなく、Azure Blob Storageに保存された画像のURLを指定することも可能です。

```json
{
    "image": {
        "blobUrl": "<Azure Blob StorageのURL>"
    },
    "text": "<分析するテキスト>"
}
```

Blob Storageを使用する場合は、Content SafetyリソースがBlob Storageにアクセスできる権限を持っている必要があります。

## API応答の解釈

APIリクエストが成功した場合、コンテンツ分析の結果がJSON形式で返されます。

**例:**

```json
{
  "textAnalysis": {
    "categoryResults": [
      {
        "category": "Hate",
        "severityScore": 0.0163835287,
        "detected": false
      },
      {
        "category": "SelfHarm",
        "severityScore": 0.00018183557,
        "detected": false
      },
      {
        "category": "Sexual",
        "severityScore": 0.000376460466,
        "detected": false
      },
      {
        "category": "Violence",
        "severityScore": 0.004802014,
        "detected": false
      }
    ]
  },
  "imageAnalysis": {
    "categoryResults": [
      {
        "category": "Hate",
        "severityScore": 0.00136838066,
        "detected": false
      },
      {
        "category": "SelfHarm",
        "severityScore": 0.0000317282465,
        "detected": false
      },
      {
        "category": "Sexual",
        "severityScore": 0.792499542,
        "detected": true
      },
      {
        "category": "Violence",
        "severityScore": 0.0000397432663,
        "detected": false
      }
    ]
  }
}
```

**JSONフィールドの説明:**

* `textAnalysis`: テキスト分析の結果。
    * `categoryResults`: 各カテゴリ（Hate, SelfHarm, Sexual, Violence）の分析結果。
        * `category`: カテゴリ名。
        * `severityScore`: 危険度スコア（0から1の範囲）。
        * `detected`: カテゴリに該当するコンテンツが検出されたかどうかを示すブール値。
* `imageAnalysis`: 画像分析の結果。
    * `categoryResults`: 各カテゴリ（Hate, SelfHarm, Sexual, Violence）の分析結果。
        * `category`: カテゴリ名。
        * `severityScore`: 危険度スコア（0から1の範囲）。
        * `detected`: カテゴリに該当するコンテンツが検出されたかどうかを示すブール値。


## 注意事項

* マルチモーダル分析は、テキストと画像の関連性を考慮して分析を行うため、より高度なコンテンツ安全性評価が可能です。
* 画像の内容によっては、誤検出が発生する可能性があります。分析結果を鵜呑みにせず、必要に応じて人間の目による確認を行うことが重要です。


## まとめ

Azure AI Content Safetyのマルチモーダル分析機能は、テキストと画像を組み合わせた高度なコンテンツ安全性評価を実現します。この機能を活用することで、有害コンテンツの検出精度を向上させ、より安全で信頼性の高いコンテンツ環境を構築できます。