ВВЕДЕНИЕ

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

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

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

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

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

ИНСТРУМЕНТЫ И ТЕХНОЛОГИИ

Ниже приведены различные инструменты и технологии, используемые для разработки решения:

  • Бэкенд-разработка: Python для создания всего серверного приложения.
  • Микросервисы: используются для разделения функциональности приложения на более мелкие модульные компоненты, что повышает масштабируемость и удобство обслуживания.
  • Внешняя разработка: HTML и CSS для внешнего интерфейса
  • Модели НЛП: Distil-Roberta для обнаружения ненормативной лексики и GPT-3 для создания рекомендаций.
  • Глубокое обучение: среда Pytorch для построения модели глубокого обучения НЛП.
  • Веб-фреймворк и API: Flask для создания веб-приложения и API.
  • API данных: Twitter API для получения данных в режиме реального времени.
  • Контейнеризация: Docker для упаковки приложения и зависимостей.
  • Оркестровка контейнеров: Kubernetes для развертывания контейнеров и управления ими.
  • Облачный хостинг: Digital Ocean для размещения приложения в облаке.
  • CI/CD: действия Github для непрерывной интеграции и непрерывной доставки
  • База данных: MYSQL в качестве базы данных
  • Контроль версий: Git для контроля версий кода и DVC для контроля версий данных и моделей.
  • Тестирование: Pytest для модульного и интеграционного тестирования.
  • Мониторинг: Prometheus для мониторинга показателей и Grafana для их визуализации.

ОБЗОР РЕШЕНИЯ

Модель была построена с использованием современного алгоритма обработки естественного языка, DistilRoberta, для обнаружения и классификации ненормативной лексики. Приложение также использует GPT-3 OpenAI для создания рекомендаций для пользователей по улучшению их твитов при обнаружении ненормативной лексики.

Приложение было создано с использованием Flask, упрощенной веб-инфраструктуры Python, и помещено в контейнер с помощью Docker, чтобы его можно было легко развернуть в любой инфраструктуре. Приложение размещено на DigitalOcean Kubernetes, масштабируемой и эффективной облачной платформе, способной обрабатывать большой объем трафика. Приложение также отслеживается с помощью Prometheus и Grafana для обеспечения оптимальной производительности, а все данные хранятся и управляются в базе данных MYSQL, также размещенной на облачной платформе цифрового океана.

KidFriendlySocial включает в себя несколько лучших практик MLOps, включая контроль версий моделей и данных, непрерывную интеграцию и непрерывное развертывание (CI/CD), а также автоматическое тестирование.

ДАННЫЕ

Набор данных

Данные для этого проекта были получены из двух разных источников: во-первых, из наборов данных, доступных в Интернете, и из данных, извлеченных из Twitter API. Данные, доступные в Интернете, были очищены и помещены в пригодный для использования формат, и они уже были помечены, в то время как я использовал Doccana, платформу для разметки данных с открытым исходным кодом, чтобы пометить все данные, извлеченные из API Твиттера. Данные из Twitter API очень важны для получения последних данных из Twitter для обучения модели.

Пример того, как я использовал Doccana для маркировки набора данных, выбрав твит на хорошем языке или плохой_язык_твит, и он был помечен, показан ниже:

База данных

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

АНАЛИТИКА

Во-первых, хотелось увидеть самые распространенные уникальные слова (юниграммы), которые появлялись в твитах, содержащих ненормативную лексику:

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

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

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

ПОСТРОЕНИЕ МОДЕЛИ И ОЦЕНКА

Прогнозирующая модель

