spacy-fa-pipeline/README.fa.md

5.9 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)   # (محمدرضا شجریان, مشهد)

کارایی

ارزیابی با 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 نسبت به پردازندهٔ همان ماشین (۳۳۶ واژه بر ثانیه) ۲۵ برابر سریع‌تر، پس کارت گرافیک برای آن یک نیاز است نه بهینه‌سازی. حتی کارت ۲ گیگابایتی 940MX هم ۶٫۲ برابر سریع‌تر از پردازندهٔ همان دستگاه است و دستهٔ ۳۲ را بدون کمبود حافظه اجرا می‌کند، اما به نسخهٔ cu126 از torch نیاز دارد، چون هستهٔ sm_50 از نسخه‌های cu128/cu129 در ۲٫۸ حذف شده است. فاصلهٔ رده‌های پردازنده‌ای کمتر از ۱۵ درصد است، یعنی گلوگاه جست‌وجوی tok2vec نیست بلکه تجزیه‌گر و واژه‌یاب است. پراکندگی اجراها روی لپ‌تاپ حدود ۱۰± درصد است.

گام‌های تبدیل پیکره، آموزش، ارزیابی و بسته‌بندی در project.yml تعریف شده‌اند. توضیح بیشتر دربارهٔ گزینش پیکره و پروانه‌ها در docs/MODELS.md و شرح انگلیسی پروژه در README.md آمده است.