کتابخانه fasttext در پایتون
fastText یک کتابخانه متنباز از فیسبوک است که برای یادگیری بردارهای کلمه (word embeddings) و دستهبندی متن (text classification) طراحی شده است. مزیتهای اصلی آن سرعت بالا، مصرف حافظه کم و توانایی مدیریت کلمههای خارج از واژهنامه (OOV) از طریق کار با زیرکلمهها (subwords) است. در این مقاله به کاربردهای عملی، نمونههای کد پایتون، نکات بهینهسازی و نکات ویژه برای زبان فارسی میپردازیم.
نصب و آمادهسازی
برای نصب نسخه رسمی پایتون از fastText کافی است:
pip install fasttextدر برخی سیستمها ممکن است نیاز به نصب build tools یا استفاده از wheelهای آماده باشد (مثلاً fasttext-wheel). پس از نصب میتوانید کتابخانه را import کنید.
قالب دادهها برای دستهبندی (Supervised)
برای آموزش مدل دستهبندی، هر سطر باید شامل متن و برچسبهای پیشفرض fastText با پیشوند __label__ باشد. مثال:
__label__sports بازی استقلال و پرسپولیس امروز برگزار شد
__label__politics جلسه وزرا درباره بودجه تشکیل شداین قالب ساده و سریع برای تولید دادههای آموزشی مناسب است.
مثال: آموزش مدل دستهبندی در پایتون
import fasttext
# آموزش مدل دستهبندی
model = fasttext.train_supervised(input="train.txt", epoch=25, lr=0.1, wordNgrams=2, thread=4)
# ذخیره مدل
model.save_model("model_ft.bin")
# پیشبینی
labels, probabilities = model.predict("امروز بازی مهمی داریم", k=3)
print(labels, probabilities)
# ارزیابی روی فایل تست
result = model.test("test.txt")
print("N:", result[0], "Precision:", result[1], "Recall:", result[2])در این کد، train_supervised مدل را با 25 دوره (epoch)، نرخ یادگیری 0.1 و n-gram برای کلمات آموزش میدهد. تابع predict لیبلها و احتمالها را برمیگرداند و test دقت و بازیابی را محاسبه میکند.
آموزش بردارهای کلمه (Unsupervised)
برای استخراج و استفاده از وکتورهای کلمه از متنهای بزرگ از train_unsupervised استفاده میشود (skipgram یا cbow):
model = fasttext.train_unsupervised(input="corpus.txt", model="skipgram", dim=300, epoch=5, minn=3, maxn=6)
vec = model.get_word_vector("کتاب")
neighbors = model.get_nearest_neighbors("کتاب", k=10)این مدل به دلیل استفاده از subwordها، قادر است وکتور معناداری برای کلماتی بسازد که در دادهٔ آموزش وجود نداشتهاند.
بارگذاری مدلهای پیشآماده
فیسبوک مدلهای از پیش آموزشدادهشده برای زبانهای مختلف را منتشر کرده است (مثل cc.fa.300.bin برای فارسی). میتوانید این فایلها را دانلود و با fastText بارگذاری کنید:
model = fasttext.load_model("cc.fa.300.bin")
v = model.get_word_vector("سلام")این مدلها برای پروژههای پردازش زبان طبیعی فارسی بسیار مفیدند و زمان توسعه را کاهش میدهند.
پیشپردازش مخصوص فارسی
- نرمالسازی حروف: ی/ک، أ/ا، همزهها و حروف ترکیبی را یکسان کنید.
- حذف یا استانداردسازی علائم نگارشی و ارقام در صورت لزوم.
- استفاده از توکنایزرهای مخصوص فارسی (مانند Hazm یا Parsivar) برای نتایج بهتر در مسأله دستهبندی.
fastText خود نیازمند توکنایزر پیچیده نیست، اما برای زبانهای با پیچیدگی صرفی و چسبیده (مثل فارسی)، توکنایزر کیفیت کلی را بهبود میبخشد.
پارامترهای کلیدی و نکات بهینهسازی
| پارامتر | توضیح |
|---|---|
| dim | ابعاد وکتورها؛ معمولاً 100 تا 300 |
| epoch | تعداد دورهای آموزش؛ افزایش آن باعث بهبود تا حدی میشود |
| lr | نرخ یادگیری؛ مقدار متوسط 0.05–0.5 |
| wordNgrams | استفاده از n-gram کلمهای برای اطلاعات ترکیبی (مهم در دستهبندی) |
| minn/maxn | طولهای زیرکلمه برای مدل skipgram (کمک به OOV) |
| thread | تعداد تردها برای تسریع آموزش |
برای مسائل دستهبندی، wordNgrams زیاد و epoch بیشتر معمولاً مفید است. برای بردارهای کلمه، dim و minn/maxn تأثیر قابل توجهی دارند.
مثال: استفاده از بردارهای پیشآموزش دیده در آموزش دستهبندی (Fine-tuning)
import fasttext
# آموزش دستهبندی با استفاده از بردارهای پیشآموزش دیده
model = fasttext.train_supervised(input="train.txt", epoch=20, lr=0.1, wordNgrams=2, pretrainedVectors="cc.fa.300.vec")پارامتر pretrainedVectors باعث میشود وزنهای اولیه از وکتورهای از پیش آموزشدیده بارگذاری شوند و آموزش supervised سریعتر همگرا شود.
مقیاسپذیری و نکات عملی برای پروژهها
- fastText برای دادههای بزرگ بسیار مناسب است و میتواند روی ماشینهای معمولی مدلهای قوی بسازد.
- برای سیستمهای تولیدی، مدلهای باینری (.bin) سریع بارگذاری میشوند و عملیات predict سریع است.
- در صورت نیاز به اینترپرسونال یا تفسیرپذیری بیشتر، میتوان از توابع get_nearest_neighbors برای بررسی معانی وکتورها استفاده کرد.
مقایسه اجمالی با کتابخانههای دیگر
در مقابل مدلهایی مثل Word2Vec یا GloVe، fastText مزیت اصلی زیرکلمهها را دارد که برای زبانهای چسبنده یا کلمات مشتقیافته اهمیت دارد. در کاربردهای دستهبندی سریع و کمهزینه، fastText معمولاً گزینهٔ مناسبی است.
نکات تکمیلی و منابع
- برای فارسی، دادههای بزرگ و نرمالسازی صحیح تاثیر زیادی بر کیفیت دارند.
- برای بهبود دقت دستهبندی در متنهای کوتاه از افزایش داده (data augmentation) و n-grams استفاده کنید.
- مستندات رسمی fastText و مجموعهٔ مدلهای پیشآموزشدیده در صفحهٔ GitHub رسمی قابل دسترسی است.
fastText ابزار ساده و قدرتمندی برای بسیاری از کاربردهای NLP است: از استخراج وکتورهای کلمه تا ساخت سیستمهای دستهبندی متن سریع و مقیاسپذیر. با رعایت نکات پیشپردازش مخصوص فارسی و تنظیم درست هایپرپارامترها میتوانید از آن در پروژههای صنعتی و پژوهشی بهرهمند شوید.
آیا این مطلب برای شما مفید بود ؟




