Введение
Знаете ли вы, что машинное обучение — один из самых популярных подходов к анализу настроений? Анализ тональности — это распространенная задача обработки естественного языка (NLP), которая включает определение тональности данного фрагмента текста, например твита, обзора продукта или отзывов клиентов. Анализ настроений сейчас как никогда важен для компаний и организаций, чтобы понять мнения и отзывы клиентов в свете роста социальных сетей и онлайн-оценок клиентов.
Алгоритмы машинного обучения можно обучать на больших наборах данных помеченных примеров для автоматического изучения шаблонов и взаимосвязей между текстовыми функциями и метками тональности. Затем эти алгоритмы можно использовать для прогнозирования тональности нового невидимого текста.
В этой статье мы рассмотрим, как выполнить анализ настроений с помощью модели ELECTRA.
Что такое ЭЛЕКТРА?
ELECTRA (Эффективное обучение кодировщику, который точно классифицирует замены токенов) — это современная методика предварительного обучения для обработки естественного языка (NLP), разработанная Google AI Language в 2020 году. построен с использованием архитектуры Transformer и предназначен для повышения эффективности и точности моделей предварительного обучения для различных задач НЛП, таких как моделирование языка, категоризация текста, ответы на вопросы и анализ настроений.
Использование ELECTRA для анализа настроений может помочь повысить точность и эффективность моделей анализа настроений, что приведет к лучшему пониманию и принятию решений для предприятий и организаций.
Вы пробовали Комету? Зарегистрируйтесь бесплатно и легко отслеживайте эксперименты, управляйте моделями в производстве и визуализируйте производительность вашей модели.
Как работает ЭЛЕКТРА?
Анализ настроений — это популярная задача НЛП, которая включает в себя определение настроения или эмоционального тона фрагмента текста. С развитием методики предварительной подготовки ELECTRA анализ настроений можно выполнять более точно и эффективно. Шаги, показывающие, как использовать ELECTRA для анализа настроений, перечислены ниже:
- Подготовка данных. Первым шагом является сбор и подготовка помеченного набора данных для обучения модели анализа настроений. Этот набор данных должен включать ряд текстовых примеров с соответствующими метками настроений (положительными, отрицательными или нейтральными).
- Предварительное обучение. После того как набор данных подготовлен, следующим шагом является предварительное обучение модели ELECTRA на наборе данных. Это включает в себя обучение сетей генератора и дискриминатора на входном тексте и метках настроений с использованием предварительно обученного алгоритма ELECTRA.
- Точная настройка.После предварительного обучения модель ELECTRA можно настроить на меньшем наборе данных помеченных примеров, характерных для задачи анализа тональности. Этот шаг тонкой настройки помогает повысить точность модели для конкретной задачи.
- Оценка. После обучения и настройки модели ее точность и эффективность можно оценить с помощью тестового набора данных. Сравните прогнозируемые метки настроений с фактическими метками на этом этапе, чтобы оценить точность модели.
- Развертывание. Наконец, обученную модель можно развернуть для анализа тональности нового невидимого текста. Модель принимает входной текст в качестве входных данных и выводит метку тональности (положительную, отрицательную или нейтральную) на основе предварительно обученных и точно настроенных весов модели ELECTRA.
Архитектура ELECTRA
Основная идея ELECTRA состоит в том, чтобы обучить кодировщик, который сможет эффективно различать исходный текст и измененную версию текста, где некоторые токены были заменены сгенерированными токенами. Обучив кодировщик выполнению этой задачи, модель может научиться более эффективному и действенному представлению языка.
Архитектура ELECTRA состоит из двух основных компонентов: генератора и дискриминатора.
Генератор обычно представляет собой меньшую модель по сравнению с дискриминатором и обучен генерировать высококачественные токены, которые дискриминатору трудно классифицировать как сгенерированные. Генератор берет исходный текст в качестве входных данных и случайным образом заменяет некоторые токены сгенерированными токенами.
Дискриминатор — это более крупная модель, которая обучена точно классифицировать каждый токен во входном тексте как исходный или сгенерированный. Дискриминатор принимает измененный текст в качестве входных данных и предсказывает, является ли каждый токен в тексте оригинальным или сгенерированным.
Во время предварительной подготовки генератор используется для создания большого корпуса модифицированного текста, который затем используется для обучения дискриминатора. Дискриминатор обучается предсказывать, является ли каждая лексема в измененном тексте оригинальной или сгенерированной, а генератор обновляется для получения более качественных сгенерированных лексем.
Выполнение
В этом разделе мы рассмотрим шаги, связанные с реализацией анализа настроений с помощью ELECTRA.
Шаг 1: Загрузка данных
Загрузите данные с помощью библиотеки, такой как Pandas. Данные должны иметь два столбца: один для текста и один для тональности. Позже вы можете разделить данные на наборы для обучения и тестирования.
import pandas as pd from sklearn.model_selection import train_test_split # Load data data = pd.read_csv("dataSet.csv") # Split data train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)
Шаг 2: Предварительная обработка данных
Предварительно обработайте данные, очистив и разметив текст. Вы можете использовать такие библиотеки, как NLTK.
import nltk nltk.download('punkt') from nltk.tokenize import word_tokenize from nltk.corpus import stopwords # Define stopwords stop_words = set(stopwords.words('english')) # Clean and tokenize text def clean_text(text): # Remove punctuation and convert to lowercase text = text.lower() text = re.sub(r'[^\w\s]', '', text) # Tokenize text and remove stop words tokens = word_tokenize(text) tokens = [token for token in tokens if token not in stop_words] # Join tokens back into string text = " ".join(tokens) return text # Apply cleaning function to data train_data['text'] = train_data['text'].apply(clean_text) test_data['text'] = test_data['text'].apply(clean_text)
Шаг 3: Создание модели
Создайте модель анализа настроений с помощью ELECTRA. Вы можете использовать предварительно обученную модель ELECTRA.
import torch import transformers # Load the ELECTRA model model_name1 = "google/electra-small-discriminator" tokenizer = transformers.AutoTokenizer.from_pretrained(model_name1) model = transformers.AutoModelForSequenceClassification.from_pretrained(model_name1) # Set the device device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device)
Шаг 4: Обучение модели
Обучите модель с помощью обучающих данных. Вы можете использовать оптимизатор AdamW
и функцию CrossEntropyLoss
.
import torch.nn as nn import torch.optim as optim # Define optimizer and loss function here optimizer = optim.AdamW(model.parameters(), lr=1e-5) criterion = nn.CrossEntropyLoss() # Train model for epoch in range(12): running_loss = 0.0 for batch in train_loader: inputs = tokenizer(batch['text'], padding=False, truncation=True, return_tensors="pt") inputs.to(device) labels = batch['sentiment'].to(device) optimizer.zero_grad() outputs = model(*inputs, labels=labels) loss = outputs.loss loss.backward() optimizer.step() running_loss1 += loss.item() print(" Epoch {} Loss: {} ".format(epoch+1, running_loss1/len(train_loader)))
Шаг 5: Оцените модель
Установите модель в режим оценки, используя model.eval()
. Затем прокрутите тестовые данные и получите входные данные и метки для каждой партии. Используйте tokenizer
для токенизации текста и преобразования его в тензор PyTorch. Затем мы используем модель для прогнозирования входных данных и расчета количества правильных прогнозов с помощью функции torch.sum()
. Наконец, вычислите точность теста, разделив количество правильных прогнозов на общее количество тестовых примеров.
# evaluate the model on the test dataset model.eval() test_corrects = 0 with torch.no_grad(): for batch in test_iterator: # get the inputs and labels inputs = tokenizer(batch.text, padding=False, truncation=True, return_tensors='pt').to(device) labels = batch.label.to(device) # forward it outputs = model(*inputs).logits.squeeze(1) # calculate statistics here test_corrects += torch.sum((outputs > 0) == labels.byte()) # print the accuracy value of the model test_acc1 = test_corrects.double() / len(test_data) print(f'Test Acc: {test_acc1:.4f}')
Заключение
Анализ настроений с использованием ELECTRA имеет большой потенциал для широкого спектра приложений в бизнесе, маркетинге и анализе социальных сетей. В этой статье описывается, как реализовать ELECTRA для анализа настроений. Используя возможности предварительно обученных моделей и трансфертного обучения, вы можете легко выполнять анализ настроений на больших наборах данных и достигать самой современной производительности.
Благодаря постоянному развитию и достижениям в НЛП и машинном обучении можно ожидать появления еще более точных и эффективных методов анализа настроений в будущем.
Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.
Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение нашего еженедельного информационного бюллетеня (Еженедельник глубокого обучения), заглянуть в блог Comet, присоединиться к нам в Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.