Авторы Джеффри Соренсен и Энн Юань

Зачем обнаруживать токсичность?

Платформы онлайн-коммуникации все чаще переполняются грубыми или оскорбительными комментариями, которые могут заставить людей вообще отказаться от обсуждения. В ответ на эту проблему команда Jigsaw и технологическая группа Google Counter Abuse объединились с сайтами, которые поделились своими комментариями и решениями модерации, чтобы создать Perspective API. Perspective помогает онлайн-сообществам проводить более эффективные обсуждения, например, позволяя модераторам быстрее определять, какие комментарии могут нарушать принципы их сообщества.

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

Пример классификатора токсичности

В рамках нашего стремления привнести языковые модели в TensorFlow.js мы выпускаем Классификатор токсичности в качестве примера использования предварительно обученной модели с открытым исходным кодом, которая определяет, содержит ли текст токсичный контент, такой как оскорбления, угрозы и т. Д. откровенно сексуальные выражения и многое другое.

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

Этот выпуск является результатом сотрудничества команды Perspective API в Jigsaw и команды TensorFlow.js в Google Brain. Модель имеет размер ~ 25 МБ и обеспечивает время вывода ~ 30 мс на предложение на MacBook Pro 2018 года.

Обратите внимание, что эти модели являются экспериментальными, а версии tensorflow.js имеют более низкую точность и большее непреднамеренное смещение ML, чем версии, размещенные на Perspective API (вы можете увидеть нашу карточку модели для модели токсичности tensorflow.js и найти дополнительную информацию об известных проблемах с этим набором данных в учебнике по непреднамеренному смещению машинного обучения).

Начало работы с классификатором токсичности

  1. Установка

Вы можете начать использовать классификатор токсичности в своих проектах уже сегодня. Первый шаг - установка модели. Модель доступна через NPM:

Классификатор токсичности требует TensorFlow.js версии 1.0 в качестве одноранговой зависимости, что означает, что вам необходимо установить его независимо. Если он еще не установлен, вы можете запустить:

Теперь вы можете импортировать такую ​​модель токсичности:

Вы также можете включить связанную модель с помощью тега скрипта на своей веб-странице:

Это покажет toxicity как глобальную переменную.

Вот и все - вы установили модель!

  1. Использование

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

Параметр threshold - это минимальный уровень достоверности, выше которого прогноз считается действительным (по умолчанию 0,85). Установка для threshold более высокого значения означает, что прогнозы с большей вероятностью вернут null, потому что они не достигают порогового значения.

Параметр labelsToInclude - это массив строк, который указывает, для какой из семи меток токсичности вы хотите сделать прогноз. Этикетки: toxicity | severe_toxicity | identity_attack | insult | threat | sexual_explicit | obscene. По умолчанию модель возвращает прогнозы для всех семи меток.

В приведенном выше фрагменте мы использовали model.classify() API для прогнозирования токсичности «отстой». model.classify() возвращает обещание, поэтому нам нужно впоследствии вызвать .then(), чтобы получить фактические прогнозы.

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

  • true если вероятность совпадения превышает порог достоверности,
  • false если вероятность * не * совпадения превышает порог достоверности, и
  • null, если ни одна из вероятностей не превышает порогового значения.

Вот как может выглядеть массив прогнозов для нашего образца текста:

Как видите, каждый results массив содержит только один элемент - это потому, что наш входной пример представляет собой массив только из одного предложения: [«ты отстой»]. Однако мы также можем группировать входные данные в model.classify(), чтобы сократить время вывода для каждого предложения. На практике мы обнаружили, что размер пакета из четырех человек работает хорошо, хотя оптимальное количество будет зависеть от длины каждого отдельного предложения.

Зачем это нужно делать в браузере?

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

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

Сведения о модели

Классификатор токсичности TensorFlow.js построен на основе универсального кодировщика предложений lite (Cer et al., 2018) (USE), который представляет собой модель, которая кодирует текст в 512-мерное встраивание (или, другими словами, список из 512 чисел с плавающей запятой). Эти вложения можно использовать в качестве отправных точек для задач языковой обработки, таких как классификация тональности и анализ текстового сходства. ЕГЭ использует архитектуру Transformer (Vaswani et al, 2017), которая представляет собой современный метод моделирования языка с использованием глубоких нейронных сетей. ЕГЭ можно найти в TensorFlow Hub, а также в виде отдельного модуля TensorFlow.js.

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

Код, используемый для построения классификатора, существует в другом проекте github, основанном на оценщиках Tensorflow, а именно в tf_hub_tfjs подкаталоге. Там вы также найдете информацию о характеристиках производительности этой модели по сравнению как с моделью, представленной в Perspective API, так и с моделями, созданными в рамках Kaggle Toxic Comments Challenge. Это простое расширение модели USE с парой дополнительных слоев перед заголовками вывода для каждого тега.

Если у вас установлен конвертер TensorFlow.js, обученную модель можно преобразовать для использования в браузере с помощью следующей команды (она вернет только заголовок токсичность):

Другие приложения

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