در این مطلب، روش پردازش زبان های غیر انگلیسی با پایتون همراه با انجام یک مثال، مورد بررسی قرار گرفته است. در واقع، این نوشتار راهنمایی برای آخرین کتابخانه استنفورد، یعنی StanfordNLP است. برای درک بهتر مطلب، پیاده‌سازی‌هایی نیز بر اساس وظایف «پردازش زبان طبیعی» (Natural Language Processing | NLP)، در «زبان برنامه‌نویسی پایتون» (Python Programming Language) انجام شده است. در نهایت نیز یک بررسی موردی جالب، به عنوان مثالی از چگونگی پردازش زبان‌های طبیعی غیر انگلیسی به طور کامل انجام شده است.

پردازش زبان های غیر انگلیسی با پایتون

یکی از چالش‌های متداولی که افراد ضمن فراگیری پردازش زبان طبیعی با آن مواجه هستند، این است که آیا می‌توانند برای زبان‌های غیر انگلیسی مدل بسازند؟ پاسخ این پرسش تا چندی پیش «خیر» بود. نباید فراموش کرد که هر زبانی دارای الگوهای گرامری و تفاوت‌های زبانی خاص خود است. در اینجا است که پای آخرین کتابخانه پردازش زبان طبیعی استنفورد یعنی StanfordNLP به میان می‌آید. توسعه‌دهندگان این کتابخانه ادعا کرده‌اند که StanfordNLP از ۵۳ زبان زنده دنیا پشتیبانی می‌کند. StanfordNLP حاوی مدل‌های از پیش آموزش داده شده برای زبان‌های آسیایی مانند هندی، چینی و ژاپنی برای اسکریپت‌های اصلی آن‌ها است.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

StanfordNLP چیست و چرا باید از آن استفاده کرد؟

StanfordNLP یک مجموعه از ابزارهای از پیش آموزش داده شده لبه علم است. این مدل‌ها توسط پژوهشگران در رقابت‌های سال ۲۰۱۷ و ۲۰۱۸ CoNLL مورد استفاده قرار گرفتند. همه مدل‌ها بر پایه کتابخانه «پای‌تورچ» (PyTorch) ساخته شده‌اند و قابل آموزش دادن و ارزیابی شدن روی داده‌های مورد نظر کاربر هستند.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

علاوه بر آن، StanfordNLP حاوی یک پوشش دهنده رسمی برای کتابخانه محبوب پردازش زبان طبیعی یعنی CoreNLP است. کتابخانه CoreNLP تاکنون محدود به اکوسیستم جاوا بوده است.

راه‌اندازی StanfordNLP در پایتون

چند نکته جالب پیرامون کتابخانه StanfordNLP وجود دارد که ممکن است کمی گیج کننده به نظر بیاید. برای مثال، یکی از این موارد نیاز به پایتون ۳.۶.۸/۳.۷.۲ یا جدیدتر برای استفاده همراه با StanfordNLP است. ضمن نوشتن این مطلب و برای اطمینان، یک محیط مجزا در «توزیع پایتون آناکوندا» (Anaconda Python Distribution) برای پایتون ۳.۷.۱ راه‌اندازی شده است. چگونگی انجام این کار، در ادامه شرح داده شده است.

۱. پرومت کوندا باز و دستور زیر در آن تایپ می‌شود.

۲. اکنون، محیط باید فعال می‌شود.

۳. نصب کتابخانه StanfordNLP با استفاده از دستوری که در ادامه آمده است انجام می‌شود.

۴. نیاز به دانلود زبان خاص مدل برای کار کردن با آن است. در این راستا، یک شل پایتون راه‌اندازی و StanfordNLP وارد (ایمپورت | Import) می‌شود.

5. سپس، مدل زبانی برای انگلیسی «en» دانلود می‌شود.

این کار، بسته به سرعت اینترنت کاربر، کمی زمان‌بر است. باید توجه داشت که این مدل‌های زبانی فوق‌العاده زیاد هستند (نسخه انگلیسی ۱.۹۶ گیگابایت است).

نکات مهم پیرامون کار با کتابخانه StanfordNLP

StanfordNLP بر فراز PyTorch 1.0.0 ساخته شده است. بنابراین، در صورتی که کاربر نسخه‌ای پایین‌تر از این را نصب داشته باشد، امکان از کار افتادن آن وجود دارد. در ادامه، کد لازم برای بررسی نسخه‌ای از کتابخانه که روی سیستم کاربر نصب شده، بیان شده است.

خروجی قطعه کد بالا باید به صورت torch==1.0.0 باشد.

