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

Набор данных, который мы собираемся использовать, доступен на kaggle. Он содержит 160 000 твитов, помеченных как положительные, отрицательные и нейтральные.

Бизнес-проблема:

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

Формулировка бизнес-задачи ML/AI:

Мы можем поставить эту проблему как проблему классификации для классов «Положительный», «Отрицательный» и «Нейтральный». Аналитика текста и данных также будет важной частью этого тематического исследования. Первым шагом, конечно же, будет предварительная обработка данных, а затем векторизация текстовых данных. Для векторизации мы можем использовать различные доступные методы, такие как TFIDF, Word2Vec, BOW и т. д., или мы можем использовать некоторые модели, подобные BERT, в глубоком обучении.

Бизнес-ограничения:

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

Показатель эффективности:

Здесь мы будем использовать показатель F1 в качестве показателя производительности и рассмотрим матрицу путаницы, точность и полноту для отдельных классов. Мы также можем использовать точность, если сбалансируем дисбаланс классов.

Исследовательский анализ данных:

Итак, как мы видим, он имеет два столбца. Cleant_text содержит частично очищенные текстовые данные твитов, а категория содержит метки классов, где -1 = отрицательный, 0 = нейтральный и 1 = положительный. Теперь проверим распределение классов.

В наборе данных определенно присутствует дисбаланс классов, положительные отзывы максимальны, а отрицательные - наименьшие.

Это точные цифры каждого класса. Проверка отсутствующих значений в наборе данных.

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

Теперь мы добавим одну функцию, длину каждого твита.

Итак, это гистограмма длины нашего набора данных, поскольку мы видим, что длина варьируется от 0 до 50, чаще всего 10 или 12, теперь давайте проверим, имеет ли это какое-либо отношение к метке класса.

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

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

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

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

Векторизация текстовых данных:-

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

  1. Мешок слов
  2. Векторизатор TF-IDF
  3. Слово 2 Век
  4. TF-IDF Взвешенное слово 2 vec
  5. Слой встраивания слов с CNN и LSTM
  6. БЕРТ
  7. Роберта + CNN + LSTM

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

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

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

Нам нужно токенизировать данные, прежде чем передавать их в модель, вот как это сделать.

Здесь 52 — это максимальная длина, которую может иметь ввод, поскольку максимальная длина наших предложений была 50, мы выбрали это число, мы добавляем 2 дополнительных токена к каждому вводу: «CLS» и «SEP». модель использует специальные токены [CLS] и [SEP] для правильного понимания ввода. Маркер [SEP] должен быть вставлен в конце одного входа. Токенизатор, который мы используем, можно загрузить, как показано ниже.

Теперь давайте посмотрим на архитектуру модели.

Вот как выглядит модель: 3 токенизированных входа для слоя RoBERTa и 4-й вход — это не что иное, как длины предложений. Это настроенные параметры. Преимущества использования LSTM и CNN заключаются в том, что LSTM хорошо работает с последовательной информацией и может извлекать соответствующие функции из данных, а CNN хорошо справляется с пространственно связанными данными и может собирать и изучать локальную информацию в достаточной степени, чтобы получить преимущество обоих слоев, которые мы можем использовать. оба в разной последовательности, или мы можем поэкспериментировать с этим.

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

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

Вот как разделить данные. P имеет все предсказанные значения.

давайте посмотрим на распределение количества слов как правильно, так и неправильно предсказанных точек данных.

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

Давайте посмотрим на слово облака.

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

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

Теперь мы можем продолжить и развернуть эту модель без каких-либо других исправлений. Я использовал экземпляр EC2 от Amezon для развертывания своего веб-приложения, созданного с помощью Streamlit. Код для развертывания модели можно найти на моем github, ссылку на который я приведу ниже. Вот как это выглядит после развертывания.

Будущая работа:

  1. Мы можем попытаться определить слово или фразы, которые являются отличными индикаторами метки класса. This Notebook пытается добиться чего-то подобного.
  2. Одним из важных вариантов использования анализа настроений может быть обнаружение психических проблем на ранней стадии. Такие проблемы, как депрессия и другие психические состояния, можно легко обнаружить по сообщениям пользователей на таких платформах, как Twitter, Facebook или Reddit.

Ссылка на репозиторий Gtihub.



Вы можете связаться со мной на Linkedin



Ссылки: