و بالاخره بعد از مدت‌ها، نسخه جدید هضم

هضم، کتابخانه‌ای برای پردازش متون فارسی است که با زبان پایتون نوشته شده است. این کتابخانه در اواخر سال ۱۳۹۲ به صورت متن‌باز در گیت‌هاب منتشر شد. ما در شرکت روشن بسیار خرسندیم که برنامه‌نویسان و شرکت‌های تجاری متنوعی از این کتابخانه استفاده می‌کنند.

از زمان عرضه این محصول تا کنون بازخوردهای زیادی از کاربران دریافت کرده‌ایم و حالا قصد داریم توسعه این محصول را ادامه دهیم. در ادامه با تغییرات مهم آخرین نسخه هضم آشنا می‌شویم.

سازگاری با ویندوز

هضم تا پیش از نسخه ۰.۹، برای برخی از ماژول‌ها مانند POSTagger‍ وابسته به کتابخانه دیگری به اسم wapiti بود که متأسفانه با ویندوز سازگار نبود و این موضوع کاربران ویندوز را مجبور به استفاده از WSL یا ماشین مجازی می‌کرد. خوشبختانه در نسخه ۰.۹ با کمک کتابخانه python-crfsuite این مشکل برطرف شد و از این پس کاربران می‌توانند از هضم به صورت مستقیم روی ویندوز استفاده کنند.

برای سازگاری با کتابخانه جدید، بایستی تغییراتی در SequenceTagger, IOBTagger, Chunker داده می‌شد و مدل‌های جدیدی آموزش داده می‌شد. این کار انجام شد و نهایتاً بعد از آموزش ده‌ها مدل و مقایسه دقت این مدل‌ها، دقیق‌ترین مدل در اختیار شما قرار گرفته است.

اضافه‌شدن مستندات

در نسخه‌های قبلی هضم، مستندات خوبی وجود نداشت و این یک فقدان جدی بود. در نسخه ۰.۹ سعی کردیم بسیاری از ماژول‌ها، کلاس‌ها و توابع را به همراه مثال‌هایی از شیوه استفاده از آن‌ها مستندسازی کنیم.

همچنین بخشی از مستندات را به کاربردهای هضم اختصاص داده‌ایم که به صورت عملی و مرحله به مرحله به شما نشان می‌دهد چگونه از هضم برای کاربردهای مختلف استفاده کنید.

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

ارتقاء به پایتون ۳ و بازنویسی کدها

تصمیم گرفتیم به دلیل منسوخ شدن پایتون ۲، پشتیبانی از این نسخه را متوقف کنیم و حداقل نسخه مورد نیاز برای نصب هضم را پایتون ۳.۸ قرار دهیم.

اکنون بخش زیادی از کدهای هضم با کمک آخرین قابلیت‌های پایتون ۳.۸ بازنویسی شده است که به معنی سادگی و خوانایی بیشتر کدهاست. این کار علاوه بر تسهیل استفاده از ابزارهای جدید در توسعه بهتر پروژه، فرایند مشارکت در توسعه پروژه را آسان‌تر می‌کند و ناسازگاری هضم با کتابخانه‌های دیگر را کاهش می‌دهد.

استفاده از برچسب‌های جهانی

هضم در نسخه ۰.۹ از برچسب‌های جهانی استفاده می‌کند. برچسب‌های جهانی یا یونیورسال با هدف هماهنگی نشانه‌گذاری‌ها در زبان‌های مختلف معرفی شده است و بسیاری از کتابخانه‌های معروف مثل NLTK در نسخه‌های جدید از این برچسب‌ها پشتیبانی می‌کنند.

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

در نسخه جدید POSTagger علاوه بر برچسب‌‌گذاری یونیورسال، کسره اضافه نیز با تگ EZ و با دقت ۹۸.۳% مشخص می‌شود. کسره اضافه یا به‌طور دقیق‌تر نشانه اضافه در کلماتی مثل «کتابِ من» با اینکه جایگاهی صوری در صورت‌بندی زبانی ندارد اما نقش مهمی در درک معنای جمله دارد.