نکته: نویسنده این مطلب از کتابخانه StanfordNLP بدون GPU، روی لنوو ثینک‌پد E470 (هشت گیگ رم، گرافیک اینتل) استفاده کرده و به سرعت، با خطای حافظه در پایتون مواجه شده است. بنابراین، به ماشین با GPU فعال تغییر حالت داده و پیشنهاد می‌کند که دیگران نیز این کار را کنند. می‌توان از گوگل کُلَب (Google Colab) استفاده کرد که با پشتیبانی رایگان از GPU را ارائه می‌دهد. در ادامه، به برخی از پردازش‌های پایه‌ای پردازش زبان طبیعی (NLP) پرداخته می‌شود.

استفاده از StanfordNLP برای انجام وظایف پایه‌ای پردازش زبان طبیعی

۱. کار با ساخت یک پایپ‌لاین متنی آغاز می‌شود.

آرگومان processors = “”‎ برای تعیین یک وظیفه مورد استفاده قرار می‌گیرد. اگر هیچ آرگومانی پاس داده نشود، همه پنج پردازش‌گر به صورت پیش‌فرض گرفته می‌شوند.

توکن‌سازی

این فرایند به صورت ضمنی و هنگامی اتفاق می‌افتد که پردازش‌گر توکن در حال اجرا است. در واقع این کار به سرعت انجام می‌شود. می‌توان با استفاده از print_tokens()‎ نگاهی به توکن‌ها داشت.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

شی توکن، حاوی اندیس توکن در جمله و یک لیست از اشیای کلمه است (در شرایطی که از توکن چند کلمه‌ای استفاده شود). هر شی کلمه حاوی اطلاعات مفیدی مانند اندیس کلمه، lemma متن، تگ pos (اجزای کلام) و تگ feat (ویژگی صرفی) است.

Lemmatization

این مورد، شامل استفاده از خصوصیت «lemma» کلمات تولید شده به وسیله پردازش‌گر lemma است. در اینجا، کدی برای به دست آوردن lemma همه کلمات ارائه شده است.

این کد، برای ارائه هر کلمه و lemma متعاقب آن در خروجی، از چارچوب داده «کتابخانه پانداس» (Pandas) استفاده می‌کند.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

تگ اجزای کلمه (pos)

تگ‌گذار PoS  نسبتا سریع است و به خوبی در زبان‌های گوناگون کار می‌کند. درست مانند lemmas، استخراج تگ pos نیز ساده است.

دیکشنری بزرگ استفاده شده در کد بالا، قابل توجه است. آنچه انجام شده صرفا یک نگاشت بین تگ PoS و معنای آن‌ها است. این کار کمک می‌کند تا درک بهتری از ساختار syntactic مستندات به دست بیاید. خروجی یک چارچوب داده با سه ستون pos ،word و exp (توضیحات | explanation) است.

ستون توضیحات، اطلاعاتی پیرامون متن را ارائه می‌کند و بنابراین، بسیار مفید است. افزودن ستون توضیحات، ارزیابی اینکه عملکرد پردازشگر چقدر صحیح است را دشوار می‌کند. این حقیقت که تگ‌گذار برای اکثریت کلمات on point است، اتفاق خوبی محسوب می‌شود. این تگ، حتی ده‌ها کلمه را صرف نظر از اینکه به صورت پایه یا جمع هستند، انتخاب می‌کند.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

استخراج وابستگی

استخراج ویژگی دیگر ویژگی جالب توجه StanfordNLP است. کاربر می‌تواند به سادگی print_dependencies()‎ را روی جمله برای گرفتن ارتباطات وابستگی‌ها برای همه کلمات فراهم کند.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

کتابخانه همه کلمات بالا را در طول یک اجرای منفرد پایپ‌لاین محاسبه می‌کند. این کار روی یک سیستم با GPU فعال، زمانی بسیار کم و در حد چند دقیقه از کاربر می‌گیرد. اکنون، مشخص می‌شود که چگونه پردازش‌های متنی پایه با StanfordNLP انجام شود. به نظر می‌رسد که در این وهله، زمان استفاده از مزایای این قابلیت که می‌توان از این کتابخانه برای ۵۱ زبان دیگر نیز استفاده کرد، فرا رسیده است.

پیاده‌سازی StanfordNLP روی زبان هندی

StanfordNLP حقیقتا به خاطر کارایی و تجزیه متن چند زبانه یکه‌تاز است. اکنون، نگاهی عمیق‌تر به این ویژگی کتابخانه مذکور انداخته می‌شود.

پردازش متن هندی (دیواناگری)

ابتدا، باید مدل زبان هندی را دانلود کرد (به طور قابل ملاحظه‌ای کوچک‌تر است).

اکنون، بخشی از یک متن هندی به عنوان مستندات متنی به مدل داده می‌شود.

