روبات های پاسخگو چگونه کار می کنند؟

پیش گفتار

در چند روز اخیر افراد زیادی از من در ارتباط با نحوه ی عملکرد سایفر بات سوال کردند، لذا تصمیم گرفتم این پست را به این موضوع اختصاص بدم.

مقدمه

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

ساختن این نوع روبات های پاسخگو خیلی پیچیده نیست، چون دامنه ی ورودی های آنها محدود است. به عنوان مثال یک عابربانک در مجموع ۱۲ دکمه برای وارد کردن عدد و تایید و انصراف دارد و نهایتاً ۸ دکمه ی کمکی دیگر که عملیات هر کدام در هر لحظه کاملاً مشخص است.
جهت مجزا کردن روبات هایی که تنها فعالیت نرم افزاری انجام می دهند از روبات هایی که فعالیت فیزیکی نیز دارند، دسته ی اول را بات (به انگلیسی Bot) نیز می نامند. پس برای منشی تلفنی واژه ی بات مناسب تر می باشد.
حال فرض کنید می خواهیم باتی بسازیم که قابلیت فهم و پاسخگویی به زبان انسان را داشته باشد! ساخت این نوع بات که اصطلاحاً به آن Chatterbot نیز گفته می شود کمی پیچیده تر از موارد قبل می باشد.
هدف این بات ها ارائه ی پاسخی است که هر چه بیشتر به پاسخ یک انسان شبیه باشد. در حالت ایده آل هدف این است که شخصی که با این بات ها گفتگو می کند، نتواند متوجه شود که در حال چت با یک بات می باشد. که متأسفانه تا کنون هیچ باتی به این حالت ایده آل نرسیده است.برای روشن نمودن بهتر این مسئله ذکر چند مثال شاید بد نباشد:

  • زبان انسان پویا می باشد و روز به روز تغییر می کند پس باتی که بخواهد با این زبان ارتباط برقرار کند نیز باید پویا باشد.
  • یک کلمه در زبان انسان (که مانند یک دکمه در عابربانک می ماند) در زمان ها و مکان های مختلف و همچنین برای موضوع های مختلف ممکن است معنای یکسانی نداشته باشد و در نتیجه جواب متفاوتی هم خواهد داشت. به عنوان مثال در صورتی که کلمه ی خیر بدون هیچ مقدمه ای گفته شود، معنی خاصی ندارد. حال آنکه اگر همین کلمه بعد از عبارت خوبی؟ بیاید به مفهوم خوب نیستم خواهد بود و اگر بعد از عبارت هستی؟بیاید به مفهوم نیستم خواهد بود.
  • در زبان انسان ممکن است جای کلمات تغییر کنند ولی مفهوم ثابت بماند. مثلا تو کجایی؟ با کجایی تو؟ یک مفهوم را دارد و فقط کلمه ای که روی آن تأکید شده است متفاوت است. همچنین چندین عبارت ممکن است یک جواب داشته باشند. به عنوان مثال خوبی؟ و حالت خوبه؟ و خوب هستی؟ همگی یک مفهوم را دارند.
  • در زبان انسان علامت ها می توانند مفهوم جمله و در نتیجه پاسخ جمله را عوض کنند. به عنوان مثال تو خوبی؟ و تو خوبی! دو مفهوم کاملاً متفاوت دارند.

و موارد بسیار بسیار زیاد دیگر که پردازش زبان انسان و پاسخگویی به آن را پیچیده و دشوار می کند.

راه های مختلف برای ساختن بات های پاسخگو

بات های پاسخگوی مختلف از روش های مختلفی برای پیدا کردن بهترین جواب استفاده می کنند، من در اینجا سعی می کنم چند روش مختلف را ذکر کنم،توجه داشته باشید این روش ها جهت پردازش متن و پاسخگویی به آن می باشد و فرض شده ورودی بات به متن تبدیل شده و خروجی بات نیز متن خواهد بود.

ساده ترین روش

ساده ترین روشی که حتی امروزه در خیلی از بات ها استفاده می شود مقایسه ی سوال با یک لیست از عبارت ها که جواب هر کدام از قبل تعیین شده است می باشد.
این روش بسیار ابتدایی می باشد و در صورتی که سوال عیناً برای بات تعریف نشده باشد پاسخی پیدا نخواهد شد!
به عنوان مثال حتی اگر جوابی برای عبارت khoobi? تعریف شده باشد در صورتی که از این بات بپرسید khoobi یا khooobi? یا khoubi جوابی نخواهید گرفت.
این روش در بسیاری از بات های یاهو! مسنجر استفاده شده. این بات ها معمولاً سویچی با نام /learn دارند و در صورتی که جواب عبارتی را ندارند از کاربر تقاضا می کنند که پاسخ آن عبارت را به او یاد بدهند.
این روش فاصله ی بسیار بسیار زیادی با هدف Chatterbot ها دارد، زیرا یک انسان هیچ گاه نمی گوید لطفا با سویچ /learn جواب این پاسخ را به من یاد بدهید!