افزایش دقت تحلیل صرفی و تجزیه سطحی

استفاده از مدل جدید CRF باعث افزایش دقت مدل‌های تحلیل صرفی و تجزیه سطحی شد. همچنین استفاده از برچسب‌گذاری یونیورسال، تحلیل صرفی را آسان‌تر کرد. به این ترتیب، دقت تحلیل صرفی از ۹۷.۱٪ به ۹۸.۸٪ و دقت تجزیه سطحی از ۸۹.۹٪ به ۹۳.۴٪ رسید.

بازنمایی واژه‌‌ها و جملات

با استفاده از بازنمایی‌های از پیش آموزش دیده روی پیکره‌های عظیم متنی، می‌توان شبکه‌های عمیق را بهتر آموزش داد و این بازنمایی‌ها می‌تواند دقت تحلیل‌های متنوع زبانی را افزایش دهد. ماژول جدید امبدینگ که دربردارنده دو کلاس WordEmbedding و SentEmbedding است با همین هدف به هضم اضافه شده است.

ما امبدینگ‌های زیادی را با کتابخانه‌های جنسیم و فست‌تکست آموزش دادیم و از بین آن‌ها بهترین مدل را در اختیار شما قرار داده‌ایم. این مدل‌ها را می‌توانید از صفحه معرفی هضم در گیت‌هاب دریافت کنید.

بهبود نرمال‌سازی نوشته‌ها

در این نسخه از هضم، نرمال‌سازی نوشته‌ها با دقت بیشتری انجام می‌گیرد و مشکلات نوشتاری بیشتری پوشش داده شده است. در ادامه تغییرات نسخه جدید را مرور می‌کنیم:

اولین تغییر، افزوده شدن تعداد کاراکترهای غیراستاندارد از ۴ کاراکتر به ۴۰۰ کاراکتر است. این یعنی هضم اکنون می‌تواند ۴۰۰ کاراکتر غیراستاندارد را اصلاح کند.

دومین تغییر، اضافه‌شدن الگوهای ریجکس جدیدی است که می‌تواند «ه» چسبان را در کلماتی مثل «شنبهها» به «شنبه‌ها» تبدیل کند، نیم‌فاصله‌های غیرضروری را در ابتدا و انتهای کلمات یا بعد و قبل از فاصله حذف کند یا ترکیب حروف و اعداد را در عباراتی مثل «۱۰تا۱۵کیلومتر» اصلاح کند و به شکل صحیح «۱۰ تا ۱۵ کیلومتر» تبدیل کند.

سومین تغییر، اضافه‌شدن پارامترهای جدیدی به Normalizer برای پوشش‌دهی حالت‌های بیشتری برای نرمال‌سازی است. پارامتر seprate_mi، پیشوندهای «می» و «نمی» را در کلماتی مثل «میخوانم» و «نمیخوانم» به شکل صحیح نیم‌جدا یعنی «می‌خوانم» و «نمی‌خوانم» اصلاح می‌کند. پارامتر unicodes_replacement کاراکترهای خاص یونیکد مثل ﷽، ﷼، ﷴ را به شکل مرسوم تایپی تبدیل می‌کند. پارامتر remove_specials_chars کاراکترهایی مثل ﷺ ۝۞ را که معمولاً ارزشی در پردازش متن ندارند حذف می‌کند. پارامتر decrease_repeated_chars تلاش می‌کند تکرارهای غیرضروی حروف را در کلماتی مثل «سلاممممممم» کاهش دهد.

آخرین تغییر، حذف پارامتر غیرضروری token_based و جایگزین‌کردن پارامتر‌های remove_extra_spaces, affix_spacing و punctuation_spacing با تک پارامتر correct_spacing برای سهولت استفاده از Normalizer است.

اصلاح مشکلات گزارش‌شده

در طول این سال‌ها، ایشوها و پول‌ریکوئست‌های زیادی تلنبار شده بود و متأسفانه فرصت کافی برای رسیدگی به آن‌ها وجود نداشت. در نسخه ۰.۹ تمام این موارد بررسی و تعیین تکلیف شدند.

سایت هضم

مستندات هضم