Введение

Классификация текста, также известная как анализ настроений, представляет собой мощную технику обработки естественного языка (NLP), использующую машинное обучение, с приложениями во многих областях, таких как исследования рынка, анализ социальных сетей и отзывы клиентов. В этой статье мы рассмотрим процесс настройки предварительно обученных моделей преобразователя для анализа настроений в твитах о вакцинах от Covid. Используя библиотеку Transformers от Hugging Face и Streamlit, мощную платформу веб-приложений Python, мы пройдем этапы подготовки данных, тонкой настройки модели, оценки и развертывания.

Важные и необходимые библиотеки

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

  1. Pandas и NumPy: Pandas и NumPy — это фундаментальные библиотеки для обработки и анализа данных в Python. Pandas предоставляет мощные структуры данных, такие как DataFrames, которые необходимы для обработки и изучения структурированных данных. NumPy, с другой стороны, предлагает поддержку числовых вычислений и операций с массивами, что делает его очень эффективным для математических задач.
  2. Наборы данных: библиотека наборов данных — отличный инструмент для управления и загрузки данных в стандартном формате. Это позволяет нам получать доступ к различным наборам данных из Hugging Face Hub, включая наши пользовательские наборы данных, и легко подготавливать данные для обучения и оценки.
  3. Train_test_split от Sklearn: Функция train_test_split из Scikit-learn помогает нам разделить наш набор данных на подмножества для обучения и оценки. Это позволяет нам создавать отдельные наборы данных для обучения моделей и оценки их производительности, обеспечивая надежную оценку.
  4. Коллекции: модуль коллекций предоставляет специализированные контейнерные типы данных, такие как defaultdict и Counter, которые полезны для подсчета вхождений и более эффективной обработки структур данных.
  5. Emoji: библиотека emoji позволяет нам работать с emoji в текстовых данных. В нашем анализе настроений смайлики могут передавать эмоции и добавлять контекст к твитам, поэтому эта библиотека помогает эффективно их обрабатывать.
  6. Matplotlib и Seaborn: Matplotlib и Seaborn — это библиотеки визуализации, используемые для создания различных графиков и графиков для изучения закономерностей, распределения и взаимосвязей данных. С помощью этих библиотек мы можем визуализировать распределения настроений, облака слов и другие полезные визуализации.
  7. WordCloud: WordCloud — это библиотека, специально разработанная для создания облаков слов, которые полезны для визуального представления наиболее часто встречающихся слов в твитах. Это помогает определить общие темы и настроения в текстовых данных.
  8. Регулярные выражения (ре). Регулярные выражения — это мощные инструменты для сопоставления с образцом и обработки текста. Мы можем использовать регулярное выражение в таких задачах, как очистка и предварительная обработка твитов, удаление URL-адресов, специальных символов и прочего шума.
  9. Преобразователи. Библиотека преобразователей является важным компонентом нашего приложения, поскольку она предоставляет предварительно обученные модели преобразователей, такие как BERT, DistilBERT и RoBERTa, которые являются современными моделями для задач НЛП. Он также предлагает инструменты для токенизации, тонкой настройки модели и логического вывода.
  10. Hugging Face Hub: библиотека Huggingface_hub позволяет нам взаимодействовать с Hugging Face Model Hub, который является хранилищем предварительно обученных моделей. Это позволяет нам легко сохранять, совместно использовать и загружать модели, упрощая развертывание моделей и совместную работу.
  11. TrainingArguments: TrainingArguments — это класс из библиотеки преобразователей, который определяет различные конфигурации обучения и гиперпараметры для обучения модели. Это позволяет нам указать количество эпох, размеры пакетов, стратегии оценки и многое другое.
  12. Trainer: Trainer — еще один класс из библиотеки трансформеров, упрощающий процесс обучения модели. Он заботится о циклах обучения, оценке и ведении журнала, упрощая обучение и оценку наших точно настроенных моделей анализа тональности.

