diff --git a/readme-train.md b/readme-train.md new file mode 100644 index 0000000..0c4fd03 --- /dev/null +++ b/readme-train.md @@ -0,0 +1,104 @@ + +# آموزش مدل NER فارسی با Flair + +این پروژه برای آموزش یک مدل تشخیص موجودیت‌های نامدار (NER) روی داده‌های حقوقی به زبان فارسی طراحی شده است. +کد موجود از کتابخانه **Flair** برای آموزش و ریزتنظیم (Fine-tune) مدل‌های مبتنی بر ترانسفورمر استفاده می‌کند. + +--- + +## ویژگی‌ها +- پشتیبانی از زبان فارسی +- استفاده از مدل‌های از پیش آموزش‌دیده (Pretrained Transformers) +- ذخیره نتایج آموزش و ارزیابی به صورت فایل +- قابلیت تست مدل آموزش‌دیده روی داده‌های جدید + +--- + +## پیش‌نیازها +قبل از اجرای کد، نیاز است پکیج‌های زیر نصب شده باشند: +```bash +pip install flair transformers torch +``` + +--- + +## تنظیمات اولیه +سه پارامتر اصلی آموزش در ابتدای کد تعریف شده‌اند: + +- **LEARNING_RATE**: نرخ یادگیری (مثال: `0.65e-4`) +- **MINI_BATCH_SIZE**: سایز مینی‌بچ (مثال: `8`) +- **MAX_EPOCHS**: حداکثر تعداد تکرار آموزش (مثال: `100`) + +--- + +## ساختار داده‌ها +داده‌ها باید در پوشه `./data/` قرار گیرند و فرمت آن به صورت ستونی (ColumnCorpus) باشد: +``` +token label +``` + +مثال: +``` +علی B-PER +به O +دادگاه B-ORG +رفت O +``` + +--- + +## متدهای اصلی + +### `main_train(model: str) -> bool` +- **ورودی**: نام مدل ترانسفورمر (مثل: `"HooshvareLab/bert-fa-base-uncased-ner-peyma"`) +- **خروجی**: مقدار بولین (موفقیت یا شکست) +- **عملکرد**: + 1. بارگذاری داده‌ها و آماده‌سازی فرهنگ برچسب‌ها + 2. بارگذاری و پیکربندی embeddingها + 3. ایجاد مدل NER با SequenceTagger + 4. آموزش مدل با استفاده از Flair ModelTrainer + 5. ذخیره مدل و نتایج آموزش + 6. تست مدل روی داده جدید + 7. ارزیابی عملکرد و محاسبه F1 + +--- + +## اجرای آموزش + +برای آموزش مدل، کافی است کد اصلی اجرا شود: +```bash +python train.py +``` + +مدل خروجی در پوشه `./taggers/` ذخیره خواهد شد. نام مدل شامل تاریخ و ساعت آموزش است. + +--- + +## سناریوی تست + +پس از پایان آموزش: +1. یک تست سریع روی یک ورودی ساده با استفاده از `inference.py` انجام می‌شود. +2. ارزیابی مدل با `evaluate_model.py` اجرا می‌شود. +3. نتایج در فایل `test-result.txt` ذخیره می‌گردد. + +--- + +## خروجی‌ها +- مدل آموزش‌دیده در پوشه `./taggers/` +- فایل `test-result.txt` شامل نتایج آموزش و ارزیابی +- لاگ آموزش برای رسم نمودار + +--- + +## نکات مهم +- این کد برای داده‌های **حقوقی** طراحی شده است اما می‌توان آن را روی سایر داده‌های فارسی نیز استفاده کرد. +- در صورت قطع آموزش، اجرای دوباره فرآیند باعث ایجاد مدل جدید با نام متفاوت می‌شود. +- برای بهبود نتایج، می‌توانید: + - نرخ یادگیری (Learning Rate) را تغییر دهید. + - سایز مینی‌بچ (Mini Batch Size) را بزرگ‌تر کنید. + - تعداد epochها را افزایش دهید. + +--- + +## توسعه‌دهندگان +این پروژه با هدف پردازش زبان طبیعی فارسی در حوزه حقوقی توسعه داده شده است. diff --git a/train.py b/train.py index 3a74a71..7bdf297 100644 --- a/train.py +++ b/train.py @@ -43,7 +43,7 @@ def main_train(model): #آدرس فایل دیتاست اینجا تنظیم شود corpus = ColumnCorpus(data_folder, columns, #train_file = 'peyma_train.txt') - train_file = 'DATASET140402_no_aref2.txt', # qavanin 36K tokens + train_file = 'DATASET140402_ref_org_filtered.txt', # qavanin 36K tokens # test_file = 'test_ds_new.txt', # test 110 sections - 6.7K #dev_file = 'dev split 2.txt' #max_sentence_length=500