قابلیتهای کلیدی Torchtext
Torchtext مبتنی بر کتابخانه PyTorch است و برای تسهیل فرآیند پیشپردازش دادههای متنی مورد استفاده قرار میگیرد. با استفاده از Torchtext، میتوانید فرآیند تبدیل دادههای متنی به فرمتی مناسب جهت استفاده در مدلهای یادگیری عمیق را به شکل سریعتر و سادهتری انجام دهید. Torchtext طیف گستردهای از قابلیتهای کاربردی را در زرادخانه خود دارد که آن را به یک ابزار مفید برای پردازش دادههای متنی در پروژههای یادگیری عمیق تبدیل کرده است. برخی از این قابلیتها به شرح زیر است:
- پیشپردازش خودکار متن: با استفاده از Torchtext، میتوانید فرآیند پیشپردازش دادههای متنی را خودکارسازی کنید. این فرآیند شامل توکنبندی (tokenization)، تبدیل کلمات به شمارهها (عددگذاری)، ساخت دیکشنری و غیره است. این ویژگی باعث میشود که شما نیازی به نوشتن کدهای پیچیده برای انجام این عملیات نداشته باشید.
- مدیریت داده آسان: Torchtext ابزارها و توابعی را ارائه میدهد که به شما کمک میکند دادههای متنی را از منابع مختلف جمعآوری و تبدیل کنید. همچنین، شما میتوانید دادههای خود را به صورت دستهبندی شده طبقهبندی کنید (برای آموزش، اعتبارسنجی و آزمون) و آنها را به صورت دستهبندی شده بارگذاری کنید. این کارها با استفاده از توابع و قابلیتهای Torchtext به شکل سادهای انجام میشود.
- پیشپردازش متن ساده: Torchtext ابزارهایی را برای پیشپردازش دادههای متنی فراهم میکند. میتوانید به راحتی توکنبندی، عددگذاری، ساخت واژهنامه، حذف علائم نگارشی و سایر عملیات پیشپردازش را انجام دهید.
- پشتیبانی از مدلهای یادگیری عمیق مختلف: با استفاده از Torchtext میتوانید با مدلهای یادگیری عمیق پرکاربرد مانند شبکههای LSTM، GRU و شبکههای عصبی پیچشی کار کنید. Torchtext با استفاده از این مدلها و ابزارهای پیشپردازشی، فرآیند آمادهسازی داده برای این مدلها را تسهیل میکند.
- برنامهنویسی سریعتر و آسانتر: با استفاده از Torchtext، نیازی به نوشتن کدهای پیچیده برای پیشپردازش دادههای متنی ندارید. این کتابخانه ابزارهایی را فراهم میکند که فرآیند پیشپردازش را سادهتر و قابل تنظیم میکند. رویکرد فوق به شما کمک میکند تا زمان کمتری را برای برنامهنویسی متحمل شوید.
چگونه از Torchtext استفاده کنیم؟
برای استفاده از کتابخانه Torchtext، باید مراحل زیر را دنبال کنید:
1. نصب Torchtext: ابتدا، باید کتابخانه Torchtext را در سیستم خود نصب کنید. شما میتوانید از مدیر بستههای Python (مانند pip) استفاده کنید و دستور زیر را اجرا کنید:
pip install torchtext
2. وارد کردن ماژولهای مورد نیاز: بعد از نصب Torchtext، شما باید ماژولهای مورد نیاز را در برنامه خود وارد کنید. این شامل ماژولهای torchtext.data و torchtext.datasets است.
import torchtext.data as data
import torchtext.datasets as datasets
3. تعریف فضای برداری: پس از وارد کردن ماژولهای مورد نیاز، باید فضای برداری را تعریف کنید. فضای برداری مشخص میکند چگونه دادههای متنی را پردازش کنید و به فرمت مناسب برای مدلهای یادگیری عمیق تبدیل کنید. برای مثال، برای پیشپردازش یک متن، میتوانید فضای برداری را به صورت زیر تعریف کنید:
text_field = data.Field(tokenize='spacy', lower=True)
label_field = data.LabelField()
در این مثال، tokenize='spacy' برای توکنبندی متن با استفاده از کتابخانه Spacy استفاده میشود. همچنین، lower=True باعث میشود تمام کلمات به حروف کوچک تبدیل شوند.
4. بارگیری دادهها: بعد از تعریف فضای برداری، شما باید دادههای متنی خود را بارگیری کنید. Torchtext امکان بارگیری دادهها از منابع مختلف مانند فایلهای متنی، پایگاهدادهها و وب را فراهم میکند. برای مثال، اگر دادههایتان در یک فایل متنی ذخیره شده باشد، میتوانید از تابع TabularDataset استفاده کنید:
train_data, test_data = datasets.TabularDataset.splits(
path='path/to/data',
train='train.csv',
test='test.csv',
format='csv',
fields=[('text', text_field), ('label', label_field)]
)
در این مثال، دادههای آموزش و آزمون از فایلهای train.csv و test.csv بارگیری میشوند و ستون مربوط به متن به فضای برداری text_field و ستون مربوط به برچسب به فضای برداری label_field تخصیص مییابد.
5. ساخت دیتاست و دیتالودر: پس از بارگیری دادهها، باید دادههایتان را به دیتاست (Dataset) تبدیل کنید. این کار با استفاده از تابع Example و Dataset انجام میشود. سپس میتوانید از دیتالودر (Dataloader) برای بارگیری دسته به دسته دادهها استفاده کنید. به عنوان مثال:
train_dataset, test_dataset = data.Dataset.splits(
(train_data, test_data),
fields=[('text', text_field), ('label', label_field)]
)
train_iterator, test_iterator = data.BucketIterator.splits(
(train_dataset, test_dataset),
batch_size=64,
sort_key=lambda x: len(x.text),
sort_within_batch=True
)
در این مثال، ابتدا دادههای آموزش و آزمون به دیتاست تبدیل میشوند و سپس با استفاده از BucketIterator، دادهها به صورت دسته به دسته بارگیری میشوند. batch_size تعیین میکند چند نمونه در هر دسته قرار میگیرد. sort_key و sort_within_batch مشخص میکند که دادهها بر اساس طول متن مرتب شوند و در هر دسته نیز متنها بر اساس طول مرتب شوند.
6. آموزش و ارزیابی مدل: اکنون که دادهها آماده هستند، میتوانید مدل خود را تعریف کرده و آموزش دهید. برای آموزش مدل، شما میتوانید از توابع آموزشی مانند train استفاده کنید. قطعه کد زیر این موضوع را نشان میدهد:
def train(model, iterator, optimizer, criterion):
model.train()
for batch in iterator:
optimizer.zero_grad()
predictions = model(batch.text)
loss = criterion(predictions, batch.label)
loss.backward()
optimizer.step()
model = MyModel(len(text_field.vocab), ...)
optimizer = torch.optim.Adam(model.parameters())
criterion = torch.nn.CrossEntropyLoss()
train(model, train_iterator, optimizer, criterion)
در این مثال، train تابعی است که مدل را در حالت آموزش قرار میدهد و برای هر دسته از دادهها، پیشبینیها را محاسبه کرده و خطا را با استفاده از تابع خطای criterion محاسبه میکند.
7. ارزیابی مدل: بعد از آموزش مدل، میتوانید آن را بر روی دادههای آزمون ارزیابی کنید. برای این منظور، میتوانید از تابع evaluate استفاده کنید. برای مثال:
def evaluate(model, iterator, criterion):
model.eval()
total_loss = 0
correct_preds = 0
total_preds = 0
with torch.no_grad():
for batch in iterator:
predictions = model(batch.text)
loss = criterion(predictions, batch.label)
total_loss += loss.item()
_, predicted_labels = torch.max(predictions, 1)
correct_preds += (predicted_labels == batch.label).sum().item()
total_preds += batch.label.size(0)
accuracy = correct_preds / total_preds
avg_loss = total
اکنون قطعه کد بالا را به شکل یکپارچه مینویسیم تا خوانندگان عزیز بتوانند به شکل سادهتری از آن استفاده کنند:
import torch
import torch.nn as nn
import torch.optim as optim
import torchtext
from torchtext.datasets import IMDB
from torchtext.data import Field, LabelField, TabularDataset, BucketIterator
# تعریف فضای برداری
text_field = Field(tokenize='spacy', lower=True)
label_field = LabelField(dtype=torch.float)
# بارگیری دادهها
train_data, test_data = IMDB.splits(text_field, label_field)
# ساخت دیتاست و دیتالودر
train_dataset, test_dataset = TabularDataset.splits(
path='.',
train='imdb_train.csv',
test='imdb_test.csv',
format='csv',
fields=[('text', text_field), ('label', label_field)]
)
train_iterator, test_iterator = BucketIterator.splits(
(train_dataset, test_dataset),
batch_size=64,
sort_key=lambda x: len(x.text),
sort_within_batch=True
)
# تعریف مدل
class MyModel(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
super(MyModel, self).__init__()
self.embedding = nn.Embedding(vocab_size, embedding_dim)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, text):
embedded = self.embedding(text)
hidden = torch.mean(embedded, dim=0)
output = self.fc(hidden)
return output
model = MyModel(len(text_field.vocab), embedding_dim=100, hidden_dim=100, output_dim=1)
# آموزش مدل
optimizer = optim.Adam(model.parameters())
criterion = nn.BCEWithLogitsLoss()
def train(model, iterator, optimizer, criterion):
model.train()
for batch in iterator:
optimizer.zero_grad()
predictions = model(batch.text).squeeze(1)
loss = criterion(predictions, batch.label)
loss.backward()
optimizer.step()
train(model, train_iterator, optimizer, criterion)
# ارزیابی مدل
def evaluate(model, iterator, criterion):
model.eval()
total_loss = 0
total_accuracy = 0
with torch.no_grad():
for batch in iterator:
predictions = model(batch.text).squeeze(1)
loss = criterion(predictions, batch.label)
total_loss += loss.item()
predicted_labels = torch.round(torch.sigmoid(predictions))
accuracy = (predicted_labels == batch.label).sum().item() / len(predicted_labels)
total_accuracy += accuracy
avg_loss = total_loss / len(iterator)
avg_accuracy = total_accuracy / len(iterator)
return avg_loss, avg_accuracy
test_loss, test_accuracy = evaluate(model, test_iterator, criterion)
print(f"Test Loss: {test_loss:.4f}, Test Accuracy: {test_accuracy:.4f}")
در این قطعه کد، ابتدا فضای برداری برای متن و برچسبها تعریف میشود. سپس دادهها از مجموعه دادگان IMDB بارگیری میشوند. سپس دیتاست و دیتالودر برای آموزش و ارزیابی تعریف میشوند. سپس مدلی به نام MyModel تعریف میشود که از یک لایه توکنبندی، یک لایه مخفی و یک لایه خروجی تشکیل شده است. سپس مدل آموزش داده میشود و در نهایت بر روی دادههای آزمون ارزیابی میشود.
چگونه مدل بر روی دادههای آزمون ارزیابی میشود؟
فرآیند ارزیابی مدل بر مبنای دادههای آموزشی در قطعه کد بالا به شرح زیر است:
- ابتدا متد evaluate تعریف شده است که مدل را در حالت ارزیابی model.eval قرار میدهد. این کار باعث غیرفعال شدن عملیات بهروزرسانی پارامترهای مدل میشود.
- سپس متغیرهای total_loss و total_accuracy را برابر صفر قرار میدهیم. این متغیرها برای محاسبه میانگین هزینه و دقت در طول تمام دستهها استفاده میشوند.
- با استفاده از torch.no_grad، ما محاسبات را بدون محاسبه گرادیان انجام میدهیم. این کار باعث افزایش سرعت محاسبات و کاهش استفاده از حافظه میشود، زیرا در این مرحله ما به گرادیان برای بهروزرسانی پارامترها نیاز نداریم.
- سپس با استفاده از حلقه for بر روی دستههای دادههای آزمون (iterator) حرکت میکنیم. برای هر دسته، مدل ورودیها را به مدل میدهد و خروجیها را محاسبه میکند.
- سپس هزینه (loss) را با استفاده از معیار criterion محاسبه میکنیم و به متغیر total_loss اضافه میکنیم.
- برچسبهای پیشبینی شده را با استفاده از تابع سیگموئید (torch.sigmoid) به صورت دو گشتاور 0 و 1 تبدیل میکنیم و با برچسبهای واقعی مقایسه میکنیم. سپس دقت را محاسبه کرده و به متغیر total_accuracy اضافه میکنیم.
- پس از پایان حلقه، میانگین هزینه (avg_loss) و میانگین دقت (avg_accuracy) بر حسب تعداد دستهها محاسبه میشوند.
- در نهایت، مقادیر میانگین هزینه و میانگین دقت را به عنوان خروجی تابع evaluate برمیگردانیم.
Torchtext چه مزایایی دارد؟
همانگونه که اشاره کردیم، Torchtext یک کتابخانه مفید برای پردازش متن و پیشپردازش دادههای متنی در PyTorch است. این کتابخانه برای کار با دادههای متنی در پروژههای یادگیری ماشین و پردازش زبان طبیعی بسیار مناسب است و دارای مزایای زیر است:
- سهولت در پردازش دادههای متنی: Torchtext ابزارها و توابعی را ارائه میدهد که پیشپردازش، تمیزکاری و تبدیل دادههای متنی را ساده میکند. این ابزارها شامل پیشپردازش متن، توکنبندی، برچسببندی، تقسیم داده به دستهها، ساخت دیتاست و دیتالودر، مدیریت واژگان و بارگیری مجموعه دادگان معروف مانند IMDB، SST و WMT است.
- سازگاری با PyTorch: کتابخانه Torchtext به طور مستقیم با ساختار دادههای PyTorch سازگار است و اجازه میدهد تا دادههای متنی را به صورتی که مناسب برای آموزش شبکههای عصبی باشد، آماده کنید. این کتابخانه قابلیت تبدیل متن به بردارهای تعبیهشده (embedding vectors) را نیز دارد.
- یکپارچگی با نرمافزارهای پردازش زبان طبیعی: Torchtext تمامی قابلیتهای مربوط به پردازش زبان طبیعی را از جمله تبدیل پیشپردازش، ایجاد دیتاستها، استخراج ویژگیها و ارزیابی مدلها را ارائه میدهد. این کتابخانه با استفاده از ابزارهایی مانند توکنسازی و برچسببندیها، فرآیند پردازش زبان را ساده میکند.
- انعطافپذیری و تنوع: با استفاده از Torchtext، میتوانید به آسانی دادههای خود را در قالبهای مختلفی مانند CSV، TSV و JSON بارگیری کنید. همچنین میتوانید تنظیمات مختلفی را برای پیشپردازش دادهها و ساخت دیتاست انجام دهید.
- مدیریت واژگان: Torchtext به شما امکان میدهد واژگان مورد استفاده در دادههای متنی خود را بسازید و مدیریت کنید. این ویژگی به شما امکان میدهد تا برچسبها و متنها را به صورت عددی یا برداری نمایش دهید و از آنها در شبکههای عصبی استفاده کنید.
به طور خلاصه، Torchtext با ارائه ابزارها و توابعی برای پردازش متن و پیشپردازش دادههای متنی، انعطافپذیری و سهولت در کار با دادههای متنی را به کاربران PyTorch میدهد.
Torchtext چه معایبی دارد؟
در شرایطی که کتابخانه فوق مزایای خوبی در اختیار توسعهدهندگان قرار میدهد، اما معایبی نیز دارد. برخی از این معایب به شرح زیر هستند:
- پیچیدگی در استفاده: به کارگیری Torchtext ممکن است برای برخی افراد پیچیده و گیجکننده باشد، به ویژه برای افرادی که تازه وارد زمینه به دنیای پردازش زبان طبیعی و یادگیری ماشین هستند. کتابخانه دارای تعداد زیادی تابع و کلاس است و نیاز به آشنایی با مفاهیم پیشپردازش متنی دارد.
- محدودیت در پشتیبانی از فرمتهای داده: در حال حاضر Torchtext تنها قادر به بارگیری دادهها از فرمتهای CSV، TSV و JSON است. اگر دادههای شما در فرمت دیگری مانند XML قرار دارند، نیاز به تبدیل دادهها به یکی از فرمتهای قابل قبول توسط Torchtext خواهید داشت.
- کمبود قابلیتها در پردازش پیشرفته: در مواردی که نیاز به پیشپردازش پیچیدهتری برای دادههای متنی دارید، ممکن است با محدودیتهای Torchtext مواجه شوید. برای پردازش پیشرفتهتری مانند استفاده از تحلیل وابستگی، تحلیل معنایی، یا استفاده از شبکههای عصبی با ساختارهای متنوع، شاید نیاز به استفاده از کتابخانههای دیگری نیز داشته باشید.
- عدم بهروزرسانی مداوم: Torchtext در مقایسه با برخی از کتابخانههای دیگر ممکن است دارای نرخ بهروزرسانی کمتری باشد. این به معنای عدم پیگیری مداوم توسعه و بهبود کتابخانه است و ممکن است برخی از ویژگیها و بهبودهای جدید در نسخههای جدیدی از کتابخانه وجود نداشته باشد.
به طور خلاصه، با وجود مزایا و کاربردهای مفیدی که Torchtext ارائه میدهد، هنوز نکاتی همچون پیچیدگی استفاده، محدودیت در فرمتهای داده، کمبود قابلیتها در پردازش پیشرفته و عدم بهروزرسانی مداوم وجود دارد که هنگام استفاده از این کتابخانه باید مورد توجه قرار بگیرد.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