Таким образом, упомянутые выше библиотеки являются важными строительными блоками нашего приложения для анализа настроений. Они позволяют нам манипулировать данными, настраивать модели, оценивать производительность, визуализировать идеи и взаимодействовать с Hugging Face Model Hub, в результате чего мы получаем удобное и эффективное приложение для анализа общественного мнения по поводу вакцин против Covid в твитах.

Набор данных и EDA

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

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

Приведенный выше код загружает обучающие данные из CSV-файла и отображает первые 5 строк DataFrame. Давайте кратко обсудим данные и их столбцы:

  1. tweet_id: уникальный идентификатор для каждого твита в наборе данных.
  2. safe_text: Фактическое текстовое содержимое твита, которое может содержать упоминания пользователей, хэштеги и другие текстовые элементы.
  3. метка: метка настроения, связанная с каждым твитом. Он представлен в виде числового значения: 0,0 для отрицательного настроения, 1,0 для нейтрального настроения и -1,0 для положительного настроения.
  4. согласие: числовое значение, представляющее согласие между комментаторами-людьми для помеченного настроения. Он варьируется от 0,0 до 1,0, где 1,0 указывает на полное согласие.

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

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

Приведенный ниже код создает облако слов (как показано на рисунке 4) из текстовых данных в столбце «safe_text» обучающего фрейма данных. Облако слов визуально представляет частоту слов в текстовых данных, при этом более часто встречающиеся слова кажутся более крупными и жирными в облаке. Давайте кратко обсудим визуализацию облака слов:

  1. Облако слов. Облако слов — это популярный метод визуализации данных, который отображает наиболее часто встречающиеся слова в заданном текстовом корпусе. В данном случае текстовый корпус — это столбец «safe_text» обучающего DataFrame, который содержит текстовое содержимое твитов.
  2. Частота слов: слова, которые чаще появляются в столбце «безопасный_текст», будут иметь большее присутствие в облаке слов, что сделает их более заметными. И наоборот, менее часто встречающиеся слова будут казаться меньше и могут быть менее заметными.
  3. Параметры WordCloud: объект WordCloud создается с определенными параметрами:
  • width=800, height=400: Размеры изображения облака слов.
  • max_font_size=200: Максимальный размер шрифта для наиболее часто встречающихся слов в облаке.
  • background_color="white": цвет фона облака слов, установленный на белый.
  1. Отображение: изображение облака слов отображается с помощью функции Matplotlib imshow. Параметр interpolation=’bilinear’ обеспечивает плавное отображение облака слов без пикселизации.
  2. plt.axis("off"): эта строка удаляет метки осей и делений с графика, обеспечивая чистую и сфокусированную визуализацию облака слов.

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

Визуализируйте частоту слов с помощью гистограммы

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

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

Проверьте наличие смайликов: сегодня смайлики являются фундаментальной частью твитов.

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

  • Наиболее часто используемый смайлик — 😂, насчитывающий 140. Этот смайлик обычно ассоциируется со смехом или весельем.
  • Вторым наиболее часто используемым смайликом является 💉 с числом 63. Этот смайлик представляет собой шприц и часто используется в контексте здравоохранения, вакцинации или медицинских тем.
  • Третий наиболее часто используемый смайлик — 😷, насчитывающий 58. Этот смайлик изображает лицо в медицинской маске и обычно используется для обозначения болезни, мер предосторожности для здоровья или защиты.

Распределение меток настроений

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

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

Визуализируйте распределение меток настроений на основе уровня согласия между комментаторами.

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

Частота ключевых слов по меткам тональности

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

Из сюжета мы можем резюмировать, что:

  • Слова «корь(-и)» используются чаще всего (более 4500 раз) в ярлыке нейтрального настроения, за которым следует 2-е место «вакцина(-ы)» и 3-е слово «здоровье».
  • Слова «вакцина(ы)» используются чаще всего (около 2000 раз) в ярлыке позитивного настроения, за которым следует 2-е место «корь(-и)» и 3-е слово «вакцинация».
  • Слова «вакцина(ы)» используются чаще всего (около 1000 раз) в ярлыке негативного настроения, за которым следует слово «корь(-и)» на втором месте и слово «прививка» на третьем месте.

Тонкая настройка модели