Модель Distil Roberta, которая была предварительно обучена на огромном массиве твитов (название модели: vinai/bertweet-base), использовалась в качестве базовой модели для обучения, поскольку модель уже понимает, как строятся твиты, поэтому ее можно легко обобщить на наши твиты, а также, поскольку это модель distil roberta, это модель меньшего размера, которая по-прежнему имеет превосходную точность, и, что наиболее важно, она меньше по размеру, поэтому она быстрее обучается и скорость вывода (скорость задержки) ниже. Были использованы 4 метрики (точность, полнота, точность и f1), но наиболее важной метрикой здесь является отзыв, так как ключевой задачей является выявление как можно большего количества потенциально нецензурных твитов для защиты детей. Здесь основное внимание уделяется минимизации ложноотрицательных результатов (ситуации, когда твит содержит ненормативную лексику, но модель предсказывает, что в нем содержится хорошая лексика). Можно разрешить помечать какой-то хороший язык как отрицательный, но нехорошо позволять плохому языку добираться туда, поэтому сокращение этой ситуации (более высокий отзыв) является наиболее важным здесь. Однако точность также важна для того, чтобы рекомендации, предоставляемые приложением, были точными и заслуживающими доверия. Ниже приведены полученные показатели:

точность: 0,949936717761215

точность: 0,9477199286616215

отзыв: 0,9464880338247377

f1: 0.9470952154920613

Производительность кажется хорошей, а отзыв составляет почти 95%, что говорит о том, что модель хорошо перехватывает твиты с ненормативной лексикой. Для визуализации всех этих метрик использовалась матрица путаницы, результат здесь ниже:

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

Генеративная модель

GPT3 использовался для создания рекомендаций при обнаружении ненормативной лексики, температура (насколько случайным должно быть создание) была установлена ​​на 0,8, чтобы учесть вариации в генерируемых модификациях, но не слишком много, чтобы искажать контекст, максимальная длина до 256, чтобы пользователи могли больше выражать свои мысли, текст davicni 003, который был самым продвинутым использовалась модель во время построения, и была написана превосходная подсказка для создания рекомендаций.

Тест GPT3 был доработан с использованием 150 твитов с парами "плохой язык-хороший язык", чтобы модель могла немного лучше понимать контекст и генерировать соответствующие рекомендации. .

CI/CD

Действия GitHub использовались в качестве инструмента CI/CD для автоматизации процесса создания, тестирования и развертывания веб-приложения.

Это гарантирует, что все части проекта работают, надежны и не сломаются в процессе производства. Любое изменение, внесенное в код или любой аспект проекта, потребует повторной сборки, прохождения всех тестов и развертывания модифицированной версии приложения, что обеспечивает надежность и масштабируемость приложения. Для конвейера, сделанного в этом случае, во-первых, устанавливаются все зависимости, поэтому, если выпускается какая-либо новая версия, она обновляется здесь, затем запускается flake8, который обеспечивает согласованность, читаемость и поддержку кода. . Учетные данные AWS настраиваются, поскольку прогностическая модель хранится в базе S3 через DVC, затем модель извлекается из корзины s3, а затем все тесты (что обсуждается в следующих разделах). Это текущая реализация конвейера Ci/CD.

ТЕСТИРОВАНИЕ

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

Написанные тесты состояли из трех частей: аспект аутентификации, аспект данных и аспект модели. Тесты проверки подлинности гарантируют, что все аспекты проверки подлинности пользователя, такие как регистрация и вход в систему, работают правильно и без каких-либо проблем. Аспекты данных проверяют правильность и достоверность данных, чтобы гарантировать использование и доступ к правильному формату данных. Тестирование модели проверяет производительность модели, чтобы убедиться, что она выдает правильные прогнозы и прогнозы качества, а также правильность интеграции прогнозной модели с генеративной моделью и ее работу. Различные тесты в этих категориях были написаны и добавлены в конвейер CI/CD, что гарантирует прохождение всех тестов до того, как какие-либо обновления или изменения будут отправлены в рабочую среду.

МОДЕЛЬ В ПРОИЗВОДСТВЕ

Развертывание

Flask использовался для обслуживания модели в качестве веб-службы, Docker использовался для упаковки приложения Flask вместе с его зависимостями, а Kubernetes использовался для управления развертыванием и масштабированием контейнеров Docker и размещался в цифровом океане.

