چت بات در پایتون و چت بات

چت بات چیست؟

چت بات یک نرم افزار دارای هوش مصنوعی در یک دستگاه مانند (Siri ، Alexa ، Google Assistant و غیره) ، اپلیکیشن و یا وبسایتی است که سعی می کند نیازهای مصرف کنندگان را ارزیابی کرده و سپس به آن ها در انجام یک کار خاص مانند یک معامله تجاری کمک کند. مثل رزرو هتل، ارسال فرم و غیره. امروزه چت بات ها در بسیاری از شرکت ها مورد استفاده قرار می گیرند تا بتواند با کاربران تعامل داشته باشند. از جمله کاربردهای چت بات در شرکت ها می توان به موارد زیر اشاره کرد:

 ارائه اطلاعات پرواز
ارتباط با مشتریان و امور مالی آنها
پشتیبانی مشتری

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

به طور کلی دو نوع چت بات وجود دارد.

چت بات قانون محور (Rule-Based) و چت بات خودآموز(Self-Learning) 

١. در مدل قانون محور ، یک ربات به سوالات بر اساس آموزش هایی که قبلا فراگرفته پاسخ می دهد. قوانین تعریف شده می توانند بسیار ساده و یا بسیار پیچیده باشند. ربات ها می توانند پرسش و پاسخ ساده ای را انجام دهند اما در مدیریت موارد پیچیده موفق نیستند.
٢. چت بات های خودآموز از برخی رویکردهای مبتنی بر ماشین لرنینگ استفاده می کنند و قطعا از چت بات های قانون محور کارآمدتر هستند. این چت بات ها به دو نوع تقسیم می شوند: مبتنی بر یازیابی و تولیدی
١-٢. در مدل مبتنی بر بازیابی، چت بات از یک سری الگوریتم های فراابتکاری به منظور انتخاب پاسخ از یک کتابخانه دارای پاسخ های از پیش تعیین شده استفاده می کند.
٢-٢ چت بات تولیدی می تواند پاسخ ها را تولید کند و همچنین همیشه به یک سوال یک پاسخ تکراری نمی دهد. هرچه تعدا پرسش و پاسخ ها بیشتر شود، چت بات هوشمندتر می شود.

چت بات در پایتون و چت بات

ساخت چت بات با پایتون

پیش نیازها: داشتن دانش کلی از کتابخانه scikit و NLTK. اما اگر در NLP تازه وارد هستید باز هم می توانید مقاله را بخوانید و سپس به منابع مراجعه کنید.

پردازش زبان طبیعی ( NLP )

رشته تحصیلی که بر تعامل بین زبان بشر و رایانه ها تمرکز دارد به اختصار “پردازش زبان طبیعی” یا NLP نامیده می شود. این رشته با علوم کامپیوتر ، هوش مصنوعی و زبان شناسی محاسباتی سروکار دارد. NLP روشی است که به وسیله آن کامپیوترها می توانند زبان انسان را هوشمندانه تر آنالیز، درک و استخراج کنند. با استفاده از NLP توسعه دهندگان می توانند دانش خود را برای انجام کارهایی مانند خلاصه سازی خودکار، ترجمه، استخراج رابطه، تجزیه و تحلیل احساسات، تشخیص گفتار و تقسیم موضوع سازماندهی کرده و ساختار بخشند.

NLTK: معرفی کوتاه

NLTK (ابزار زبان طبیعی) یک بستر پیشرو برای ساختن برنامه های پایتون برای کار با داده های زبان انسانی است. NLTK “ابزاری فوق العاده برای آموزش و کار در زبانشناسی محاسباتی با استفاده از پایتون” و “یک کتابخانه شگفت انگیز برای بازی با زبان طبیعی” معرفی شده است. پردازش زبان طبیعی با پایتون مقدمه ای عملی برای برنامه نویسی برای پردازش زبان است.

دانلود و نصب NLTK

NLTK را نصب کرده و pip install nltk را اجرا کنید.
آزمایش نصب: پایتون را اجرا کرده و import nltk را تایپ کنید.
نصب بسته های NLTK:
NLTK را وارد کنید و nltk.download () را اجرا کنید. با این کار NLTK downloader را باز کرده و می توانید مدل ها را برای بارگیری انتخاب کنید. همچنین می توانید همه بسته ها را به طور همزمان دانلود کنید.

 

