Izrada jednostavnog chatbota od nule u Pythonu (pomoću NLTK -a)
NLTK (Natural Language Toolkit) vodeća je platforma za izgradnju programa Python za rad s podacima o ljudskom jeziku.
Dakle, što je chatbot?
DO chatbot je softver koji pokreće umjetna inteligencija u uređaju (Siri, Alexa, Google Assistant itd.), aplikaciji, web stranici ili drugim mrežama koje pokušavaju mjeriti potrebe potrošača, a zatim im pomoći u izvršavanju određenog zadatka, poput komercijalne transakcije, rezervacije hotela , slanje obrazaca itd. Danas gotovo svaka tvrtka ima chatbot angažiran za interakciju s korisnicima. Neki od načina na koje tvrtke koriste chatbotove su:
- Za dostavu podataka o letu
- za povezivanje kupaca i njihovih financija
- Kao korisnička podrška
Mogućnosti su (gotovo) neograničene.
Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza .
Kako Chatboti rade?
Općenito postoje dvije varijante chatboti : Na temelju pravila i Samoučenje.
u odnosu na teme koda 2020
- U Pristup temeljen na pravilima , bot odgovara na pitanja temeljena na nekim pravilima na kojima se obučava. Definirana pravila mogu biti vrlo jednostavna do vrlo složena. Botovi mogu rješavati jednostavne upite, ali ne uspijevaju upravljati složenim.
- The Botovi za samoučenje su oni koji koriste neke pristupe temeljene na strojnom učenju i definitivno su učinkovitiji od robota temeljenih na pravilima. Ovi botovi mogu biti daljnje dvije vrste: Na temelju preuzimanja ili Generativno
i) u modeli bazirani na pretraživanju , chatbot koristi neku heuristiku za odabir odgovora iz biblioteke unaprijed definiranih odgovora. Chatbot koristi poruku i kontekst razgovora za odabir najboljeg odgovora s unaprijed definiranog popisa poruka robota. Kontekst može uključivati trenutačni položaj u stablu dijaloga, sve prethodne poruke u razgovoru, prethodno spremljene varijable (npr. Korisničko ime). Heuristika za odabir odgovora može se projektirati na mnogo različitih načina, od uvjetne logike temeljene na pravilima if-else do klasifikatora strojnog učenja.
ii) Generativno botovi mogu generirati odgovore i ne odgovaraju uvijek s jednim od odgovora iz skupa odgovora. To ih čini inteligentnijima dok uzimaju riječ po riječ iz upita i generiraju odgovore.
Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza . ### Izgradnja Bota
Preduvjeti
Praktično znanje o scikit knjižnica i NLTK pretpostavlja se. No, ako ste tek počeli s NLP -om, još uvijek možete pročitati članak, a zatim se vratiti na izvore.
NLP
Područje studija koje se usredotočuje na interakcije između ljudskog jezika i računala naziva se Obrada prirodnog jezika ili skraćeno NLP. Nalazi se na sjecištu informatike, umjetne inteligencije i računalne lingvistike [Wikipedia]. NLP je način na koji računala analiziraju, razumiju i izvode značenje iz ljudskog jezika na pametan i koristan način. Koristeći NLP, programeri mogu organizirati i strukturirati znanje za obavljanje zadataka kao što su automatsko sažimanje, prevođenje, prepoznavanje imenovanih entiteta, izdvajanje odnosa, analiza osjećaja, prepoznavanje govora i segmentacija tema.
NLTK: Kratak uvod
NLTK (Natural Language Toolkit) vodeća je platforma za izgradnju programa Python za rad s podacima o ljudskom jeziku. Omogućuje sučelje jednostavno za korištenje preko 50 korpusa i leksičkih izvora kao što je WordNet, zajedno s paketom biblioteka za obradu teksta za klasifikaciju, tokenizaciju, nastanak, označavanje, raščlanjivanje i semantičko zaključivanje, omote za NLP knjižnice industrijske snage.
NLTK je nazvan prekrasnim alatom za poučavanje i rad, računalnu lingvistiku pomoću Pythona i nevjerojatnu biblioteku za igru s prirodnim jezikom.
Obrada prirodnog jezika s Pythonom pruža praktičan uvod u programiranje za obradu jezika. Toplo preporučujem ovu knjigu ljudima koji počinju s NLP -om s Pythonom.
Preuzimanje i instaliranje NLTK -a
- U Pristup temeljen na pravilima , bot odgovara na pitanja temeljena na nekim pravilima na kojima se obučava. Definirana pravila mogu biti vrlo jednostavna do vrlo složena. Botovi mogu rješavati jednostavne upite, ali ne uspijevaju upravljati složenim.
- The Botovi za samoučenje su oni koji koriste neke pristupe temeljene na strojnom učenju i definitivno su učinkovitiji od robota temeljenih na pravilima. Ovi botovi mogu biti daljnje dvije vrste: Na temelju preuzimanja ili Generativno
Za upute specifične za platformu pročitajte ovdje .
Instaliranje NLTK paketa
uvezite NLTK i pokrenite | _+_ | Ovo će otvoriti NLTK program za preuzimanje s kojeg možete odabrati korpus i modele za preuzimanje. Također možete preuzeti sve pakete odjednom.
Predobrada teksta s NLTK-om
Glavni problem s tekstualnim podacima je to što su svi u tekstualnom formatu (nizovi). Međutim, algoritmi strojnog učenja trebaju neku vrstu numeričkog vektora značajki kako bi izvršili zadatak. Stoga prije nego što počnemo s bilo kojim NLP projektom moramo ga prethodno obraditi kako bi bio idealan za rad. Osnovni, temeljni prethodna obrada teksta uključuje:
- Za dostavu podataka o letu
- za povezivanje kupaca i njihovih financija
- Kao korisnička podrška
Paket podataka NLTK uključuje unaprijed obučeni Punkt tokenizator za engleski jezik.
- Za dostavu podataka o letu
- za povezivanje kupaca i njihovih financija
- Kao korisnička podrška
Vrećica riječi
Nakon početne faze predprocesiranja, moramo transformirati tekst u smisleni vektor (ili niz) brojeva. Vrećica riječi predstavlja tekst koji opisuje pojavu riječi u dokumentu. Uključuje dvije stvari:
quickbooks pdf alat za popravak Windows 10
• Rječnik poznatih riječi.
• Mjera prisutnosti poznatih riječi.
Zašto se zove a vrećica riječi? To je zato što se odbacuju sve informacije o redoslijedu ili strukturi riječi u dokumentu i samo se model bavi pojavljuju li se poznate riječi u dokumentu, a ne tamo gdje se pojavljuju u dokumentu.
Intuicija iza vrećice riječi je da su dokumenti slični ako imaju sličan sadržaj. Također, možemo saznati nešto o značenju dokumenta samo iz njegovog sadržaja.
Na primjer, ako naš rječnik sadrži riječi {Učenje, je, ne, sjajno}, a mi želimo vektorizirati tekst Učenje je odlično, imali bismo sljedeći vektor: (1, 1, 0, 0, 1) .
Pristup TF-IDF-a
Problem s pristupom Vrećica riječi jest što vrlo česte riječi počinju dominirati u dokumentu (npr. Veći rezultat), ali ne mogu sadržavati toliko informativnog sadržaja. Također, duljim će dokumentima dati veću težinu nego kraćim dokumentima.
Jedan je pristup mijenjati učestalost riječi prema učestalosti pojavljivanja u svim dokumentima, tako da se bodovi za česte riječi poput onih koje su također česte u svim dokumentima kažnjavaju. Ovaj pristup bodovanju naziva se Pojam Frekvencija-Inverzna učestalost dokumenta , ili TF-IDF ukratko, gdje:
Učestalost termina : je bodovanje učestalosti riječi u trenutnom dokumentu.
nltk.download().
Inverzna učestalost dokumenata : je bodovanje koliko je rijetka riječ u dokumentima.
TF = (Number of times term t appears in a document)/(Number of terms in the document)
Tf-idf težina je težina koja se često koristi u pronalaženju informacija i pretraživanju teksta. Ova je težina statistička mjera koja se koristi za procjenu važnosti riječi za dokument u zbirci ili korpusu
Primjer:
Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza . > Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza . > Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza . > Povijest chatbotova datira od 1966. godine kada je Weizenbaum izumio računalni program pod nazivom ELIZA. Imitirao je jezik psihoterapeuta iz samo 200 redaka koda. Još uvijek možete razgovarati s njim ovdje: Eliza . #### Sličnost kosinusa
html prikaz trenutnog datuma
TF-IDF je transformacija primijenjena na tekstove kako bi se dobila dva realno vrijedna vektora u vektorskom prostoru. Tada možemo dobiti Kosinus sličnost bilo kojeg para vektora uzimajući njihov točkasti umnožak i dijeleći ga umnoškom njihovih normi. To daje kosinus kuta između vektora. Kosinusna sličnost je mjera sličnosti između dva vektora različita od nule. Pomoću ove formule možemo saznati sličnost između bilo koja dva dokumenta d1 i d2.
IDF = 1+log(N/n), where, N is the number of documents and n is the number of documents a term t has appeared in.
gdje su d1, d2 dva vektora različita od nule.
Za detaljno objašnjenje i praktični primjer sličnosti TF-IDF-a i kosinusa pogledajte dokument u nastavku .
Sada imamo poštenu ideju o procesu NLP -a. Vrijeme je da prijeđemo na naš pravi zadatak, tj. Stvaranje Chatbota. Chatbot ćemo ovdje nazvati 'ROBO 🤖 ’**
Uvoz potrebnih knjižnica
Cosine Similarity (d1, d2) = Dot product(d1, d2) / ||d1|| * ||d2||
Korpus
Za naš primjer, koristit ćemo stranicu Wikipedia za chatboti kao naš korpus. Kopirajte sadržaj sa stranice i postavite ga u tekstualnu datoteku pod nazivom 'chatbot.txt'. Međutim, možete koristiti bilo koji korpus po svom izboru.
Čitanje podataka
Čitat ćemo u datoteci corpus.txt i cijeli korpus pretvoriti u popis rečenica i popis riječi za daljnju obradu.
import nltk import numpy as np import random import string # to process standard python strings
Pogledajmo primjer poslanih_tokena i riječi_tokena
f=open('chatbot.txt','r',errors = 'ignore') raw=f.read() raw=raw.lower()# converts to lowercase nltk.download('punkt') # first-time use only nltk.download('wordnet') # first-time use only sent_tokens = nltk.sent_tokenize(raw)# converts to list of sentences word_tokens = nltk.word_tokenize(raw)# converts to list of words
Prethodna obrada neobrađenog teksta
Sada ćemo definirati funkciju zvanu LemTokens koja će uzimati žetone za unos i vraćati normalizirane žetone.
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']
Podudaranje ključnih riječi
Zatim ćemo definirati funkciju pozdravljanja od strane robota, tj. Ako je korisnikov unos pozdrav, bot će vratiti pozdravni odgovor. ELIZA koristi jednostavno podudaranje ključnih riječi za pozdrave. Ovdje ćemo koristiti isti koncept.
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)))
Generiranje odgovora
Za generiranje odgovora našeg bota na ulazna pitanja, koristit će se koncept sličnosti dokumenta. Stoga započinjemo uvozom potrebnih modula.
- Za dostavu podataka o letu
- za povezivanje kupaca i njihovih financija
- Kao korisnička podrška
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)
- Za dostavu podataka o letu
- za povezivanje kupaca i njihovih financija
- Kao korisnička podrška
from sklearn.feature_extraction.text import TfidfVectorizer
To će se koristiti za pronalaženje sličnosti između riječi koje je korisnik unio i riječi u korpusu. Ovo je najjednostavnija moguća implementacija chatbota.
Definiramo funkciju odgovor koja pretražuje korisnikov izgovor za jednu ili više poznatih ključnih riječi i vraća jedan od nekoliko mogućih odgovora. Ako ne pronađe ulaz koji odgovara nekoj od ključnih riječi, vraća odgovor: Žao mi je! Ne razumijem te
from sklearn.metrics.pairwise import cosine_similarity
Na kraju ćemo navesti retke koje želimo da naš bot izgovara dok započinje i završava razgovor ovisno o unosu korisnika.
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
Tako da je to otprilike to. Naš prvi chatbot kodirali smo u NLTK -u. Cijeli kôd možete pronaći s korpusom ovdje . Pogledajmo sada kako on komunicira s ljudima:
Ovo nije bilo tako loše. Iako chatbot nije mogao dati zadovoljavajući odgovor na neka pitanja, drugima je to pošlo za rukom.
Zaključak
Iako je to vrlo jednostavan bot s gotovo nikakvim kognitivnim vještinama, to je dobar način da uđete u NLP i upoznate se s chatbotovima. Iako 'ROBO' reagira na unos korisnika. To neće zavarati vaše prijatelje, a za proizvodni sustav poželjet ćete razmotriti jednu od postojećih bot platformi ili okvira, ali ovaj bi vam primjer trebao pomoći da razmislite o dizajnu i izazovu stvaranja chatbota. Internet je preplavljen resursima i nakon čitanja ovog članka siguran sam da ćete htjeti stvoriti vlastiti chatbot. Tako sretno petljanje !!
Hvala na čitanju ❤
Ako vam se svidio ovaj post, podijelite ga sa svojim prijateljima iz programiranja!
#python #strojno učenje #dialogflow #data-science
gdje kupiti storm coin