В этой модели мы построили классификацию текста с использованием НЛП с использованием модели 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. Для получения дополнительной информации, пожалуйста, следуйте.