Введение

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

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

В этой статье мы рассмотрим, как выполнить анализ настроений с помощью модели ELECTRA.

Что такое ЭЛЕКТРА?

ELECTRA (Эффективное обучение кодировщику, который точно классифицирует замены токенов) — это современная методика предварительного обучения для обработки естественного языка (NLP), разработанная Google AI Language в 2020 году. построен с использованием архитектуры Transformer и предназначен для повышения эффективности и точности моделей предварительного обучения для различных задач НЛП, таких как моделирование языка, категоризация текста, ответы на вопросы и анализ настроений.

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

Вы пробовали Комету? Зарегистрируйтесь бесплатно и легко отслеживайте эксперименты, управляйте моделями в производстве и визуализируйте производительность вашей модели.

Как работает ЭЛЕКТРА?

Анализ настроений — это популярная задача НЛП, которая включает в себя определение настроения или эмоционального тона фрагмента текста. С развитием методики предварительной подготовки ELECTRA анализ настроений можно выполнять более точно и эффективно. Шаги, показывающие, как использовать ELECTRA для анализа настроений, перечислены ниже:

  1. Подготовка данных. Первым шагом является сбор и подготовка помеченного набора данных для обучения модели анализа настроений. Этот набор данных должен включать ряд текстовых примеров с соответствующими метками настроений (положительными, отрицательными или нейтральными).
  2. Предварительное обучение. После того как набор данных подготовлен, следующим шагом является предварительное обучение модели ELECTRA на наборе данных. Это включает в себя обучение сетей генератора и дискриминатора на входном тексте и метках настроений с использованием предварительно обученного алгоритма ELECTRA.
  3. Точная настройка.После предварительного обучения модель ELECTRA можно настроить на меньшем наборе данных помеченных примеров, характерных для задачи анализа тональности. Этот шаг тонкой настройки помогает повысить точность модели для конкретной задачи.
  4. Оценка. После обучения и настройки модели ее точность и эффективность можно оценить с помощью тестового набора данных. Сравните прогнозируемые метки настроений с фактическими метками на этом этапе, чтобы оценить точность модели.
  5. Развертывание. Наконец, обученную модель можно развернуть для анализа тональности нового невидимого текста. Модель принимает входной текст в качестве входных данных и выводит метку тональности (положительную, отрицательную или нейтральную) на основе предварительно обученных и точно настроенных весов модели 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 для получения ресурсов, событий и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.