Что такое Azure Content Moderator и как его использовать?

Модератор содержимого Azure — это служба Azure, использующая машинное обучение для модерации различных форм содержимого, например текста, видео и изображений. Сервис предоставляет как API модерации, так и API обзора, об этом интересно узнать, поскольку этот сервис необходим для сдачи экзамена AI-100. В этом посте я расскажу, что вы можете делать в модераторе контента и как это реализовать с помощью библиотеки Python.

Модерация текста

Модерация текста используется для многих различных типов приложений, некоторые примеры включают чат-боты, дискуссионные форумы и проверку документов. API модерации текста Azure позволяет предоставлять текст и возвращает список потенциально опасных слов, тип вредоносных слов и наличие в тексте какой-либо информации, позволяющей установить личность.

Создание модератора контента в Azure

Сначала вам нужно открыть портал Azure (portal.azure.com), как только он загрузится, щелкните строку поиска вверху, введите «Модератор контента» и щелкните элемент Marketplace. Затем вам нужно будет выбрать подписку, группу ресурсов, регион, ценовую категорию (для тестирования выберите Free F0) и ввести имя (это имя должно быть уникальным). Затем нажмите «Просмотреть и создать», и если он пройдет проверку, нажмите «Создать», и модератор контента развернет его, что должно завершиться в течение от нескольких секунд до нескольких минут.

Теперь, когда он развернут, вы можете проверить следующую страницу, чтобы протестировать API. Вам нужно будет щелкнуть выбранный регион (в моем случае это Восточная Австралия), а затем прокрутить вниз до поля Ocp-Apim-Subscription-Key и вставить свой ключ из службы модератора содержимого Azure (доступно на вкладке Ключи и конечные точки). Нажатие Отправить сейчас должно дать вам ответ, как показано ниже, который состоит из трех основных разделов: PII (личная информация), классификация и условия, мы рассмотрим каждый раздел более подробно ниже.

Пример ответа API

Pragma: no-cache
apim-request-id: 53ee7e6e-fc5a-4c78-9170-26507c5a6***
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
CSP-Billing-Usage: CognitiveServices.ContentModerator.Transaction=1
Cache-Control: no-cache
Date: Fri, 16 Oct 2020 00:53:21 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 1085
Content-Type: application/json; charset=utf-8
Expires: -1

{
  "OriginalText": "Is this a cr*p a** email [email protected], phone: 6657789887, IP: 255.255.255.255, 1 Microsoft Way, Redmond, WA 98052",
  "NormalizedText": "   cr*p a** email [email protected], phone: 6657789887, IP: 255.255.255.255, 1 Microsoft Way, Redmond, WA 98052",
  "Misrepresentation": null,
  "PII": {
    "Email": [{
      "Detected": "[email protected]",
      "SubType": "Regular",
      "Text": "[email protected]",
      "Index": 25
    }],
    "IPA": [{
      "SubType": "IPV4",
      "Text": "255.255.255.255",
      "Index": 65
    }],
    "Phone": [{
      "CountryCode": "US",
      "Text": "6657789887",
      "Index": 49
    }],
    "Address": [{
      "Text": "1 Microsoft Way, Redmond, WA 98052",
      "Index": 82
    }],
    "SSN": []
  },
  "Classification": {
    "ReviewRecommended": true,
    "Category1": {
      "Score": 0.0011853053001686931
    },
    "Category2": {
      "Score": 0.49122610688209534
    },
    "Category3": {
      "Score": 0.98799997568130493
    }
  },
  "Language": "eng",
  "Terms": [{
    "Index": 3,
    "OriginalIndex": 10,
    "ListId": 0,
    "Term": "cr*p"
  }, {
    "Index": 8,
    "OriginalIndex": 15,
    "ListId": 0,
    "Term": "a**"
  }],
  "Status": {
    "Code": 3000,
    "Description": "OK",
    "Exception": null
  },
  "TrackingId": "AUE_ibiza_677e548d-ccf1-475f-b0ed-3a1fa1fd2137_ContentModerator.F0_78430acc-0452-45c9-bf7f-1e45b5651***"
}

