Skip to content

به ماشین‌ها یاد بدهیم بخوانند و بفهمند

یکی از چالش برانگیزترین کارهای پردازش زبان طبیعی (NLP) خواندن و فهماندن یک متن به ماشین (کامپیوتر)‌ است. خواندن (Read) و فهمیدن (Compreahend) میتواند تعابیر مختلفی داشته باشد ولی منظور ما از خواندن و فهمیدن این است که یک متن رو به ماشین بدهیم و سوالاتی از درون متن از ماشین بپرسیم و ماشین قادر به پاسخگویی به این سوالات باشد (دقیقا همون کاری که ما در امتحان زبان انگلیسی و بخش Reading اش انجام میدادیم یک متن به ما میدادن و یک سری سوالات هم در انتهاش میگذاشتن و ما باید با خواندن متن انگلیسی به سوالات پاسخ میدادیم). اولین مقاله‌ای که در این زمینه منتشر شد و به طور کلی تسک Machine Comprehension رو تعریف کردند، توسط آقای Richardson et.al ارائه شد که به همراه آن یک داده‌ی تست هم ارائه کردند.

نمونه‌ ای از ادراک ماشین

مقاله زیر یکی از قویترین کارهایی است که در این زمینه معرفی شده است. این کار توسط آقای Blunsom و همکاراش نوشته شده و در NIPS-2015 به چاپ رسیده است.

Teaching Machines to Read and Comprehend

اغلب مدل‌های کلاسیک که برای این فهماندن و خواندن وجود دارند از روش‌های مهندسی ویژگی (Feature Engineering) مبتنی بر گرامرهای زبانی و استخراج اطلاعات استفاده می‌کنند. به این صورت که یک سری سه تایی تعریف میکنند که اگر X پرسیده شد و در متن Y بود اونوقت جوابش میشه Z. که خب همونطور که میدونید تعداد این سه‌تایی با توجه به تنوع زبان بسیار زیاد و به دست آوردنشون هم کار بسیار زمانگیری هست. به همین خاطر این مقاله سعی کرده است که یک روش باناظر (supervised) مبتنی بر یادگیری عمیق تا حدودی این مساله را حل کند.

تسک خواندن و فهمیدن رو میشه به صورت یک فرمول احتمالاتی نوشت که هدف ما در آن تخمین احتمال جواب (answer) به شرط داشتن سوال(question) و متن(context) است یا به عبارت دیگه محاسبه احتمال :

P(a|c,q)

(در مقاله به جای Question از عبارت Query استفاده شده است که برای سادگی من Question استفاده کردم)

برای اینکه بخواهیم همچین تسکی رو به صورت باناظر (Supervised) انجام بدهیم باید یک دیتاست داشته باشیم که شامل این سه‌تایی‌ها باشد (سوال، جواب، متن) که خب تا قبل از آمدن این مقاله اغلب دیتاست‌هایی که وجود داشتند بسیار کوچک و مناسب یادگیری عمیق نبودند و به همین خاطر نویسندگان مقاله از یک روش جالب برای استخراج دیتاست استفاده کردند.

برای به دست آوردن دیتاست از خبرهای دو سایت سی‌ان‌ان و دیلی‌میل استفاده کرده‌اند. در ابتدای این خبرها خلاصه‌ای از کل خبر به صورت تیتر وار نوشته‌ شده است و با کمک روشی که در مقاله به آن اشاره شده است این تیترها را به سوال و جواب تبدیل می‌کنند و به این ترتیب سه‌تایی مورد نظر (سوال، جواب و متن) را می‌سازند (برای جزییات بیشتر به قسمت ۲ مقاله مراجعه کنید).

علاوه بر ساختن ۳تایی یک پیش‌پردازش هم انجام دادند که در ادامه توضیح میدهم. مثلا فرض کنید شما یک متن درباره ترامپ میخوانید به طور ناخودآگاه و با توجه به اطلاعاتی که قبلا داشتید متوجه میشید که ترامپ رییس جمهور آمریکاست و با ایران نسبت خوبی ندارد و خیلی اطلاعات دیگه که اصلاحا به این میگن دانش جهانی یا World Knowledge. در این مقاله همچنین برای اینکه از مستقل از دانش جهانی انجام شود یک ترفند بسیار جالب بکار برده است تا شما حتما با خواندن متن بتوانید پاسخ سوالات رو بدهید.

در جدول زیر متن اصلی و متن تغییر یافته رو میتونید مشاهده کنید. یک انسان با خواندن هر دو متن میتواند پاسخ را بدهد ولی در متن سمت چپ از یک دانش جهانی استفاده شده است و شما از قبل اطلاعاتی راجع به ‌بی‌بی‌سی و جرمی کلارکسون و… دارید و ممکن است بدون خواندن متن (Context) بتوانید سوال(در اینجا Query) را پاسخ بدهید. برای اینکه از این موضوع جلوگیری کنند تمام اسامی خاص را ent_id جایگزین کرده اند و به این ترتیب شما حتما باید متن رو بخونید تا بتوانید به سوال پرسیده شده پاسخ بدهید.

پیش پردازش روی متن خبرها

