Inference Unlimited

Будівництво власного інструменту для аналізу настрою з використанням LLM

Вступ

Аналіз настрою — це процес визначення емоційного тону тексту, який можна застосовувати в багатьох галузях, таких як маркетинг, обслуговування клієнтів чи дослідження громадської думки. У цій статті ми покажемо, як побудувати власний інструмент для аналізу настрою, який використовує великі мовні моделі (LLM).

Вибір моделі

Першим кроком є вибір відповідної мовної моделі. Ми можемо вибрати між:

Для нашого прикладу ми використаємо Hugging Face Transformers з моделлю DistilBERT, яка є легшою версією BERT і добре підходить для завдань аналізу настрою.

Встановлення необхідних бібліотек

Щоб почати, встановімо необхідні бібліотеки:

pip install transformers torch pandas

Завантаження моделі та токенізатора

Далі завантаження моделі та токенізатора:

from transformers import pipeline

# Завантаження готового інструменту для аналізу настрою
sentiment_pipeline = pipeline("sentiment-analysis")

Підготовка даних

Підготуємо набір даних для тестування. Ми можемо використати простий приклад:

texts = [
    "Я кохаю цей продукт, він фантастичний!",
    "Не рекомендую, дуже розчарований.",
    "Середній продукт, нічого виняткового.",
    "Дія є задовільною, але ціна занадто висока."
]

Аналіз настрою

Тепер ми можемо провести аналіз настрою для наших текстів:

results = sentiment_pipeline(texts)

for text, result in zip(texts, results):
    print(f"Текст: {text}")
    print(f"Настрій: {result['label']} (Впевненість: {result['score']:.2f})")
    print("---")

Адаптація моделі

Якщо ми хочемо адаптувати модель до наших специфічних даних, ми можемо використати бібліотеку Hugging Face Transformers для тренування моделі на нашому наборі даних.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import Trainer, TrainingArguments
import pandas as pd
from sklearn.model_selection import train_test_split

# Прикладовий набір даних
data = pd.DataFrame({
    "text": ["Я кохаю цей продукт", "Не рекомендую", "Середній продукт"],
    "label": [1, 0, 0]  # 1 - позитивний, 0 - негативний
})

# Розподіл даних на тренувальний та тестовий набори
train_texts, test_texts, train_labels, test_labels = train_test_split(
    data["text"], data["label"], test_size=0.2
)

# Завантаження токенізатора та моделі
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# Токенізація даних
train_encodings = tokenizer(list(train_texts), truncation=True, padding=True)
test_encodings = tokenizer(list(test_texts), truncation=True, padding=True)

# Класи для обробки даних
class SentimentDataset(torch.utils.data.Dataset):
    def __init__(self, encodings, labels):
        self.encodings = encodings
        self.labels = labels

    def __getitem__(self, idx):
        item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
        item["labels"] = torch.tensor(self.labels[idx])
        return item

    def __len__(self):
        return len(self.labels)

train_dataset = SentimentDataset(train_encodings, train_labels)
test_dataset = SentimentDataset(test_encodings, test_labels)

# Налаштування тренування
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=64,
    warmup_steps=500,
    weight_decay=0.01,
    logging_dir="./logs",
    logging_steps=10,
)

# Тренування моделі
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=test_dataset
)

trainer.train()

Впровадження моделі

Після тренування моделі ми можемо її зберегти та використати для аналізу настрою:

model.save_pretrained("./custom_sentiment_model")
tokenizer.save_pretrained("./custom_sentiment_model")

# Завантаження адаптованої моделі
custom_model = AutoModelForSequenceClassification.from_pretrained("./custom_sentiment_model")
custom_tokenizer = AutoTokenizer.from_pretrained("./custom_sentiment_model")

# Прикладовий аналіз
custom_pipeline = pipeline("sentiment-analysis", model=custom_model, tokenizer=custom_tokenizer)
print(custom_pipeline("Цей продукт чудовий!"))

Підсумок

У цій статті ми показали, як побудувати власний інструмент для аналізу настрою, який використовує великі мовні моделі. Крок за кроком ми обговорили вибір моделі, підготовку даних, аналіз настрою та адаптацію моделі до наших потреб. Завдяки цьому інструменту ми можемо ефективно аналізувати емоційний тон текстів у різних галузях.

Język: UK | Wyświetlenia: 6

← Powrót do listy artykułów