Личная информация

"PII": {
    "Email": [{
      "Detected": "[email protected]",
      "SubType": "Regular",
      "Text": "[email protected]",
      "Index": 25
    }],
    "IPA": [{
      "SubType": "IPV4",
      "Text": "255.255.255.255",
      "Index": 65
    }],
    "Phone": [{
      "CountryCode": "US",
      "Text": "6657789887",
      "Index": 49
    }],
    "Address": [{
      "Text": "1 Microsoft Way, Redmond, WA 98052",
      "Index": 82
    }],
    "SSN": []
}

API модерации контента может обнаруживать наличие личной информации в тексте, отправляемом в API, некоторые из полей, которые он может обнаруживать, — это адреса электронной почты, почтовые адреса, IP-адреса, номера телефонов и номера социального страхования. Когда одно из этих полей обнаружено, служба модерации контента возвращает новый объект PII в ответе JSON, как показано ниже. Объект содержит тип поля и расположение поля для цензуры или удаления в тексте.

Классификация

"Classification": {
    "ReviewRecommended": true,
    "Category1": {
      "Score": 0.0011853053001686931
    },
    "Category2": {
      "Score": 0.49122610688209534
    },
    "Category3": {
      "Score": 0.98799997568130493
    }
}

В ответе JSON, возвращаемом API модерации контента, есть классификационное поле, которое рекомендует, следует ли проверять текст, а затем оценивает его по каждой из следующих категорий.

  • Категория 1. Возможное использование выражений, которые в определенных ситуациях могут быть сочтены откровенно сексуальными или взрослыми.
  • Категория 2: возможное присутствие выражений, которые в определенных ситуациях могут быть сочтены сексуальными или зрелыми.
  • Категория 3: потенциальное присутствие выражений, которые могут быть сочтены оскорбительными в определенных ситуациях.

Условия

"Terms": [{
    "Index": 3,
    "OriginalIndex": 10,
    "ListId": 0,
    "Term": "cr*p"
  }, {
    "Index": 8,
    "OriginalIndex": 15,
    "ListId": 0,
    "Term": "a**"
  }]

При передаче текста в API модерации контента любое слово, которое потенциально может содержать ненормативную лексику, возвращается как объект Term в ответе JSON. Объект термина содержит значение индекса для поиска текста, обнаруженного термина и идентификатора используемого списка. Это значение не будет равно нулю, если вы используете собственный список слов.

Модерация изображений

Модерация изображений в Azure Content Moderator работает аналогично модерации текста, но вместо этого она используется для анализа изображений на наличие контента для взрослых и непристойного контента, обнаружения текста с помощью оптического распознавания символов и обнаружения лиц. В этом посте я расскажу только об обнаружении контента для взрослых и непристойного контента в изображениях, но вы можете поиграть с другими способами использования в консоли API модерации изображений.

Использование консоли API модерации изображений

Самый простой способ протестировать функции модерации изображений Content Moderator — использовать Консоль API, вы можете получить доступ к консоли, используя следующую ссылку. В консоли вам нужно будет выбрать свой регион, а затем ввести ключ подписки с портала Azure в поле Ocp-Apim-Subscription-Key. Как только это будет сделано, вы можете изменить тело запроса со значения по умолчанию на изображение по вашему выбору, а затем нажать Отправить, и вы должны получить ответ JSON, подобный приведенному ниже.

Пример ответа API