استفاده از فیلتر ها

این روش کمی متود قبلی را کامل کرده است به این صورت که قبل از چک کردن سوال با لیست جواب ها پردازش ساده ای روی سوال انجام می شود. این پردازش می تواند شامل موارد زیر باشد:

  • حذف تکرار حروف: Salaaaaaam و Saalaaaaaam به Salam تبدیل خواهند شد.لازم به ذکر است بعضی از حروف مانند o در صورت تکرار بیش از ۲ مورد پشت سر هم حذف می شوند. به عنوان مثال khooooobi? به khoobi? تبدیل خواهد شد.
  • جایگزینی برخی حروف ترکیبی: مثلا حایگزینی ou با oo.
  • حذف کاراکتر های اضافه: به عنوان مثال تمام کاراکتر های غیر حروف الفبا را حذف می کنیم، در نتیجه khoobi?! :) به khoobi تبدیل خواهد شد.
  • جایگزینی برخی کلمات هم معنا: مثلا واژه ی bali و arehرا با واژه ی baleh جایگزین می کنیم.

این موارد به بات کمک می کند تا در صورت دانستن جواب عبارت salam به سوالات Salaaaam!? یا Salaaaaaammmm :) نیز پاسخ دهد.
این روش کمی به پاسخگویی مناسب تر بات کمک خواهد کرد اما همچنان نتیجه ی مورد قبولی نخواهیم داشت.

استفاده از کلید واژه ها

شاید این راهی باشد که به نظر خیلی از دوستان هم رسیده باشد! استفاده از کلیدواژه ها! در این روش به جای اینکه به دنبال یک عبارت کامل باشیم، به دنبال یک کلمه یا چند کلمه در یک عبارت خواهیم گشت. به عنوان مثال می گوییم در هر جمله ای کلمه ی Salam وجود داشت در جواب به آن شخص سلام کن. این روش باعث می شود با دادن مقدار خیلی کمتری اطلاعات به بات جواب های بیشتری را بپوشانیم.
اما چند مشکل عمده دارد! اولین مشکل این است که جواب های بی ربط بسیار زیاد خواهند شد. به عنوان مثال اگر کاربر بگوید Salamat bashi بات به او جواب غیر معقول سلام را خواهد داد.
مشکل دیگر این است دو کلید واژه با جواب های متفاوت در یک عبارت یافت شود. و در این حالت بات نمی داند کدام یک مناسب تر خواهد بود.
فرض کنید کاربر عبارت Salam, khoobi? را به بات ما بگوید و ما به این بات هر دو کلید واژه ی Salam و Khoobi را با دو جواب مختلف یاد داده باشیم. بات نمی داند کدام یک برای این عبارت جواب بهتری است و ممکن است در جواب فقط سلام کند.

استفاده از الگو ها

این روشی است که سایفر و بسیاری از بات های پیشرفته مانند آلیس از آن استفاده می کنند. من در ادامه سعی می کنم به معرفی نوع الگویی که در سایفر استفاده شده بپردازم. در صورتی که علاقه دارید با سیستم الگوی آلیس (که در خیلی از بات های تحت وب استفاده می شود) آشنا شوید به اینجا رجوع کنید.
در ابتدا منظور از الگو یا Pattern چیست؟
یک الگو شباهت هایی با روش کلیدواژه دارد. یعنی به صورت خیلی سختگیرانه عبارت را بررسی نمی کند بلکه دنبال یک سری کلمات در جمله می گردد، اما جای این کلید واژه ها در عبارت مهم خواهد بود. همچنین در ساختار سایفر به هر الگو یک اولویت داده می شود که در ادامه سیستم اولویت بندی را معرفی خواهیم کرد.
برای هر الگو یک Action یا پاسخ تعریف می شود. ابتدا به بررسی الگو ها می پردازیم و بعد به سراغ ساختار پاسخ ها می پردازیم.
در ابتدا به معرفی یک الگوی خیلی ساده می پردازیم:

salam*

خوب احتمالاً متوجه شدید مفهوم این الگو چیست. تمام عباراتی که با salam شروع شوند جزو این الگو قرار می گیرند.
به عنوان مثال Salam azizam یا Salam در این الگو قرار می گیرند.اما Azizam salam در این گروه قرار نخواهد گرفت. به عبارت دیگر * به مفهوم هر کاراکتری می باشد. از آنجایی که * در انتهای جمله قرار گرفته است یعنی هر عبارتی در ادامه ی salam بیاید در این الگو قرار خواهد گرفت.در صورتی که بخواهیم Azizam salam هم در این الگو قرار بگیرد باید از الگوی زیر استفاده کنیم:

*salam*

ممکن هست * در بین دو کلمه بیاید، به عنوان مثال:

esmam * hast

خوب فکر می کنم مشخص باشد. به عنوان مثال esmam Siavash hast در این الگو قرار خواهد گرفت.
در سیستم سایفر برای برخی حالت هایی که زیاد استفاده می شوند از علامت هایی استفاده شده. به عنوان مثال علامت # به مفهوم فاصله ستاره یا انتهای عبارت می باشد. برای مثال:

salam#

Salam khoobi و Salam در این الگو قرار می گیرند. امّا Salamati در این الگو قرار نخواهد گرفت.
علامت دیگری که برای سایفر تعریف کردم علامت $ هست. که در صورتی که بعد از هر * بیاید به این مفهوم خواهد بود که در آن * فاصله وجود نداشته باشد، مثلاً:

be*$

Bekhoon و Bepoosh و اکثر فعال های امری در این الگو قرار می گیرند اما Besiar ziad در این الگو قرار نمی گیرد چون در بخشی که بجای * آمده فاصله وجود دارد.
فکر می کنم تا حدودی با الگو ها آشنا شده باشید. حالا می خواهیم با Action یا پاسخ الگو ها آشنا شویم.ساده ترین الگو یک عبارت ساده می باشد، برای مثال برای الگوی salam* پاسخ زیر را می توانیم داشته باشیم:

Salam, khoobi?

اما همونطور که می دونیم یک انسان هیچ وقت به یک سوال همیشه یک جواب نمیده. برای اینکه رفتار بات ما کمی نزدیک تر به رفتار انسان باشد از یک ساختار ساده در سایفر استفاده شده:

<random>Salam<or>Bah bah, salam!<or>Salam azizam</random>

این ساختار یکی از جواب های Salam و Bah bah, salam! و Salam azizam را بصورت تصادفی انتخاب کرده و جواب را به کاربر تحویل خواهد داد.
تگ کاربردی دیگری که احتمالاً تا این لحظه به ضرورت وجودش پی برده اید تگ <like> می باشد.
همانطوری که می دانید مفهوم خیلی از سوال ها یکی می باشد و در نتیجه جواب مشابه خواهند داشت. به عنوان مثال مفهوم عبارت khoobi و khoob hasti یکی می باشد. در این مواقع از تگ <like> استفاده می کنیم.
مثلاً فرض کنید الگوی khoobi را برای بات با جواب مناسب تعریف کرده ایم. حال برای الگوی khoob hasti از ساختار زیر استفاده می کنیم:

<like>khoobi</like>

با استفاده از این تگ در صورتی که جواب الگوی khoobi عوض شود جواب تمام الگو های هم مفهوم نیز عوض می شود که از محاسن استفاده از تگ <like> می باشد.

این آموزش ادامه دارد

28 فکر می‌کنند “روبات های پاسخگو چگونه کار می کنند؟

  1. سحر

    سلام خسته نباشید
    خواهش می کنم اگه مطلبی در مورد چت بات و برنامه نویسی اون دارید به من اطلاع بدید برای پایان ترم باید این پروژه رو انجام بدم و هیچ ایده ای رو ندارم please help me

    پاسخ
  2. طاهر

    دوست عزیز می خواستم برای اینگه فارسی هم بخونه و جواب بده یا امکانات دیگه که در برنامها ی مثل رویا هست باید چکار کرد ممنون

    پاسخ
  3. mahdi

    salam
    mishe begiid in yanii chii
    برای ورود به اتاقهای گفتگو ، لازم است پورت ۵۲۲۲ در کامپیوتر شما باز باشد . در صورتی که از کامپیوتر شخصی استفاده می کنید ، می توانید با انجام تنظیمات در فایروال کامپیوتر خود ، این پورت ها را باز کنید . و چنانچه کامپیوتر شما تحت شبکه می باشد ، می توانید از مسئول شبکه خود بخواهید که این پورت ها را باز کند . لازم به توضیح است که باز بودن این پورت ها تنها جهت ارتباط با اتاقهای گفتگو در سایت کلوب می باشد و هیچگونه خطری ندارد .

    پاسخ
  4. azadeh

    سلام خیلی ممنون
    داشتم دنبال همین مطلب می گشتم
    ممکنه منابع خود را بفرمایید برای پروژه پایان ترم نیاز دارم. ممنون

    پاسخ
  5. MPnet

    برای شماا آروزی موفقیت روز افزون دارم
    میتونم هدف کلیتون رو از این حرکت بدونم؟
    میخوام ببینم اهدافمون چقدر به هم نزدیکه
    با سپاس.
    MPnet

    پاسخ
  6. طهماسبی-راعی

    سلام،وقت شما بخیر.
    ما پروژه ای در رابطه با chatbotها در دستمان است.ما دانشجوی ترم ۷ کامپیوتر هستیم
    میشود خواهش کنم اگر منبعی دارید برایمان mailکنید.واقعا ممنون می شویم اگر کمکمان کنید.

    پاسخ
  7. farideh

    in robot dar nahayat faghat vasetei hast beine fekre yek ensan va adame dg , az khodesh ke chizi nadare faghat dare bazgoo mikone , pas nabayad behesh laghabe hushe masnui dar dad , chon na masnoi hast vaghean va na hushe ,

    پاسخ

پاسخ دادن به طاهر لغو پاسخ

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

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>