پیش پردازش متن با NLTK

مسئله اصلی در مورد داده های متن این است که همه در قالب متن هستند. اما الگوریتم های یادگیری ماشین به نوعی از بردار ویژگی عددی احتیاج دارند. بنابراین قبل از شروع هر پروژه NLP باید آن را از قبل پردازش کنیم تا مناسب سازی شود. پیش پردازش متن اصلی شامل موارد زیر است:

تبدیل کل متن به حروف بزرگ یا حروف کوچک به گونه ای که الگوریتم با کلمات مشابه در موارد مختلف به صورت متفاوت رفتار نمی کند.
Tokenization: Tokenization (نشانه گذار) فقط اصطلاحی است که برای توصیف فرآیند تبدیل رشته های متن معمولی به لیستی از نشانه ها بکار رفته است. نشانه گذار جمله می تواند برای یافتن لیست جملات مورد استفاده قرار گیرد و از نشانه گذار کلمات برای یافتن لیست کلمات در رشته ها استفاده می شود.

 

کوله کلمات ( Bag of Words )

پس از مرحله پردازش اولیه، باید متن را به یک بردار معنی دار (یا آرایه) از اعداد تبدیل کنیم. کوله کلمات شامل واژگان کلمات شناخته شده و معیار حضور کلمات شناخته شده است. شهود پشت کوله کلمات این است که اسناد با محتوای یکسان، مشابه هستند. همچنین ما می توانیم راجع به معنی سند از طریق مطالب آن دریابیم.

 

رویکرد TF-IDF

مشکل کوله کلمات در این است که کلمات پر تکرار شروع به غالب شدن در سند می کنند؛ اما ممکن است شامل محتوای اطلاعاتی (informational) نباشند. همچنین کوله کلمات به اسناد طولانی تر وزن بیشتری می دهد. یک روش برای رفع این مشکل این است که به هر کلمه متناسب با تعداد تکرار آن در کل سند امتیاز داده شود. این رویکرد امتیاز دهی Term Frequency-Inverse Document Frequency یا به اختصار TF-IDF گفته می شود. در این روش، Term Frequency به معنی امتیاز دهی تعداد کلمات در سند فعلی و Inverse Document Frequency به معنای امتیازدهی کم تکرار بودن کلمات در سند می باشد.

(تعداد کل کلمات)/(تعداد دفعات مشاهده کلمه)=TF
(تعداد اسنادی که کلمه در آن ها مشاهده شده)/(تعداد اسناد)IDF=1+log

وزن TF-IDF ، وزنی است که اغلب در بازیابی اطلاعات و استخراج متن مورد استفاده قرار می گیرد. این وزن یک معیار آماری است که برای ارزیابی اهمیت کلمه در یک اسندیا مجموعه.
مثال:
سندی را در نظر بگیرید که شامل ١٠٠ کلمه است و در آن کلمه “تلفن” ۵ بار تکرار شده است. TF برای این کلمه 5/100 است. حال ، فرض کنید ما ١٠ میلیون سند داریم و کلمه تلفن در هزار مورد از آنها تکرار شده است. آنگاه IDF برابر خواهد بود با: log (10،000،000 / 1،000) = 4 . بنابراین TF-IDF  0.2 می باشد.
حال ما یک دید کلی از NLP داریم، وقت آن رسیده که شروع به ساخت چت بات کنیم. عنوان چت بات را ROBO فرض می کنیم.

 

وارد کردن کتابخانه های ضروری

import nltk
import numpy as np
import random
import string # to process standard python strings

مجموعه نوشته ها ( Corpus )

به عنوان مثال، ما از صفحه ویکی پدیا به عنوان مجموعه نوشته برای چت بات خود استفاده خواهیم کرد. محتویات را از صفحه کپی کرده و آن را در یک پرونده متنی بنام “chatbot.txt” قرار دهید. با این حال، شما می توانید از هر مجموعه نوشته دلخواه دیگر استفاده کنید. ما در فایل corpus.txt کل مجموعه را به لیست جملات و کلمات برای پیش پردازش بیشتر تبدیل می کنیم.