قسمت ایجاد دیتاست از این جهت جالب است که همین کار رو میتوان در زبان فارسی در بسیاری از کارها مثل Question Answering یا Summerization و… به کار برد و در جاهایی که مشکل دیتاست وجود دارد این روش بسیار کاربردی است.

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

  1. The Deep LSTM Reader: این روش بسیار ساده بوده و از یک شبکه بازگشتی (Recurrent) عمیق دوجهته (Bi-directional) با سلول LSTM استفاده کرده است. سوال (Question) و متن(Context) به وسیله یک توکن خاص ||| به یکدیگر چسبانده میشوند و به شبکه داده میشوند و از خروجی حاصل از شبکه (که یک بردار است) برای حدس زدن پاسخ استفاده می‌کنند (دقت کنید که پاسخ‌ها تک کلمه‌ای هستند و بخاطر همین این کار به راحتی با مقایسه بردار حاصل از شبکه بازگشتی و توکن‌های موجود در متن (Context) بدست می‌آید.
  2.  Attentive Reader: مشکلی که روش قبلی داشت این بود که آمدیم یک متن و سوال رو خوندیم و در یک بردار با طول کم (~۳۰۰-۱۰۰۰) و ثابت ذخیره کردیم که این مساله یک گلوگاه برای یادگیری متن‌های بلند است. مثلا خودتون رو در امتحان انگلیسی دوران دبیرستان فرض کنید، برای پاسخ دادن به یک سوال لازم است چندین بار متن رو بخوانید (یا حداقل قسمت‌هایی که با سوال ارتباط دارند) تا بتونید جواب درست بدید با استفاده از همین ایده در روش دوم از مکانیزمی به نام اتنشن (Attention mechanism) استفاده کرده‌اند (به طور خلاصه میشه مکانیزم اتنشن رو اینجوری تعریف کرد که به قسمت‌هایی از متن توجه کنیم که اهمیت بیشتری دارند).
    پس در این روش قرار است به بخش‌هایی از متن (Context) توجه کنیم که با سوال(Question) ارتباط بیشتری دارند. برای این کار ابتدا دو بردار مجزا (یکی برای سوال و یکی برای متن) ایجاد می‌کنند. بردار سوال با دادن سوال ورودی به یک شبکه بازگشتی دوطرفه (Bi-directinal LSTM) به دست میاید و آن را u نامگذاری کرده‌اند. برای بدست آوردن بردار متن (Context) که در مقاله با r نمایش داده شده است از مقاله معروف Bahdanau and et.al کمک گرفته‌اند و متن (Context) را به صورت جمع وزن‌دار کلمات آن ساخته‌اند. به طور دقیق‌تر، وقتی یک توکن از سند خوانده میشود یک بردار y_d-t به آن تعلق میگرد و بردار نهایی که بازنمایی‌کننده سند است از جمع وزن‌دار این بردارها ساخته و با r نامگذاری می‌شود. چون در این روش توکن‌های سند یکی یکی خوانده میشوند این امکان وجود دارد که در هر لحظه با سوال مقایسه شوند (توکن و سوال دو بردار هستند و در ساده‌ترین حالت میشه شباهت کسینوسی اشون رو حساب کرد و مبنای شباهت در نظر گرفت)‌. به این ترتیب کلماتی که برای سوال اهمیت بیشتری دارند وزن بیشتری می‌گیرند.
    در نهایت بعد از اینکه بردار حاصل از سوال(u) و متن (r) ساخته شد آن را به یک شبکه feedforward میدهند و پاسخ (answer) حدس زده می‌شود.
  3. Impatient Reader: جذاب‌ترین و نوآورانه‌ترین قسمت مقاله به نظرم این تیکه است. این قسمت هم مانند قبل از مکانیزم اتنشن استفاده میکند و باز هم هدف این است که به قسمت‌هایی از متن (Context) توجه کنیم که برای سوال از اهمیت بیشتری دارند. ولی برخلاف مدل قبل که برای بدست آوردن بردار متن (Context) از جمع وزن‌دار استفاده کرده‌اند این‌بار به ازای خواندن هر توکن از سوال (q)، وضعیت (state) مرحله قبل (r_i-1) و بردار سند (y_d-t)  که از شبکه بازگشتی به دست می‌آید را به یک شبکه بازگشتی جدید می‌دهند و بر اساس آن خروجی پاسخ را حدس میزنیم. نکته‌ای اصلی این معماری این است که به ازای خواندن هر توکن از سوال (question)، یک نگاه به متن (context) خواهیم داشت یا اصلاحا متن را بازخوانی (reread) خواهیم کرد.
    برای اینکه این قسمت را بهتر متوجه شودید به شکل زیر که از مقاله آورده شده است توجه کنید. همانطور که قسمت b ملاحظه می‌کنید، هنگامی که ورودی شبکه کلمه Visited است به تمام کلمات متن (Context) توجه کرده و بردار r را می‌سازد و سپس به سراغ خواندن کلمه بعدی یعنی England میرود هنگامی که این کلمه به عنوان ورودی داده میشود علاوه بر وضعیت مرحله قبل (Visited)، دوباره به تمام کلمات متن (Context) توجه می‌کند و بردار جدید دیگری به نام r را میسازد و این کار را به ازای تمام کلمات سوال تکرار میکند.
    در نهایت از بردارهای r ساخته شده و u برای پیش‌بینی جواب استفاده می‌کند.

Document and query embedding models.

نتایجی که از این مقاله به دست آمده است نشان می‌دهد که دو معماری Impatient و Attentive نسبت به Deep LSTM بهتر عمل کردند.

منتشر شده درپردازش زبان طبیعییادگیری عمیق

اولین نفری باشید که نظر میدهید

دیدگاهتان را بنویسید

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

All rights reserved by hadifar.net