سحر و جادو طبقه بندی متن: متن خام را به بینش عاطفی تبدیل کنید

طبقه بندی متن فقط یک مفهوم فنی نیست – این سلاح مخفی شما برای ایجاد داده های متن کثیف و بدون ساختار است! تصور کنید که فوراً هزاران نظر مشتری ، بررسی محصول را طبقه بندی کنید ، یا بلیط را به احساسات معنی دار مانند “شادی” ، “غم” یا “عصبانیت” پشتیبانی کنید – همه بدون خواندن یک کلمه به صورت دستی. این فقط راحت نیست ؛ این یک تغییر دهنده بازی برای درک احساسات مشتری در مقیاس است.
در این آموزش مفید ، ما با استفاده از دو رویکرد قدرتمند ، به دنیای جذاب تشخیص احساسات شیرجه می زنیم:
-
رویکرد DIY: ما آستین های خود را بالا می بریم و نسخه رعد و برق از Bert (Distilbert) خودمان را تنظیم می کنیم. هنگامی که مدل سفارشی شما دقت 92.5 ٪ را ارائه می دهد ، این عجله از موفقیت را احساس خواهید کرد! 💪
-
رویکرد API: برای کسانی که سرعت و سادگی را ترجیح می دهند ، ما API طبقه بندی Cohere را کشف خواهیم کرد که به شما امکان می دهد طبقه بندی کننده های آماده تولید را با حداقل سربار فنی بسازید.
جادوی طبقه بندی متن
به طبقه بندی متن به عنوان جادوگر مرتب سازی داده های شخصی خود فکر کنید. آن را هزاران نظر ، بررسی یا پیام تغذیه کنید و تماشا کنید که به طور خودکار آنها را در دسته هایی که برای تجارت شما مهم هستند سازماندهی می کند. زیبایی در سازگاری آن نهفته است – آن را یک بار با نمونه های برچسب زده شده خود قرار دهید و یادگیری را ادامه می دهد و با هر پیش بینی باهوش تر می شوید.
وقتی نوبت به اجرا می رسد ، شما دو مسیر هیجان انگیز به جلو دارید:
-
خانه های قبل از آموزش دقیق مانند دبستان: این نسخه “دانشمند دانش” BERT 97 ٪ از عملکرد را در کسری از هزینه محاسباتی به شما می دهد. در حالی که این رویکرد انعطاف پذیری باورنکردنی را ارائه می دهد ، نیاز به درک پرونده های Pytorch (.PT) و برخی از عضلات محاسباتی دارد. آزمایشات من با 16000 مثال آموزش نشان داد تفاوت زمان آموزش چشمگیر بین CPU های محلی و سخت افزار تخصصی مانند TPU های Google Colab!
-
اعمال API طبقه بندی تخصصی مانند همگانی تیونر طبقه بندی: این رویکرد بدون پیچیدگی فنی ، نتایج درجه سازمانی را به شما می دهد. به سادگی داده های برچسب زده شده خود را بارگذاری کنید ، و Cohere از بالابینی سنگین استفاده می کند ، و یک API ساده را برای پیش بینی ها در اختیار شما قرار می دهد.
در این آموزش ، ما هر دو راه حل ایجاد می کنیم و یک براق ایجاد می کنیم در جریان رابط برای نمایش ردیاب احساسات خود در عمل. این که آیا شما یک مهندس ML دستی هستید یا به دنبال سریعترین مسیر تولید هستید ، با دانش عملی که می توانید بلافاصله از آن استفاده کنید ، دور خواهید شد. ما از مجموعه داده های احساسات سخاوتمندانه در Kaggle در اینجا استفاده می کنیم.
سفر ما به سه بخش هیجان انگیز تقسیم می شود:
- قسمت 1: رویکرد DIY با Distilbert
- قسمت 2: رویکرد Cohere ساده (به زودی!)
- قسمت 3: ساختن یک UI خیره کننده برای نمایش مدل خود (به زودی!)
قسمت 1: DIY – تنظیم دقیق Distilbert برای تشخیص احساسات
اولین چیزها: برای دسترسی به Colab ، یک حساب بغل در بغل برای میزبانی مدل و برخی از کتابخانه های پایتون به یک حساب Google نیاز دارید. اما قبل از شروع برنامه نویسی ، بیایید بفهمیم چه چیزی Distilbert را بسیار خاص می کند.
درک Distilbert: بسته کوچک ، عملکرد بزرگ
توسعه یافته توسط تیم درخشان در بغل کردن صورت، Distilbert مانند خواهر و برادر جوانتر Bert است. از طریق فرآیندی به نام تقطیر دانش ، جوهر آنچه را که برت را قدرتمند می کند در حالی که به طور قابل توجهی کوچکتر و سریعتر است ، ضبط می کند. نتیجه؟ مدلی که حدود 97 ٪ از عملکرد برت را بدست می آورد در حالی که 40 ٪ کوچکتر و 60 ٪ سریعتر است. این مناسب برای زمانی است که شما به عملکرد آماده تولید بدون شکستن بانک در منابع محاسباتی نیاز دارید!
بیایید دستانمان را کثیف کنیم: تنظیم دقیق Distilbert
نوت بوک Google Colab خود را آتش بزنید ، زمان اجرا خود را تغییر دهید تا از یک شتاب دهنده GPU استفاده کنید (به من اعتماد کنید ، شما این را می خواهید!) ، و بیایید Distilbert را به یک نیروگاه تشخیص احساسات تبدیل کنیم:
مرحله 1: محیط خود را تنظیم کنید
# Environment Setup - Watch how quickly these install with Colab's lightning-fast internet!
! pip install transformers datasets accelerate pandas numpy evaluate
# Import Libraries
import pandas as pd
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import Trainer, TrainingArguments
from transformers import EarlyStoppingCallback
from datasets import Dataset
import evaluate
# Access your data from Google Drive
from google.colab import drive
drive.mount('/content/drive')
مرحله 2: داده های احساسات خود را بارگیری و آماده کنید
اینجا جایی است که جادو شروع می شود – ما پرونده های متنی خام را به داده های ساختاری تبدیل می کنیم که مدل ما می تواند از آن بیاموزد:
def parse_emotion_file(file_path):
texts, emotions = [], []
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
text, emotion = line.strip().split(';')
texts.append(text)
emotions.append(emotion)
return pd.DataFrame({'text': texts, 'emotion': emotions})
# Define your data directories
PARENT_DIR = "/content/drive/MyDrive/MLEng/"
MODEL_DIR = PARENT_DIR + "model_outputs/"
# Load your datasets - these will be the foundation of your emotion detector!
train_df = parse_emotion_file(PARENT_DIR + "data/train.txt")
val_df = parse_emotion_file(PARENT_DIR + "data/val.txt")
test_df = parse_emotion_file(PARENT_DIR + "data/test.txt")
# Get a glimpse of what you're working with
print(f"Training examples: {len(train_df)}")
print(f"Validation examples: {len(val_df)}")
print(f"Test examples: {len(test_df)}")
print(f"Emotions in our dataset: {sorted(train_df['emotion'].unique())}")
مرحله 3: نشانه گذاری – آموزش مدل خود برای درک متن
توکن سازی زبان انسانی را به چیزی تبدیل می کند که مدل ها می توانند پردازش کنند. به آن فکر کنید که یک واژگان تخصصی برای هوش مصنوعی خود ایجاد کنید:
# Load the tokenizer - this will convert text to tokens our model understands
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
# Create datasets from your dataframes
train_dataset = Dataset.from_pandas(train_df)
val_dataset = Dataset.from_pandas(val_df)
test_dataset = Dataset.from_pandas(test_df)
# This function transforms your text into sequences of token IDs
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=128)
# Apply tokenization to all your datasets
train_dataset = train_dataset.map(tokenize_function, batched=True)
val_dataset = val_dataset.map(tokenize_function, batched=True)
test_dataset = test_dataset.map(tokenize_function, batched=True)
مرحله 4: برچسب ها را برای آموزش آماده کنید
مدل ما باید بفهمد کدام احساسات با کدام مقادیر عددی مطابقت دارد:
# Create a mapping between emotion labels and IDs
labels = sorted(train_df["emotion"].unique())
label2id = {label: idx for idx, label in enumerate(labels)}
id2label = {idx: label for label, idx in label2id.items()}
print("Our emotion mappings:")
for label, idx in label2id.items():
print(f"{label}: {idx}")
# Add numerical labels to your datasets
def add_labels(examples):
examples["labels"] = [label2id[emotion] for emotion in examples["emotion"]]
return examples
train_dataset = train_dataset.map(add_labels, batched=True)
val_dataset = val_dataset.map(add_labels, batched=True)
test_dataset = test_dataset.map(add_labels, batched=True)
مرحله 5: Distilbert را برای طبقه بندی احساسات بارگیری و پیکربندی کنید
اکنون ما با شروع از پیش آموزش Distilbert ، قدرت یادگیری انتقال را مهار خواهیم کرد:
# Set up an evaluation metric - accuracy is perfect for multi-class classification
accuracy = evaluate.load("accuracy")
def compute_metrics(eval_pred):
predictions, labels = eval_pred
predictions = np.argmax(predictions, axis=1)
return {"accuracy": accuracy.compute(predictions=predictions, references=labels)}
# Load the pre-trained model and customize it for our emotion classification task
model = AutoModelForSequenceClassification.from_pretrained(
"distilbert-base-uncased",
num_labels=len(labels),
label2id=label2id,
id2label=id2label
)
مرحله ششم: ردیاب احساسات خود را آموزش دهید!
اینجاست که تمام آماده سازی شما پرداخت می کند – ما به Distilbert آموزش می دهیم تا احساسات را با دقت باورنکردنی تشخیص دهیم:
# Configure training parameters - these are carefully tuned for optimal learning
training_args = TrainingArguments(
output_dir=os.path.join(MODEL_DIR, "checkpoints"),
evaluation_strategy="epoch",
save_strategy="epoch",
learning_rate=3e-5, # Small learning rate for fine-tuning
per_device_train_batch_size=32,
per_device_eval_batch_size=64,
num_train_epochs=5,
weight_decay=0.01, # Prevents overfitting
load_best_model_at_end=True,
metric_for_best_model="accuracy",
fp16=True, # Mixed precision training for speed
gradient_accumulation_steps=2
)
# Initialize the Trainer with everything it needs
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=val_dataset,
tokenizer=tokenizer,
compute_metrics=compute_metrics,
callbacks=[EarlyStoppingCallback(early_stopping_patience=2)] # Stop if not improving
)
# The moment of truth - train your model!
print("🚀 Training started! This might take a while, but the results will be worth it...")
trainer.train()
مرحله 7: عملکرد مدل خود را ارزیابی کنید
بیایید ببینیم که ردیاب احساسات شما روی داده های غیب عملکرد خوبی دارد:
# Evaluate on the test set
test_results = trainer.evaluate(test_dataset)
print(f"📊 Test results: {test_results}")
# A glimpse at what your model achieved
print(f"🎯 Accuracy: {test_results['eval_accuracy']:.2%}")
وقتی این کار را کردم ، نتایج دیدنی بود:
Test results: {'eval_loss': 0.15945003926753998, 'eval_accuracy': 0.925, 'eval_runtime': 1.6421, 'eval_samples_per_second': 1217.947, 'eval_steps_per_second': 19.487, 'epoch': 5.0}
Model saved to /content/drive/MyDrive/MLEng/model_outputs/final_model
این یک دقت 92.5 ٪ است! مدل شما آموخته است که احساسات را از متن با عملکرد سطح تقریباً انسانی بشناسد!
مرحله 8: شاهکار را برای نمایش احساسات خود ذخیره کنید
بیایید مدل خود را ذخیره کنیم تا بتوانید در هر زمان و هر مکان از آن استفاده کنید:
# Save the fine-tuned model and tokenizer
final_model_path = os.path.join(MODEL_DIR, "final_model")
trainer.save_model(final_model_path)
tokenizer.save_pretrained(final_model_path)
print(f"✅ Model successfully saved to {final_model_path}")
مرحله 9: مدل خود را برای چرخش بگیرید!
لحظه ای که منتظر آن هستید – ردیاب احساسات خود را در عمل ببینید:
from transformers import pipeline
# Create an emotion classification pipeline
emotion_classifier = pipeline("text-classification", model=final_model_path, tokenizer=final_model_path)
# Try it on some examples
test_texts = [
"I'm feeling very happy today!",
"This news is absolutely devastating.",
"I'm so angry I could scream!",
"The test results have me feeling very anxious."
]
# Get predictions
for text in test_texts:
result = emotion_classifier(text)
print(f"Text: '{text}'")
print(f"Predicted emotion: {result[0]['label']}, Confidence: {result[0]['score']:.2%}\n")
تبریک می گویم! شما با موفقیت:
- با استفاده از تکنیک های پیشرفته NLP یک مدل تشخیص احساسات قدرتمند ساخته شده است
- به دقت 92.5 ٪ چشمگیر در داده های غیب به دست آورد
- مدلی ایجاد کرد که می تواند فوراً متن را بر اساس احساسات طبقه بندی کند
- روند تنظیم دقیق برای مدل های ترانسفورماتور را تسلط داد
در قسمت های بعدی این آموزش ، ما به بررسی چگونگی:
- با استفاده از API آسان برای استفاده Cohere (قسمت 2) همان طبقه بندی را بسازید
- ایجاد یک برنامه پخش کننده تعاملی برای نشان دادن ردیاب احساسات خود (قسمت 3)
برای این پیگیری های هیجان انگیز با ما همراه باشید و در ضمن سعی کنید با نمونه های متن خود را آزمایش کنید تا ببینید که چگونه مدل شما چگونه می تواند احساسات را تشخیص دهد!
منابع برای کاوش های بیشتر
با تشکر ویژه از Praveen برای مجموعه داده اصلی.
آیا سعی کرده اید ردیاب احساسات خود را بسازید؟ به چه دقت دست یافتید؟ نتایج خود را در نظرات زیر به اشتراک بگذارید!