Microsoft предоставляет множество сервисов искусственного интеллекта через Azure, которые вы можете легко внедрить где угодно, и в этом посте я расскажу только об одном из них: сервисе Content Moderator.

На самом деле служба Content Moderator довольно большая, поэтому, может быть, будет точнее объяснить только одну из многих конечных точек одной из многочисленных Cognitive Services, предлагаемых Microsoft.

Что делает эта служба модерации контента, как можно предположить из ее названия, предоставляет вам информацию, которая поможет вам автоматизировать принятие решений по модерации. Например, вы можете захотеть скрыть изображения сексуального характера или содержащие какой-либо контент для взрослых. В примере, с которым мы будем работать, мы будем скрывать ненормативную лексику (ругательства) из «твита» (вы знаете, для нашего воображаемого приложения «Твиттер для детей»).

Создание сервиса

Перво-наперво вам, конечно же, понадобится подписка Azure, если у вас ее нет, то сначала зайдите на azure.com и получите ее, потому что я сразу приступлю к созданию сервиса.

Чтобы создать службу, просто выполните поиск «Модератор контента» при создании нового ресурса на портале Azure. Вы должны найти эту службу, выбрать ее и нажать «Создать».

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

Как и в большинстве Cognitive Services, существует бесплатный и стандартный уровни. В основном они отличаются тем, что стандартный уровень позволяет совершать больше звонков в минуту и ​​не имеет ограничений (пока вы платите).

Бесплатного уровня будет более чем достаточно для выполнения нескольких тестов, но имейте в виду связанные с ним ограничения (вы не сможете делать столько запросов в минуту, и как только вы достигнете предела, будут возвращены ошибки по сервису).

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

Обязательно держите эти ключи в секрете, и если вы когда-нибудь подумаете, что они были раскрыты (как я часто делаю на своих курсах Udemy), вы всегда можете восстановить их с этой же вкладки, просто имейте в виду, что если вы их восстановите, они выиграли больше не работает, поэтому вам придется обновить ключи, которые вы используете в своих приложениях, до новых.

Но хватит болтовни, давайте займемся кодированием.

Выполнение запроса

Я собираюсь использовать Python для выполнения запроса, но это просто запрос REST, вы можете выполнить его на любом языке, который вам нравится. Сначала мне понадобятся заголовки для запроса. В этом примере мы собираемся отправлять обычный текст, поэтому Content-Type будет установлен на него, но вы также можете отправлять HTML, XML и другие форматы:

import urllib.parse, http.client, json 
headers = { 'Ocp-Apim-subscription-Key':'YOUR_KEY', 'Content-Type':'text/plain' }

Обратите внимание, что я также импортировал несколько пакетов, чтобы иметь возможность сделать запрос и создать параметры. Именно параметры, которые я здесь кодирую в URL, позволят мне запрашивать некоторую дополнительную информацию, кроме информации по умолчанию (которая уже идентифицирует ненормативную лексику). Чтобы дать вам пример, я попрошу личную информацию, установив значение PII в true в следующих параметрах:

params = urllib.parse.urlencode({ 'PII':True })

Наконец, я создам тело запроса (обычный текст, как указано в заголовках) и создам пару переменных, которые уже будут содержать URL-адрес запроса и всю конечную точку:

body = 'Crap! I just bumped my toe in the corner of this stupid chair, that chair is stupid. That is a really stupid chair. I hate the stupid chair. That chair is a fucking pussy.'
service_url = '[YOUR_LOCATION].api.cognitive.microsoft.com'
endpoint = '/contentmoderator/moderate/v1.0/ProcessText/Screen?%s' % params

Обратите внимание, что для URL-адреса службы вы должны знать место, где вы создали свою службу. В моем случае, поскольку я создавал в Южно-Центральной части США, это будет «southcentralus». Вы можете дважды проверить это на портале Azure, выбрав службу и перейдя на вкладку Обзор. Там вы найдете не только само местоположение, но и конечную точку, которая будет выглядеть знакомой (но неполной) по сравнению с той, что у нас есть (потому что эта конечная точка не включает фактическую конечную точку экрана, которую мы используем в этом примере, а только одну для самой услуги).

После этого я просто выполню запрос POST с информацией, которую я определил:

try:
    conn = http.client.HTTPSConnection(service_url)     
    conn.request('POST', endpoint, body, headers) 
    response = conn.getresponse() 
    jsonData = response.read() 
    text_data = json.loads(jsonData) 
    print(json.dumps(text_data, indent=2)) 
    conn.close() 
except Exception as ex: 
    print(ex)

В этом запросе я просто печатаю ответ JSON, давайте посмотрим на него:

Пара вещей, на которые стоит обратить внимание:

  1. Поскольку я установил для параметра PII значение True, я получаю объект PII со многими массивами. Один раз для электронных писем, идентифицированных в теле, один для IPA, один для телефона и т. д. Теперь здесь ничего из этого не идентифицируется, но может быть важно, чтобы наше приложение Twitter для детей не отправляло личные сообщения наших пользователей. информацию, так что вы можете использовать этот объект, чтобы скрыть и эту информацию.
  2. Объект Термины (массив) содержит список всех тех ругательств, которые были найдены в отправленном нами теле. поскольку мы не хотим, чтобы чувствительность наших пользователей (они дети) была затронута, мы будем модерировать эти термины при публикации «твита».

Чтобы смягчить ругательства, я могу выполнить что-то вроде этого, что заменит из исходного текста идентифицированные ругательства для звездочек:

moderatedText = text_data['OriginalText']
for term in text_data['Terms']: 
    old_text = moderatedText[term['Index']:term['Index']+len(term['Term'])] 
    new_text = '*' * len(old_text) 
    moderatedText = moderatedText.replace(old_text, new_text) 
    print(moderatedText)

Легко, верно? Просто получите исходное текстовое значение (из JSON) через переменную text_data, выполните итерацию по всем терминам в значении условий (из JSON), получите старый текст, получив подстроку модерируемого текста (начиная с индекса, который термин имеет и заканчивается этим индексом плюс длина самого термина) и создание нового текста, состоящего из звездочек и такой же длины, как и старый текст.

Итак, теперь мой модерируемый текст выглядит так, и теперь его можно безопасно отправить в приложение «Твиттер для детей»!

«****! Я только что ударился ногой об угол этого дурацкого стула, этот дурацкий стул. Это действительно дурацкий стул. Я ненавижу этот дурацкий стул. Этот стул — ******* *****».

Хотите узнать, как использовать более удивительные Cognitive Services, у меня есть курс для вас:



Первоначально опубликовано на сайте lalorosas.com 6 августа 2018 г.