این مورد برای تولید همه تگ‌ها کافی است. در ادامه، تگ‌ها برای زبان هندی مورد بررسی قرار می‌گیرند.

پردازش زبان های غیر انگلیسی با پایتون -- راهنمای کاربردی

تگ کننده PoS به طرز شگفت‌انگیزی روی متن هندی خوب کار می‌کند. برای مثال، می‌توان «अपना» را در نظر داشت.

استفاده از رابط برنامه‌نویسی کاربردی CoreNLP’s برای تحلیل متن

CoreNLP یک جعبه ابزار آزموده شده و ابزار NLP سطح صنعتی است که به خاطر کارایی و صحت خود، شناخته شده است. StanfordNLP سه خط کد را برای شروع به استفاده از رابط برنامه‌نویسی کاربردی پیچیده CoreNLP’s نیاز دارد. به معنای واقعی کلمه، فقط و فقط به سه خط کد نیاز دارد.

۱. بسته CoreNLP باید دانلود شود. برای این کار، باید ترمینال لینوکس را باز و دستور زیر را وارد کرد.

۲. بسته دانلود شده را باید از حالت زیپ خارج کرد.

۳. CoreNLP باید شروع شود.

نکته: CoreNLP برای اجرا شدن نیاز به Java8 دارد. باید اطمینان حاصل کرد که JDK و JRE 1.8.x نصب شده‌اند.

اکنون، باید اطمینان حاصل کرد که StanfordNLP می‌داند که CoreNLP کجا ظاهر شده است. برای این کار، باید $CORENLP_HOME‎ به عنوان موقعیت  پوشه شما ثبت شود. در بسیاری از موارد، این پوشه در خود خانه وجود دارد، بنابراین، مسیر چیزی شبیه زیر خواهد بود.

پس از انجام مراحل بالا، می‌توان سرور را راه‌اندازی کرد و درخواست‌هایی را در کد پایتون داد. در ادامه، مثالی جامع از چگونگی راه‌اندازی یک سرور، ایجاد درخواست و دسترسی به داده‌ها از یک شی برگشت داده شده بیان شده است.

تنظیم CoreNLPClient

کد لازم برای تنظیم CoreNLPClient در ادامه آمده است.

تجزیه وابستگی‌ها و POS

تشخیص موجودیت‌های نام‌دار و زنجیره‌های هم‌ارجاع (Co-Reference)

سهولت استفاده و دسترسی‌پذیری بالا هنگام استفاده از CoreNLP در پایتون، بسیار جالب توجه است.

نکاتی پیرامون استفاده از StanfordNLP

چند نکته پیرامون کار با StanfordNLP وجود دارد که اشاره به آن‌ها خالی از لطف نیست.

  • کتابخانه StanfordNLP از چندین زبان پشتیبانی می‌کند.
  • StanfordNLP رابط رسمی پایتون برای CoreNLP است و این یعنی، به مرور و با گذر زمان، کارکرد و سهولت استفاده از آن بهبود پیدا می‌کند.
  • به طور مناسبی سریع است (مانع ردپای زیاد حافظه می‌شود).
  • راه‌اندازی کتابخانه StanfordNLP در پایتون آسان است.

همچنین، در موارد زیر نیز به نظر می‌رسد که StanfordNLP نیازمند بهبود است.

  • اندازه مدل زبانی آن بسیار بزرگ است (انگلیسی ۱.۹ گیگابایت، چینی ۱.۸ گیگابایت).
  • کتابخانه نیازمند کد زیادی برای به دست آوردن ویژگی‌ها است. این مورد با NLTK قابل مقایسه است که می‌توان با استفاده از آن، یک نمونه اولیه را اسکریپت‌نویسی کرد. این کار احتمالا با StanfordNLP امکان‌پذیر نیست.
  • از ویژگی‌های بصری‌سازی نیز بهره نمی‌برد. برای توابعی مانند تجزیه وابستگی، این ویژگی بسیار مفید است. متأسفانه باید گفت که در این زمینه، StanfordNLP، در مقایسه با کتابخانه‌های همچون SpaCy کم می‌آورد.

جمع‌بندی

به وضوح مشخص است که StanfordNLP در حال حاضر در مرحله بتا قرار دارد. البته که استفاده از آن بسیار مفید است. در حال حاضر، جعبه ابزارهای فوق‌العاده‌ای (CoreNLP) به اکوسیستم پایتون آمده و غول‌های پژوهشی و توسعه مانند استنفورد نیز تلاش‌های برای ارائه نرم‌افزارهای خود متن‌باز دارند و این موضوع به خودی خود، اتفاق مثبتی است.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

telegram
twitter

الهام حصارکی

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *