spacy-fa-pipeline/README.fa.md

6.4 KiB
Raw Blame History

پردازش زبان طبیعی فارسی برای spaCy

کتابخانه‌ی spaCy هیچ‌گاه مدل آموزش‌دیده‌ای برای فارسی منتشر نکرده است و spacy.blank("fa") تنها یک توکن‌ساز و فهرست واژه‌های اضافه در اختیار می‌گذارد. این مخزن دو pipeline آموزش‌دیدهٔ فارسی را فراهم می‌کند که بر پایهٔ پیکرهٔ UD_Persian-PerDT ساخته شده‌اند و مانند دیگر مدل‌های spaCy با pip نصب می‌شوند.

بسته‌ها

مدل fa_dep_news_sm دربردارندهٔ tok2vec، برچسب‌گذار اجزای کلام، ریخت‌شناس، بن‌واژه‌یاب آموزش‌پذیر و تجزیه‌گر وابستگی است. fa_core_news_sm همان اجزا به‌همراه بازشناسی موجودیت‌های نام‌دار را دارد. هر دو تحت لیسانس CC BY-SA ۴٫۰ منتشر شده‌اند.

pip install https://huggingface.co/Phazel/fa_core_news_sm/resolve/main/fa_core_news_sm-3.8.0-py3-none-any.whl
import spacy
nlp = spacy.load("fa_core_news_sm")
doc = nlp("محمدرضا شجریان در مشهد به دنیا آمد.")
print(doc.ents)   # (محمدرضا شجریان, مشهد)

بسته‌های منتشرشده روی Hugging Face: fa_core_news_sm · fa_dep_news_sm · fa_ent_news_sm · fa_core_news_md · fa_dep_news_md · fa_ent_news_md · fa_core_news_lg · fa_dep_news_lg · fa_ent_news_lg · fa_core_news_trf. جدول‌های بردار floret جداگانه: fa_floret_400k · 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 <model> --gpu-id <n>؛ دادهٔ خام در 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 تعریف شده‌اند. توضیح بیشتر دربارهٔ گزینش پیکره و پروانه‌ها در docs/MODELS.md و شرح انگلیسی پروژه در README.md آمده است.