f=open('chatbot.txt','r',errors = 'ignore')raw=f.read()raw=raw.lower()# converts to lowercasenltk.download('punkt') # first-time use only
nltk.download('wordnet') # first-time use onlysent_tokens = nltk.sent_tokenize(raw)# converts to list of sentences 
word_tokens = nltk.word_tokenize(raw)# converts to list of words

مثالی از sent_tokens و word_tokens را ببینید:

sent_tokens[:2]
['a chatbot (also known as a talkbot, chatterbot, bot, im bot, interactive agent, or artificial conversational entity) is a computer program or an artificial intelligence which conducts a conversation via auditory or textual methods.',
 'such programs are often designed to convincingly simulate how a human would behave as a conversational partner, thereby passing the turing test.']word_tokens[:2]
['a', 'chatbot', '(', 'also', 'known']

پیش پردازش متن

اکنون باید تابعی به نام LemTokens تعریف کنیم.

lemmer = nltk.stem.WordNetLemmatizer()
#WordNet is a semantically-oriented dictionary of English included in NLTK.def LemTokens(tokens):
    return [lemmer.lemmatize(token) for token in tokens]
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
    return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))

تطبیق کلید واژه

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

GREETING_INPUTS = ("hello", "hi", "greetings", "sup", "what's up","hey",)GREETING_RESPONSES = ["hi", "hey", "*nods*", "hi there", "hello", "I am glad! You are talking to me"]def greeting(sentence):
 
    for word in sentence.split():
        if word.lower() in GREETING_INPUTS:
            return random.choice(GREETING_RESPONSES)

تولید پاسخ در چت بات

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

از کتابخانه scikit Learn ، بردار Tfidf را وارد کنید تا مجموعه ای از اسناد خام را به ماتریسی از ویژگی های TF-IDF تبدیل کنید.

from sklearn.feature_extraction.text import TfidfVectorizer

همچنین ، ماژول cosine similarity را از کتابخانه یادگیری scikit وارد کنید.

from sklearn.metrics.pairwise import cosine_similarity

این مورد برای یافتن شباهت بین کلمات وارد شده توسط کاربر و کلمات موجود در مجموعه نوشته استفاده می شود.
ما یک پاسخ عملکردی را تعریف می کنیم که پرسش کاربر را برای یک یا چند کلمه کلیدی شناخته شده جستجو می کند و یکی از چندین پاسخ ممکن را ارائه می دهد. اگر ورودی مطابق با هر یک از کلمات کلیدی را پیدا نکرد، به عنوان مثال پاسخ می دهد: “متاسفم! من متوجه منظور شما نمی شوم”

def response(user_response):
    robo_response=''
    sent_tokens.append(user_response)    TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english')
    tfidf = TfidfVec.fit_transform(sent_tokens)
    vals = cosine_similarity(tfidf[-1], tfidf)
    idx=vals.argsort()[0][-2]
    flat = vals.flatten()
    flat.sort()
    req_tfidf = flat[-2]    if(req_tfidf==0):
        robo_response=robo_response+"I am sorry! I don't understand you"
        return robo_response
    else:
        robo_response = robo_response+sent_tokens[idx]
        return robo_response

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

flag=True
print("ROBO: My name is Robo. I will answer your queries about Chatbots. If you want to exit, type Bye!")while(flag==True):
    user_response = input()
    user_response=user_response.lower()
    if(user_response!='bye'):
        if(user_response=='thanks' or user_response=='thank you' ):
            flag=False
            print("ROBO: You are welcome..")
        else:
            if(greeting(user_response)!=None):
                print("ROBO: "+greeting(user_response))
            else:
                print("ROBO: ",end="")
                print(response(user_response))
                sent_tokens.remove(user_response)
    else:
        flag=False
        print("ROBO: Bye! take care..")

تقریبا تمام شد. ما اولین چت بات خود را در NLTK کدنویسی کرده ایم. اکنون بگذارید ببینیم که چگونه با انسان تعامل دارد:

چت بات در پایتون و چت بات

جمع بندی

اگرچه این یک ربات بسیار ساده است، اما راه خوبی برای ورود به NLP و آشنایی با چت بات است. این مثال به شما کمک می کند تا به طراحی و چالش های ایجاد چت بات بیاندیشید.