Для анализа настроений мы использовали три предварительно обученные модели преобразователя: BERT, DistilBERT и RoBERTa. Эти модели показали отличные результаты в различных задачах НЛП благодаря своим механизмам внимания и глубокому контекстуальному пониманию текста.

Чтобы настроить модели для анализа настроений, мы использовали библиотеку Transformers Hugging Face. Мы токенизировали текстовые данные с помощью токенизатора для конкретной модели, преобразовали метки настроений в числовые представления и подготовили данные для обучения. Мы использовали класс TrainingArguments для определения конфигураций обучения, включая количество эпох, стратегию оценки и стратегии сохранения.

Создание экземпляра токенизатора

  • Приведенная ниже строка кода инициализирует токенизатор для модели «tweet_sentiments_analysis_roberta» с использованием библиотеки трансформаторов. Токенизатор является важным компонентом для обработки текстовых данных и используется для преобразования входного текста в токены, которые можно передать в модель для анализа тональности.

Функции для разметки текста и преобразования меток

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

  1. tokenize_data (данные):
  • Эта функция принимает словарь данных в качестве входных данных, который содержит ключ «safe_text», представляющий необработанный текст, подлежащий токенизации.
  • Он использует объект токенизатора (ранее определенный в коде) для токенизации текстовых данных.
  • Параметр padding=’max_length’ указывает, что токенизированные последовательности должны быть дополнены до максимальной длины входных данных, чтобы обеспечить единообразие обработки модели.
  • Затем функция возвращает токенизированные данные.
  1. transfom_label (данные):
  • Эта функция принимает словарь данных в качестве входных данных, который содержит ключевую «метку», представляющую метку тональности (например, -1 для отрицательного, 0 для нейтрального, 1 для положительного).
  • Он сопоставляет числовые метки настроений с унифицированным форматом меток, подходящим для обучения модели и вывода.
  • Сначала функция извлекает значение «метки» из входных данных.
  • Затем он проверяет значение «метки» и сопоставляет его с числовым представлением метки (0 для отрицательного, 1 для нейтрального, 2 для положительного).
  • Функция возвращает новый словарь, содержащий преобразованные «метки» с числовым представлением.

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

Токенизировать текст и преобразовывать исходные метки тональности.

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

  1. удалить_столбцы:
  • Это список имен столбцов, которые будут удалены из набора данных после токенизации и преобразования меток. Эти столбцы не нужны для обучения модели и могут быть удалены.
  1. datasets.map(tokenize_data, batched=True):
  • Эта строка применяет функцию tokenize_data (ранее определенную в коде) к набору данных в пакетном режиме.
  • Функция tokenize_data маркирует столбец «safe_text» в наборе данных, преобразовывая необработанный текст в токенизированные последовательности. Параметр batched=True указывает, что токенизация должна применяться пакетами для оптимизации эффективности.
  1. datasets.map (transfom_label, remove_columns = remove_columns):
  • Эта строка применяет к набору данных функцию transfom_label (ранее определенную в коде).
  • Функция transfom_label преобразует исходные метки настроений в столбце «метка» в числовые представления (0 для отрицательного, 1 для нейтрального, 2 для положительного).
  • Параметр remove_columns=remove_columns обеспечивает удаление указанных столбцов («tweet_id», «label», «safe_text», «agreement») из набора данных после преобразования, оставляя только токенизированные текстовые данные и числовые метки тональности.

Извлечение наборов данных train и eval из наборов данных

Код ниже делает следующее:

  1. train_dataset = наборы данных['train'].shuffle(seed=0):
  • Эта строка создает обучающий набор данных, извлекая подмножество «поезд» из переменной наборов данных с помощью ключа «поезд».
  • Функция shuffle(seed=0) применяется к подмножеству «поезд». Эта функция случайным образом перемешивает примеры в обучающем наборе данных, чтобы убедиться, что порядок примеров, отображаемых во время обучения, является рандомизированным, что может привести к лучшему обобщению. Параметр seed=0 задает случайное начальное число для воспроизводимости.
  1. eval_dataset = наборы данных['eval'].shuffle(seed=0):
  • Эта строка создает набор данных для оценки аналогично набору обучающих данных.
  • Подмножество «eval» извлекается из переменной наборов данных, и функция shuffle() применяется с тем же случайным начальным числом, что и в предыдущей строке (начальное число = 0).