Аутентификации(регистрация, вход в систему) были написаны с использованием Flask, а аутентификация JWT использовалась для аутентификации пользователей для использования приложения, а все пароли были хэшированы с использованием bcrypt. для защиты конфиденциальности пользователей. Приложение было доступно только для 11 различных пользователей в течение недели, чтобы взаимодействовать с приложением, получать отзывы о том, как улучшить приложение, а также использовать их отзывы для оценки производительности модели и улучшения модели.

Демонстрация веб-приложения

Ниже представлена ​​демонстрация того, как работает приложение. PS: мне пришлось отключить приложение, так как размещение приложения в цифровом океане стоит денег (контейнеры докеров, кластеры Kubernetes и база данных MySQL). Демонстрация модели, предсказывающей хороший язык (демонстрация занимает около 10 секунд):

Демонстрация модели, предсказывающей ненормативную лексику (также занимает около 10 секунд):

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

На изображении выше показаны рекомендации, созданные при обнаружении ненормативной лексики, поэтому в демо фактический твит был:

  • «Отвали, с*ка, иди к черту отсюда»,

и сгенерированные рекомендации были:

  • «Уходи, ужасный человек, убирайся отсюда»
  • — Уходи, гад, катись!
  • «Бей, противная особа, уходи сейчас же!»

Как видно, рекомендации содержат тот же смысл и контекст, что и исходный твит, но они более удобны для детей и не содержат ненормативной лексики, чего мы и добиваемся.

Мониторинг

Производительность модели и системы контролировалась с помощью Prometheus и Grafana и инструмента внутреннего мониторинга цифрового океана. Системные показатели, такие как время отклика сервера, показатели ЦП и памяти, отслеживались с помощью инструмента внутреннего мониторинга цифрового океана, а показатели модели отслеживались с помощью Prometheus и Grafana.

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

  • Общее количество полученных отзывов: это может дать представление об общем взаимодействии с приложением.
  • Количество отзывов, отнесенных к категории ненормативной лексики. Это помогает отслеживать частоту ненормативной лексики.
  • Количество правильных предсказаний нецензурной лексики. Это показывает, насколько эффективна модель для выявления ненормативной лексики.
  • Процент правильных прогнозов нецензурной лексики. Это дает более точное представление об эффективности модели с учетом общего количества прогнозов ненормативной лексики.
  • Количество отзывов, классифицированных как хороший/нормальный язык: это помогает понять общую способность модели определять хороший язык.
  • Количество правильных предсказаний хорошего/нормального языка: это может показать, насколько эффективна модель при определении подходящего языка.
  • Процент правильных предсказаний хорошего/нормального языка. Это дает более точное представление об эффективности модели с учетом общего количества правильных/нормальных предсказаний языка.

На изображении ниже показан мониторинг модели в производстве:

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

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

Переобучение модели

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

ВОЗМОЖНАЯ БУДУЩАЯ РАБОТА

Это был всего лишь личный проект, но есть несколько способов дальнейшего развития, чтобы сделать его доступным для публичного выпуска, чтобы извлечь выгоду, в том числе:

  • Добавление KidFriendlySocial в качестве расширения для браузера
  • Интеграция непосредственно в Twitter
  • Включение многоязычной поддержки

ЗАКЛЮЧЕНИЕ

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

В этом блоге основное внимание уделяется объяснению различных процессов, необходимых для разработки ваших собственных моделей (в данном случае больших языковых моделей) и предоставления их пользователям в виде приложения с использованием лучших практик MLOPS. В нем объясняется актуальность каждого компонента и то, как они интегрируются друг с другом, чтобы получить работающее приложение, которое является надежным, ремонтопригодным и масштабируемым. Вы можете использовать и развивать эти концепции в своих проектах и ​​приложениях, так как для нас, инженеров, важно следовать этим практикам для разработки надежных приложений.

Весь код, используемый в этом проекте, можно найти здесь → https://github.com/JoAmps/KidFriendlySocial