Pragma: no-cache
apim-request-id: 576338ac-132e-4e22-89f8-df8056ce05af
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
CSP-Billing-Usage: CognitiveServices.ContentModerator.Transaction=1
Cache-Control: no-cache
Date: Fri, 16 Oct 2020 04:58:20 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 458
Content-Type: application/json; charset=utf-8
Expires: -1
{
  "AdultClassificationScore": 0.021854337304830551,
  "IsImageAdultClassified": false,
  "RacyClassificationScore": 0.045791342854499817,
  "IsImageRacyClassified": false,
  "Result": false,
  "AdvancedInfo": [{
    "Key": "ImageDownloadTimeInMs",
    "Value": "1586"
  }, {
    "Key": "ImageSizeInBytes",
    "Value": "273405"
  }],
  "Status": {
    "Code": 3000,
    "Description": "OK",
    "Exception": null
  },
  "TrackingId": "AUE_ibiza_677e548d-ccf1-475f-b0ed-3a1fa1fd2137_ContentModerator.F0_2fbb5e6f-c7ab-4143-a16e-cb18c7511621"
}

Глядя на ответ примера API, мы видим, что основными полями являются следующие.

  • AdultClassificationScore: это значение находится в диапазоне от 0 до 1 и показывает, может ли на изображении потенциально присутствовать какой-либо контент, который в определенных сценариях может считаться взрослым или откровенным.
  • IsImageAdultClassified — использует внутренние пороговые значения для AdultClassificationScore для преобразования результата в логическое значение.
  • RacyClassificationScore — это значение находится в диапазоне от 0 до 1 и показывает, содержится ли в изображении какой-либо расистский контент.
  • IsImageRacyClassified — использует внутренние пороговые значения RacyClassificationScore для преобразования результата в логическое значение.

API модерации изображений также может обнаруживать текст с помощью оптического распознавания символов, обнаружения лиц и создания настраиваемого списка. Возможно, я расскажу об этих функциях в следующем посте.

Использование API в приложении Python

import os.path
from pprint import pprint
import time
from io import BytesIO
from random import random
import uuid

%pip install azure-cognitiveservices-vision-contentmoderator

from azure.cognitiveservices.vision.contentmoderator import ContentModeratorClient
import azure.cognitiveservices.vision.contentmoderator.models
from msrest.authentication import CognitiveServicesCredentials

CONTENT_MODERATOR_ENDPOINT = "CONTENT_MODERATOR_ENDPOINT"
CONTENT_MODERATOR_SUBSCRIPTION_KEY = "CONTENT_MODERATOR_SUBSCRIPTION_KEY"

client = ContentModeratorClient(
    endpoint=CONTENT_MODERATOR_ENDPOINT,
    credentials=CognitiveServicesCredentials(CONTENT_MODERATOR_SUBSCRIPTION_KEY)
)

with open(os.path.join('./text_files/', 'azure_cm_text.txt'), "rb") as text_fd:
    screen = client.text_moderation.screen_text(
        text_content_type="text/plain",
        text_content=text_fd,
        language="eng",
        autocorrect=True,
        pii=True
    )
    pprint(screen.as_dict())

Если вы хотите продолжить, ознакомьтесь с созданной мной рабочей книгой Google Colab, которая проведет вас через код Python, необходимый для использования Content Moderator API.

Приведенный ниже фрагмент кода использует Python API Content Moderator для анализа текстового файла с помощью Content Moderator API, после чего он выводит ответ на консоль. При использовании фрагмента вам потребуется создать текстовый файл с именем azure_cm_text.txt в папке ./text_files/, а затем заменить переменные CONTENT_MODERATOR_ENDPOINT и CONTENT_MODERATOR_SUBSCRIPTION_KEY соответствующими значениями из модератора содержимого Azure (доступно на вкладке "Ключи и конечные точки").

Для получения более подробной информации об API Python, а также API C# и Java посетите эту страницу документации Microsoft

В целом, этот пост показал, что API службы модерации контента Azure является чрезвычайно мощным и является отличным решением для модерации контента. Основные концепции, которые мы рассмотрели в этом посте, — это модерация текста и модерация изображений. В следующем посте я пройду Модерацию видео и создам проект с API модерации видео.

Если вам понравился этот пост или вы сочли его полезным, не стесняйтесь оставлять комментарии ниже или реагировать на пост.

Первоначально опубликовано на https://joshmangiola.com.