В этой модели мы построили классификацию текста с использованием НЛП с использованием модели Hugging Face.

Краткий обзор модели и набора данных

Задача состоит в том, чтобы построить модель НЛП с помощью Hugging Face и Transformers на наборе данных твитов с двумя столбцами — текстом и меткой. Столбец text содержит комментарии пользователей, а столбец label содержит соответствующую эмоцию комментария. Цель состоит в том, чтобы разработать модель, которая может точно классифицировать эмоции данного твита на основе его текстового содержания.

Для этого мы можем использовать библиотеку Hugging Face для токенизации и предварительной обработки текстовых данных, а затем использовать предварительно обученную модель преобразователя, такую ​​как DistilBERT, для обучения модели классификации в наборе данных. Набор данных можно разделить на данные обучения и тестирования, чтобы оценить производительность модели с использованием таких показателей, как точность, воспроизводимость и оценка F1. Отчет о классификации может быть создан для дальнейшего анализа производительности модели на данных тестирования.

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

Чтобы построить модель NLP с использованием Hugging Face и Transformers в наборе данных твитов с двумя столбцами — текстом и меткой, мы можем выполнить следующие шаги:

Импорт библиотек:

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import re

Загрузка набора данных:

# Load the CSV file
df = pd.read_csv('tweet_dataset.csv')
df

Предварительная обработка:

● Очистите текст, удалив ненужные символы, теги HTML и URL-адреса. ● Маркировать текст, разбивая его на слова и преобразовывая их в числовые маркеры. ● Дополняйте и усекайте входные последовательности, чтобы убедиться, что они имеют одинаковую длину. ● Преобразуйте категориальные метки эмоций в числовые значения.

def preprocess_text(text):
    
    text=re.sub('<[^>]*>','',text)
    text=re.sub("[^A-Za-z" "]+"," ",text).lower()
    text=re.sub("[0-9" "]+"," ",text)
    emojis=re.findall('(?::|;|=)(?:-)?(?:)|(|D|P)',text)
    text=re.sub('[\W]+',' ',text.lower()) + ' '.join(emojis).replace('-','')
    text_tokens = word_tokenize(text)
    stop_words = set(stopwords.words('english'))
    #remove stopwords
    filtered_text = []
    for w in text_tokens:
        if w not in stop_words:
            filtered_text.append(w)
    #return to sentence
    return " ".join(filtered_text)
nltk.download('punkt')
nltk.download('stopwords')
df['text'] = df.text.apply(preprocess_text)
df

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

df['label'] = df['label_name'].factorize()[0]
df.head()

Итак, теперь перейдем к построению модели. Перед этим давайте взглянем на архитектуру модели.

Архитектура модели:

● Используйте модель DistilBERT от Hugging Face, меньший и более быстрый вариант популярной модели BERT.

● Точная настройка модели DistilBERT для набора данных твитов с использованием трансферного обучения.

● Архитектура модели состоит из входного слоя, нескольких блоков преобразования и плотного выходного слоя с активацией softmax для многоклассовой классификации.

Построение модели:

import tensorflow as tf
from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification
from sklearn.model_selection import train_test_split
from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification
from sklearn.metrics import classification_report
# Split the dataset into training and testing data
train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)
# Tokenize the data
tokenizer = DistilBertTokenizerFast.from_pretrained("distilbert-base-uncased")
train_encodings = tokenizer(train_df.text.tolist(), truncation=True, padding=True)
test_encodings = tokenizer(test_df.text.tolist(), truncation=True, padding=True)
# Create input pipelines
train_dataset = tf.data.Dataset.from_tensor_slices((dict(train_encodings), train_df.label))
train_dataset = train_dataset.shuffle(len(train_df)).batch(32)
test_dataset = tf.data.Dataset.from_tensor_slices((dict(test_encodings), test_df.label))
test_dataset = test_dataset.batch(32)
# Define the model
num_labels = len(train_df.label.unique())
model = TFDistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=num_labels)

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

● Используйте оптимизатор Adam и функцию категориальной кросс-энтропийной потери для точной настройки модели.

● Обучайте модель в течение нескольких эпох, постепенно снижая скорость обучения с течением времени, чтобы улучшить сходимость.

● Оценивайте модель на отдельном проверочном наборе во время обучения, чтобы отслеживать производительность и предотвращать переоснащение.

# Train the model
from tensorflow.keras import optimizers, losses, metrics
model.compile(
    optimizer=optimizers.Adam(learning_rate=5e-5),
    loss=losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=metrics.SparseCategoricalAccuracy()
)
model.fit(train_dataset, epochs=5)

Оценка:

● Используйте точность, достоверность, полноту и балл F1 в качестве показателей оценки.

● Общая точность модели на тестовом наборе данных составила 0,85, что указывает на хорошую производительность.

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

# Evaluate the model
loss, accuracy = model.evaluate(test_dataset)
print("Test loss:", loss)
print("Test accuracy:", accuracy)

# Generate classification report
y_true = test_df.label.tolist()
y_pred = model.predict(test_dataset).logits.argmax(axis=1).tolist()
target_names = ["optimism", "anger", "joy", "sadness"]
print(classification_report(y_true, y_pred, target_names=target_names))

Возможные улучшения:

● Увеличьте размер обучающего набора данных или настройте модель на большем наборе данных.

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

Заключение

Наконец-то мы построили модель классификации текста, используя Hugging Face. Для получения дополнительной информации, пожалуйста, следуйте.