# پردازش زبان طبیعی فارسی برای spaCy کتابخانه‌ی spaCy هیچ‌گاه مدل آموزش‌دیده‌ای برای فارسی منتشر نکرده است و `spacy.blank("fa")` تنها یک توکن‌ساز و فهرست واژه‌های اضافه در اختیار می‌گذارد. این مخزن دو pipeline آموزش‌دیدهٔ فارسی را فراهم می‌کند که بر پایهٔ پیکرهٔ [UD_Persian-PerDT](https://github.com/UniversalDependencies/UD_Persian-PerDT) ساخته شده‌اند و مانند دیگر مدل‌های spaCy با pip نصب می‌شوند. ## بسته‌ها مدل `fa_dep_news_sm` دربردارندهٔ **tok2vec**، **برچسب‌گذار اجزای کلام**، **ریخت‌شناس**، **بن‌واژه‌یاب آموزش‌پذیر** و **تجزیه‌گر وابستگی** است. `fa_core_news_sm` همان اجزا به‌همراه **بازشناسی موجودیت‌های نام‌دار** را دارد. هر دو تحت لیسانس CC BY-SA ۴٫۰ منتشر شده‌اند. ```bash pip install https://huggingface.co/Phazel/fa_core_news_sm/resolve/main/fa_core_news_sm-3.8.0-py3-none-any.whl ``` ```python import spacy nlp = spacy.load("fa_core_news_sm") doc = nlp("محمدرضا شجریان در مشهد به دنیا آمد.") print(doc.ents) # (محمدرضا شجریان, مشهد) ``` بسته‌های منتشرشده روی Hugging Face: [`fa_core_news_sm`](https://huggingface.co/Phazel/fa_core_news_sm) · [`fa_dep_news_sm`](https://huggingface.co/Phazel/fa_dep_news_sm) · [`fa_ent_news_md`](https://huggingface.co/Phazel/fa_ent_news_md) · [`fa_core_news_lg`](https://huggingface.co/Phazel/fa_core_news_lg) · [`fa_dep_news_lg`](https://huggingface.co/Phazel/fa_dep_news_lg) · [`fa_ent_news_lg`](https://huggingface.co/Phazel/fa_ent_news_lg) · [`fa_core_news_trf`](https://huggingface.co/Phazel/fa_core_news_trf). جدول‌های بردار floret جداگانه: [`fa_floret_400k`](https://huggingface.co/Phazel/fa_floret_400k) · [`fa_floret_full_wiki`](https://huggingface.co/Phazel/fa_floret_full_wiki). ## کارایی ارزیابی با `spacy benchmark accuracy` روی بخش آزمون همان پیکره انجام شده است: | سنجه | `sm` | `md` | `lg` | `trf` | مرجع | | --- | --- | --- | --- | --- | --- | | `TOKEN_ACC` / `TOKEN_F` | ۹۹٫۹۶ / ۹۹٫۱۱ | ۹۹٫۹۶ / ۹۹٫۱۱ | ۹۹٫۹۶ / ۹۹٫۱۱ | ۹۹٫۹۶ / ۹۹٫۱۱ | | | `TAG_ACC` (XPOS) | ۹۵٫۹۶ | ۹۶٫۲۵ | ۹۶٫۵۵ | **۹۷٫۶۲** | | | `POS_ACC` (UPOS) | ۹۶٫۲۴ | ۹۶٫۶۴ | ۹۶٫۶۸ | **۹۷٫۶۳** | | | `MORPH_ACC` | ۹۶٫۲۹ | ۹۶٫۶۴ | ۹۶٫۷۰ | **۹۷٫۸۲** | | | `LEMMA_ACC` | ۹۷٫۹۱ | ۹۷٫۹۶ | **۹۸٫۰۸** | ۹۷٫۳۱ | | | `SENTS_F` | ۹۹٫۲۵ | **۹۹٫۲۸** | ۹۹٫۱۸ | ۹۷٫۳۵ | | | `DEP_UAS` | ۸۹٫۶۹ | ۹۰٫۵۲ | ۹۰٫۹۶ | **۹۳٫۸۷** | hazm+ParsBERT: ۹۲٫۴۶ | | `DEP_LAS` | ۸۵٫۱۵ | ۸۶٫۳۴ | ۸۶٫۶۰ | **۹۰٫۷۹** | hazm+ParsBERT: ۸۹٫۳۴ | | `ENTS_P` | ۷۷٫۶۷ | ۷۶٫۵۶ | ۸۱٫۵۱ | **۸۴٫۰۶** | | | `ENTS_R` | ۶۶٫۸۷ | ۷۲٫۹۵ | ۷۱٫۰۹ | **۸۱٫۷۶** | | | `ENTS_F` | ۷۱٫۸۷ | ۷۴٫۷۱ | ۷۵٫۹۴ | **۸۲٫۸۹** | | | سرعت (940MX، دستهٔ ۳۲) | ۱۰٬۲۳۵ | ۹٬۰۵۸ | ۹٬۲۱۵ | بخش توان عملیاتی | | | حجم بستهٔ نصب | ۱۳٫۵ مگابایت | ۶۸٫۵ مگابایت | ۲۳۵ مگابایت | ۶۰۸ مگابایت | | ردهٔ `trf` در همه‌جا جلو است مگر در واژه‌یابی و مرزبندی جمله، و تنها ردهٔ‌ای است که از مرجع `DEP_LAS` برابر ۸۹٫۳۴ عبور می‌کند. به کارت گرافیک نیاز دارد و مدل پایهٔ آن پروانهٔ مشخصی ندارد، پس قابل بازانتشار نیست (`docs/MODELS.md` بخش ۸). برچسب‌های موجودیت «نقره‌ای» هستند: از لایه‌ای در خود پیکره می‌آیند که با برچسب‌زن Beheshti-NER تولید و سپس دستی اصلاح شده است. بنابراین `ENTS_F` تا اندازه‌ای هم‌خوانی با آن برچسب‌زن را می‌سنجد؛ دیگر سنجه‌های جدول در برابر دادهٔ طلایی سنجیده شده‌اند. آموزش روی یک پردازندهٔ چهارهسته‌ای i5-7200U و بدون کارت گرافیک انجام شده است: ۱ ساعت و ۲۷ دقیقه برای اجزای نحوی و ۱۷ دقیقه برای NER. این دو اجرا مستقل‌اند و می‌توانند هم‌زمان انجام شوند. ## توان عملیاتی میانهٔ چند اجرای پیاپی `nlp.pipe` روی ۱۴۶ سند بخش آزمون PerDT (۲۳٬۸۲۵ توکن). تنها زمان خودِ `pipe` اندازه‌گیری شده و اجرای گرم‌کردن کنار گذاشته می‌شود. برای بازتولید: `python scripts/benchmark_throughput.py --gpu-id `؛ دادهٔ خام در `metrics/throughput-*.json` است. | رده | پردازنده i5-7200U | کارت 940MX | کارت Tesla T4 | | --- | ---: | ---: | ---: | | `sm` | ۵٬۴۸۴ | ۱۰٬۲۳۵ | | | `md` | ۵٬۴۰۸ | ۹٬۰۵۸ | | | `lg` | ۴٬۷۱۵ | ۹٬۲۱۵ | | | `trf` | ۱۸۷ | ۱٬۱۵۸ | ۸٬۳۲۰ | ردهٔ `trf` روی یک پردازنده ۲۹ برابر کندتر از `sm` است. عددهای T4 و Xeon از یک ماشین Colab می‌آیند، یعنی شتاب ۲۵ برابری. فاصلهٔ رده‌های پردازنده‌ای کمتر از ۱۵ درصد است، پس گلوگاه تجزیه‌گر و واژه‌یاب است نه جست‌وجوی tok2vec. پراکندگی اجراها روی لپ‌تاپ حدود ۱۰± درصد است. اجرای `trf` روی 940MX به نسخهٔ مشخصی از torch نیاز دارد؛ بخش ۹ از `docs/MODELS.md` را ببینید. گام‌های تبدیل پیکره، آموزش، ارزیابی و بسته‌بندی در [`project.yml`](project.yml) تعریف شده‌اند. توضیح بیشتر دربارهٔ گزینش پیکره و پروانه‌ها در [`docs/MODELS.md`](docs/MODELS.md) و شرح انگلیسی پروژه در [`README.md`](README.md) آمده است.