امروزه به دلیل استفاده گسترده از رسانه های اجتماعی، حجم وسیعی از داده های متنی در اینترنت در دسترس است. اطلاعات ارزشمندی را می توان از طریق پردازش زبان طبیعی از این داده ها استخراج کرد. اگرچه، فرآیند استخراج اطلاعات به دلیل فرم های غیررسمی این متون می تواند دشوار باشد.
سیستم باید بتواند متن انگلیسی رسمی را با توجه به فرم غیررسمی آن تولید کند. متن غیررسمی می تواند هر چیزی باشد، از یک توییت تصادفی گرفته تا عصاره کمیک. متن رسمی باید از نظر نحوی معنای درستی داشته باشد که همتای غیررسمی آن در نظر گرفته شده است. باید بتواند دستور زبان، علائم نگارشی و در صورت امکان حتی حروف بزرگ را تصحیح کند.
متن غیررسمی به متن با اختصارات و کلمات غلط املایی زیادی اشاره دارد. از این رو، اصلاح این سخنان برای نظام ضروری است. سیستم باید بتواند متن را در زمان واقعی با توجه به شکل غیررسمی آن تولید کند تا از مشکلات تأخیر جلوگیری شود. همچنین، در تلاش برای تولید متن صحیح از نظر گرامری، نباید معنای متن زیربنایی را تغییر دهد زیرا ممکن است برای کار در دست اقدام معکوس کند.
در حالی که پیشرفتهای فنآوری تحقیق در پردازش زبان طبیعی را سرعت بخشیده است، اما عمدتاً بر روی کارهایی مانند جاسازی کلمات و ترجمه ماشینی طبیعی متمرکز شده است. در نتیجه، رسمیسازی متن بهعنوان یک کاربرد NLP، هنوز در مرحله نوپایی خود قرار دارد.[1]
خطاهای متون تایپ شده به دو گروه اصلی دسته بندی می شوند: خطاهای غیر کلمه ای و خطاهای کلمه ای واقعی [2]. خطاهای غیرکلمه ای یا غلط املایی کلمات زمانی رخ می دهد که یک کلمه بخشی از دامنه کلمه زبان نباشد [3].
در این مورد از غلطگیر املا استفاده میشود. یک غلطگیر املایی معمولاً دو کار اصلی را انجام میدهد: بررسی اینکه آیا یک کلمه در فرهنگ لغت وجود دارد یا خیر و یافتن بهترین جایگزین برای کلمات غلط املایی به طور خودکار برای اصلاح غلط.
چهار عملیات اساسی برای یافتن شکل صحیح کلمات غلط املایی معرفی شده است. آنها به شرح زیر فهرست شده اند:
جایگزینی: در این حالت به جای حرف دیگری حرفی تایپ می شود. مثلاً «خونه/ «xuːne/ (خانه) به جای «خانه/ »xɒne/
درج: در این حالت یک یا چند حرف به یک کلمه اضافه می شود. این ممکن است با فشار دادن کلیدهای اضافی روی صفحه کلید اتفاق بیفتد. به عنوان مثال، "اون /"uːn/ به جای «آن/ «aːn/ .
حذف: زمانی اتفاق می افتد که یک یا چند حرف از یک کلمه حذف شود. مثلاً «خاهر/ «xɒhær/ به جای «خواهر/ «xɒhær/ (خواهر).
تبادل: معمولا زمانی اتفاق می افتد که دو حرف مجاور یک کلمه به ترتیب معکوس نوشته شوند. مثلاً «قلف/ «Gʊlf/ به جای «قفل/»Gʊfl/ (قفل).
زبان فارسی ویژگی های خاصی دارد که پردازش زبان را دشوار می کند. مهمترین ویژگی های زبان فارسی عبارتند از:
- بسیاری از مصوت ها در فارسی نوشته نمی شوند.
- فارسی از حروف همفون استفاده می کند، یعنی حروف با تلفظ یکسان، اشکال نوشتاری متفاوتی دارند. مثلاً «ص، س، ث» صدای /s/ دارند.
- فارسی از حروف هم شکل استفاده می کند، یعنی حروفی با اشکال نوشتاری متفاوت بسته به موقعیت آنها در یک کلمه. به عنوان مثال حرف «ک/» ک/ که شکل اولیه «ک/»ک/، شکل میانی «ک/»ک/ و شکل مجزا «ک/»ک/ دارد.
- فارسی واژه هایی دارد که به یک شکل نوشته شده اند، اما معانی متفاوتی دارند و نقش نحوی متفاوتی دارند، مثلاً «شیر» که می تواند در زمینه های مختلف «شیر»، «شیر» و «شیر» دلالت کند.
- فارسی افعال پیچیده زیادی دارد و گاهی ممکن است این افعال معانی کاملاً متفاوتی از اجزای جداگانه خود داشته باشند.
- فارسی یک زبان با ترتیب آزاد کلمات است. این بدان معنی است که یک جمله را می توان به روش های مختلف نوشت و ترتیب فاعل، صفت و فعل را می توان تغییر داد در حالی که جمله از نظر دستوری صحیح باقی می ماند.
- گاهی ممکن است زبان فارسی از نظر تعداد، بین فاعل و فعل مطابقت نداشته باشد. به عنوان مثال، استفاده از افعال جمع برای فاعلهای مجرد برای نشان دادن احترام معمول است.
- یکی از مشکلات اصلی در پردازش زبان فارسی فاصله گذاری است. سه نوع مختلف فاصله وجود دارد که کاربران اغلب از آنها به درستی استفاده نمی کنند، به خصوص در متون غیر رسمی.
- اشتباهات در متون غیررسمی پیچیده تر از اشتباهات در متون رسمی است زیرا کلمات به شدت تغییر می کنند.
میتوان از قوانین تبدیل برای یافتن بهترین نامزدهای کلمات غیر رسمی یا غلط املایی استفاده کرد. این قوانین به ما کمک میکند تا با تغییر حروف کلمات غیررسمی، کلمات غیررسمی را به نسخه رسمی تبدیل کنیم. هنگامی که یک کلمه غلط املایی شناسایی شد، قانون مربوط به دسته آن غلط املایی اعمال شده و لیستی از نامزدها ایجاد میشوند. سپس این نامزدها امتیازدهی و مرتب میشوند.
1. خطاهای ناشی از تغییر یک یا دو حرف در شکل غیر رسمی نوشتاری. این نوع خطاها در موارد مختلف مانند تغییر مصوت های یک کلمه در یک بافت غیررسمی رخ می دهد، مانند "شونه / "ʃuːna / که شکل رسمی "شانه / "ʃɒne / (شانه) است. همچنین هنگام تغییر ضمایر از شکل رسمی به غیر رسمی رخ می دهد. خطاهای ناشی از تغییر فعل copula متعلق به این دسته است، به عنوان مثال، «خوبیه/»xuːbɪje/ (خوب است)، یا «مردترن /mærdtæræn/ (آقایان هستند)، که در آن حروف «ه»/e. / و "ن/ "n/ در کلمات نشان دهنده افعال جفت "است/ "æst/(is) و "هستند/"hæstænd/ (are)تغییر یافتهاند.
2. 2. خطاهای نوع دوم مربوط به تغییرات شدیدی است که بیش از دو خطا را تحت تأثیر قرار می دهد، مانند «میگن/»mɪgæn/ با شکل رسمی «میگویند / «mɪguːjænd/ (می گویند)
3. 3. کلمات غیررسمی که معادلهای رسمی آنها کلمات کاملاً متفاوتی هستند، به عنوان مثال، "ورا اون/ "uːn værɒ/ که "ورا" در نسخه رسمی وجود ندارد و جایگزین رسمی باید "اطراف/"ætrɒf/ (حدود) باشد.
تجزیه و تحلیلها[1] نشان داد که بیشتر خطاهای متون مربوط به دسته اول است. تبدیل اولین گروه از کلمات غیر رسمی به کلمات رسمی شبیه به املا است. این بدان معنی است که ما می توانیم یک سیستم مبتنی بر غلط گیر املا توسعه دهیم.
رویکرد تبدیل کلمات غیررسمی فارسی به کلمات فارسی رسمی با دقت بالا:
برای رسیدگی به خطاهای دسته اول فهرستی از نامزدهای مناسب برای کلمه غیررسمی مربوطه تهیه می شود. لازم به ذکر است که فاصله از حروف الفبا در نظر گرفته می شود و خطای مربوط به آن در این دسته قرار می گیرد. در این مرحله تگ های POS کلمات برای یافتن بهترین کلمات رسمی مرتبط در نظر گرفته می شوند. بر این اساس، می توان بزرگترین قسمت یک کلمه غیررسمی را که در فرهنگ لغت وجود دارد شناسایی کرد و سپس قسمت غیررسمی قبل از اینکه به قسمت دیگر متصل شود، به شکل رسمی تبدیل می شود.
در زیر فهرستی از برخی از کارهایی که پیشگام رسمی سازی متن هستند، ارائه شده است.[1]
1- تصحیح جمله با استفاده از شبکه های عصبی تکراری:
این کار توسط Gene Lewis، دانشگاه استنفورد با هدف مشابه این مطالعه موردی منتشر شده است. نویسنده پیشنهاد کرد که کاراکترهای ASCII موجود در متن را در یک بردار رمزگذاری یک بعدی 94 بعدی برای ایجاد یک مدل در سطح کاراکتر جاسازی کند. به طور مشابه، جاسازی در سطح کلمه نیز برای آزمایش با هر دو رویکرد استفاده شد. بردار در حین آموزش مدل یادگرفته شد. این مدل از سلولهای حافظه کوتاهمدت بلند مدت (LSTM) تشکیل شده است که قادر به گرفتن روابط ضمنی بین کاراکترهای زیرین است.
دو نوع شبکه عصبی بازگشتی به ترتیب با یک و دو لایه پنهان وجود داشت. برای تخمین احتمال خروجی، نویسنده لایه softmax را انتخاب کرد زیرا قادر به تولید احتمال نرمال شده برای هر کاراکتر است. برای آموزش، نزول گرادیان تصادفی مینی دسته ای با تابع هزینه کراسآنتروپی، تابعی که در اینجا نیز پیشنهاد می کنیم، استفاده شد. داده های بیشتر به شبکه عصبی ما اجازه می دهد تا با دقت بیشتری ترجمه شود.
این اثر به یاد ماندنی در حوزه انتقال سبک توسط Sudha Rao با Joel Tetreault در Grammarly منتشر شده است تا با گردآوری مجموعه دادهای از نزدیک به 110 هزار جفت جملات رسمی و غیررسمی، به کمبود دادهها رسیدگی کند. تلاش زیادی برای تبدیل جملات متنی غیررسمی خام با کمک کارشناسان موضوع انجام شد. متن غیررسمی شامل یک مجموعه پرسش و پاسخ یاهو از حوزههای مختلف مانند سرگرمی و موسیقی و خانواده و روابط با توزیع برابر بود. به دلیل درجات مختلف رسمیت در هر دو حوزه، نویسندگان نتایج را به طور جداگانه در هر دو حوزه گزارش کردند. ترکیبهای مختلفی از مدلهای ترجمه ماشین عصبی مانند مدلهای رمزگذار-رمزگشا با مکانیسمهای توجه برای آموزش مجموعه داده استفاده شد. مدلها بر اساس رتبهبندی کلی طرحهای مختلف مانند رسمی بودن، روان بودن، به معنای حفظ ارزیابی شدند. هدف از این پروژه شروع زمینه انتقال سبک رسمی با ایجاد یک مجموعه داده معیار بود که نویسندگان به طرز چشمگیری به آن دست یافتند.
2- مهار شبکه های عصبی از پیش آموزش دیده با قوانین رسمی انتقال سبک:
در این روش،[1] متن ورودی را با رویکردهای ساده مبتنی بر قاعده مانند بزرگ کردن حرف اول، مدیریت غلط املایی، از قبل پردازش میکنند و آن را به متن غیررسمی زیرین با کاراکتر <EOS> اضافه میکنند تا یک دنباله ورودی ایجاد کنند.
3- افزایش مجموعه داده: میتوانیم مجموعه داده را برای رفع کمبود داده افزایش دهیم. برای افزایش داده ها، می توانیم از کتابخانه nlpaug استفاده کنیم. تقویت مترادف و تقویت املایی تکنیک های مناسبی هستند.
4-پیش پردازش داده ها: با خواندن فایل متنی داده ها، یک DataFrame پاندا با دو ستون یعنی متن غیر رسمی و متن رسمی ایجاد می کنیم. از آنجایی که متن از پیامها و مکالمات کلی جمعآوری میشود، حروف، علائم نگارشی و کلیدواژهها را حفظ میکنیم.
مدلی که ما طراحی خواهیم کرد به عنوان یک مدل دنباله به دنباله شناخته می شود زیرا ما یک دنباله متن را به عنوان ورودی ارائه می دهیم و انتظار داریم دنباله متن به عنوان خروجی باشد. صحبت از مدلهای توالی به دنباله، دو تمایز بر اساس سطح توکنسازی را میتوان انجام داد. سطح کلمه و سطح شخصیت. در آزمایش با هر دو نوع نشانهسازی، متوجه میشویم که نشاندهنده سطح کاراکتر به نتایج بسیار بهتری دست مییابد که با توجه به اندازه مجموعه داده قابل انتظار است، از این رو در این مطالعه موردی روی همان تمرکز خواهیم داشت.
حال، ورودی رمزگذار باید با نشانههای شروع جمله و پایان جمله کدگذاری شود، زیرا رمزگذار را قادر میسازد تا دامنه هر جمله را بداند. میتوانیم از نشانههای «<» و «>» برای شروع و پایان استفاده کنیم. برای رمزگشا، ورودی باید با علامت «<» در ابتدا و خروجی باید با علامت «>» در پایان اضافه شود. مثلا،
ورودی رمزگذار: <من تایلندی هستم. چه کار می کنی؟>
ورودی رمزگشا: <من تایلندی هستم. چه کار میکنی؟
خروجی رسیور: من تایلندی هستم. چیکار میکنی؟>
قبل از اینکه داده ها را تقسیم کنیم، به توزیع طول های encoder_inp، decoder_inp و decoder_out نگاه می کنیم تا ایده شکل ورودی را که باید داده های خود را در آن جاسازی کنیم، بدست آوریم.
همانطور که می بینیم، بیشتر جملات طولی در حدود 50 کاراکتر دارند و تقریباً تمام جملات دارای طول کمتر از 200 کاراکتر هستند. از این رو، میتوانیم جملاتی را که بیش از 200 طول دارند برای یکنواختی فیلتر کنیم. اکنون میتوانیم دادهها را به مجموعههای قطار، اعتبارسنجی و آزمایش تقسیم کنیم.
توکن کردن و بسته کردن داده ها: رمزگذاری داده ها به معنای رمزگذاری جملات با اعداد است. اعداد با یک شناسه منحصر به فرد از واژگان اختصاص داده می شوند. بنابراین، جمله خاص با شناسه های منحصر به فرد کلمات موجود در آن جمله رمزگذاری می شود. ما هر کدام دو توکن ساز را برای داده های غیررسمی و رسمی ایجاد خواهیم کرد. Padding به اضافه کردن یک شناسه مشترک (یعنی به طور کلی 0) برای ایجاد تمام جملات با طول یکسان اشاره دارد. همانطور که قبلا دیدیم، می توانیم طول جمله را 200 کاراکتر درآوریم.
طراحی شبکه رمزگذار-رمزگشا ساده: مدل seq2seq از دو زیرشبکه رمزگذار و رمزگشا تشکیل شده است. رمزگذار در سمت چپ، دنبالههایی را از زبان مبدأ به عنوان ورودی دریافت میکند و در نتیجه نمایش فشردهای از توالی ورودی تولید میکند و سعی میکند تمام اطلاعات خود را خلاصه یا فشرده کند. سپس آن خروجی به یک ورودی یا حالت اولیه برای رمزگشا تبدیل می شود که می تواند ورودی خارجی دیگری را نیز دریافت کند. در هر مرحله زمانی، رمزگشا یک عنصر از دنباله خروجی خود را بر اساس ورودی دریافتی و وضعیت فعلی آن و همچنین به روز رسانی وضعیت خود برای مرحله زمانی بعدی تولید می کند. در اینجا یک نمایش تصویری ساده از نحوه عملکرد مدل ما وجود دارد.
منابع:
1- https://medium.com/analytics-vidhya/formalizing-informal-text-using-natural-language-processing-dd2032a0fc2b
2-Naemi،Amin، "Informal-to-Formal Word Conversion for Persian Language Using Natural Language Processing Techniques" , CNIOT2021, May 20-22, 2021, Beijing, China
3-QasemiZadeh B, Ilkhani A, Ganjeii A. Adaptive language independent spell checking using intelligent traverse on a tree. In: 2006 IEEE Conference on Cybernetics and Intelligent Systems. IEEE; 2006. p. 1–6.