Определить функцию метрик

Функция ниже делает следующее:

  1. определение вычислительных_метрик(eval_preds)::
  • Это определение функции Python с именем calculate_metrics.
  • Функция принимает один аргумент eval_preds, который должен быть кортежем, содержащим два массива: логиты и метки. Эти массивы представляют собой прогнозы, сделанные моделью (логиты), и соответствующие истинные метки (метки) для партии примеров во время оценки.
  1. логиты, метки = eval_preds:
  • Эта строка распаковывает кортеж eval_preds в два отдельных массива логитов и меток, представляющих прогнозы модели и истинные метки для партии примеров соответственно.
  1. прогнозы = np.argmax (логиты, ось = -1):
  • Эта строка вычисляет прогнозируемый класс для каждого примера в пакете, беря индекс максимального значения в массиве логитов по последней оси (ось = -1).
  • Массив логитов содержит необработанные выходные данные модели для каждого класса, а np.argmax() находит индекс класса с наибольшей вероятностью для каждого примера.
  1. f1 = f1_score (метки, прогнозы, среднее = «взвешенное»):
  • Эта строка вычисляет взвешенную оценку F1 для пакета примеров.
  • Для этого расчета используется функция f1_score() из модуля sklearn.metrics.
  • Он принимает истинные метки и прогнозы предсказанных меток в качестве входных данных и вычисляет оценку F1.
  • Параметр medium='weighted' указывает, что оценка F1 должна быть взвешена по количеству выборок в каждом классе, что учитывает дисбаланс классов.
  1. return {"f1-счет": f1}:
  • Наконец, функция возвращает словарь, содержащий вычисленную оценку F1, с ключом «f1-score» и соответствующим значением f1.

Три модели должны обучаться по очереди следующим образом:

  1. «Bert-base-case» и называться: «tweet_sentiments_analysis_bert».
  2. ‘ditilbert-base-case’ и называться: ‘tweet_sentiments_analysis_distilbert’
  3. «Roberta-base» и называться: «tweet_sentiments_analysis_roberta».

Установите аргументы обучения

Таким образом, объект TrainingArguments используется для определения различных конфигураций обучения и гиперпараметров, таких как количество периодов обучения, стратегии оценки и сохранения, а также необходимость отправки модели в концентратор моделей Hugging Face после обучения. Затем этот объект передается в класс Trainer для обучения модели с использованием указанных параметров.

Создайте экземпляр модели

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

Создать экземпляр тренера

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

Начать обучение

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

Оценка модели

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

Развертывание веб-приложений Streamlit

Наконец, мы разработали удобное веб-приложение, используя Streamlit для взаимодействия с отлаженными моделями. Приложение позволяет пользователям вводить твиты или выбирать из примеров твитов, связанных с вакцинами Covid. Пользователи также могут выбрать одну из трех точно настроенных моделей (BERT, DistilBERT или RoBERTa) для анализа настроений.

Приложение использует библиотеку Hugging Face Transformers и платформу Streamlit для обработки входного твита через выбранную модель. Модель прогнозирует настроение (отрицательное, нейтральное или положительное) и обеспечивает уровень достоверности прогноза. Результаты отображаются с соответствующей анимацией смайликов для приятного взаимодействия с пользователем.

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

Заключение

В этом посте мы покажем, как настроить предварительно обученные модели преобразователя для анализа настроений в твитах о вакцинах от Covid от начала до конца. Для обучения и оценки моделей мы использовали библиотеку Hugging Face Transformers, а для разработки и развертывания веб-приложений — платформу Streamlit.

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

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

Признательность

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

Рекомендации

Обнимающее лицо

Стримлит

Спасибо за прочтение

Для вкладов и комментариев, не стесняйтесь обращаться ко мне

Весь код находится в этом репозитории GitHub.

Доступ к приложению настроений на Huggingface здесь

Электронная почта : LinkedIn : GitHub