در آخر شما می‌توانید فایل مربوط به مقاله «چگونه با استفاده از پایتون یک چت بات ساده بسازیم؟» را دریافت و در فرصت های دیگر به مطالعه آن بپردازید


 

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

امتیازشو ثبت کنید

میانگین / 5. تعداد رای

اولین نفر شما امتیاز دهید

کمپ تخصصی آموزش کاربردی برنامه نویسی پایتون

یادگیری یکی از تخصص های محبوب بازار کاری

پایتون که برخی آن را پایتان (python) نیز میگویند یک زبان برنامه نویسی سطح بالا ،شئ گرا ، Open Source و تفسیری است که دارای دستورها و کدهای ساده و پویاست. زبان برنامه نویسی پایتون بسیار ساده تر از زبان های برنامه نویسی دیگر است. بوسیله پایتون ساخت برنامه های کاربردی به صورت ساده تر برای ما ممکن شد.
پایتون از سال 1991 ایجاد شد و از آن زمان و مخصوصا سال های اخیر توجه بسیاری از برنامه نویسان و کسانی که میخواهند با برنامه نویسی آشنا شوند را به خود جلب کرد . یکی از مهم ترین دلیل های توجه بسیار به این زبان برنامه نویسی دوست داشتنی کابردها و قابلیت های فراوان آن است :
ادامه...

شاید به این مطالب نیز علاقه مند باشید.

مقایسه‌ی دو زبان برنامه نویسی مهم :‌پایتون و PHP

مقایسه دو زبان برنامه‌نویسی مهم : پایتون و PHP

در سال‌های اخیر پایتون به یکی از زبان‌های برنامه‌نویسی پرطرفدار تبدیل شده است. طبق آمارهای گوگل، از سال ۲۰۱۲ طرفداران پایتون حتی از زبان محبوب PHP هم پیشی گرفته و پیش‌بینی‌ها…

کتابخانه های کاربردی پایتون

۱۵ کتابخانه پایتون که باید بیاموزید! (راهنمای جامع برنامه نویسان پایتون)

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

معرفی جامع فریم ورک جانگو

راهنمای جامع کتابخانه Django در زبان پایتون

جانگو یا Django یک فریم ورک سطح بالا در زبان برنامه نویسی پایتون می‌باشد که به توسعه پرسرعت و طراحی کم نقص و بهینه صفحات تحت وب بسیار کمک می…

به اشتراک در آمدن
Notify of
guest
0 Comments
نظرات درون خطی
دیدن همه نظرات
آکادمی آمانج
مهارت آموزی جهت ورود به بازار کار

تاییدیه ها

تهران - امیرآباد، دانشکده فنی دانشگاه تهران، ساختمان مکانیک جدید واحد ۱۱۴

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

امتیازشو ثبت کنید

میانگین / 5. تعداد رای

اولین نفر شما امتیاز دهید

کمپ تخصصی آموزش کاربردی برنامه نویسی پایتون

یادگیری یکی از تخصص های محبوب بازار کاری

پایتون که برخی آن را پایتان (python) نیز میگویند یک زبان برنامه نویسی سطح بالا ،شئ گرا ، Open Source و تفسیری است که دارای دستورها و کدهای ساده و پویاست. زبان برنامه نویسی پایتون بسیار ساده تر از زبان های برنامه نویسی دیگر است. بوسیله پایتون ساخت برنامه های کاربردی به صورت ساده تر برای ما ممکن شد.
پایتون از سال 1991 ایجاد شد و از آن زمان و مخصوصا سال های اخیر توجه بسیاری از برنامه نویسان و کسانی که میخواهند با برنامه نویسی آشنا شوند را به خود جلب کرد . یکی از مهم ترین دلیل های توجه بسیار به این زبان برنامه نویسی دوست داشتنی کابردها و قابلیت های فراوان آن است :
ادامه...

کد تخفیف نمیخوای؟

اگه میخوای کد تخفیف شرکت در دوره‌ها، وبینارهای رایگان، بهترین مقالات آکادمی آمانج رو از دست ندی ایمیلت رو این زیر وارد کن!
همین الان عضو شو
close-link
من اینجام