
Úvod
V tomto projektu vytvořím v pythonu chatbota za pomocí knihovny ChatterBot.
První krok: Vytvoření instance chatbotu
V prvním kroku jsem si vytvořil nové prostředí v balíčkovacím nástroji Conda. Toto prostředí jsem nazval chatbotenv.
Pomocí příkazu pip install chatterbot==1.0.4 pytz nainstaluji knihovny Chatterbot a pytz.
Dále jsem si napsal jednoduchý python program, ve kterém z knihovny chatterbot naimporuji třídu Chatbot, ze které následně vytvořím instanci samotného chatbotu. Svého nového chatbota pojmenuji Monsterbot.
from chatterbot import ChatBot
chatbot = ChatBot("Monsterbot")
Dále si vytořím podmínky pro opuštění programu.
exit_conditions = (":q", "quit", "exit")
Nyní si pomocí smyčky while spustím prompt samotného chatbotu. Jako avatar jsem zvolil smajlík ☻ .
while True:
query = input(">")
if query in exit_conditions:
break
else:
print(f"☻ {chatbot.get_response(query)}")
Při prvním spuštění programu si knihovna stáhne ještě dodatečné potřebné balíčky. Nyní již můžeme zadávat dotazy do příkazové řádky.
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] /home/py/nltk_data...
[nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.
[nltk_data] Downloading package punkt to /home/py/nltk_data...
[nltk_data] Unzipping tokenizers/punkt.zip.
[nltk_data] Downloading package stopwords to /home/py/nltk_data...
[nltk_data] Unzipping corpora/stopwords.zip.
[nltk_data] Downloading package wordnet to /home/py/nltk_data...
>hello
☻ hello
>are you a chatbot?
☻ hello
V adresáři programu se vytvoří databázový SQLite soubor db.sqlite3, ve kterém se ukládají všechny naše vstupy a propojují se s možnými výstupy. V tuto chvíli náš chatbot ještě není natrénovaný na žádné databázi, jeho odpovědi nedávají smysl.
Druhý krok: Trénink chatbotu
Nyní již máme vytvořeného chatbota, který dokáže odpovídat na dotazy. Dále je potřeba rozšířit jeho znalostní bázi, aby jeho odpovědi začali dávat větší smysl. Pro účel trénování využijeme modul chatterbot.trainers a z něj třídu ListTrainer. S její pomocí můžeme do kódu vkládat jako konverzace datový typ List, kde první položka je otázka a druhá položka odpověď.
from chatterbot.trainers import ListTrainer
trainer = ListTrainer(chatbot)
trainer.train([
"Hello",
"Hello, how are you?",
])
trainer = ListTrainer(chatbot)
trainer.train([
"Are you a chatbot?",
"Yes, I'm a monsterbot ☻ ",
])
Nyní je chatbot již schopný krátké konverzace.
>Hello
☻ Hello, how are you?
>Are you a chatbot?
☻ Yes, I'm a monsterbot ☻
Knihovna Chatterbot obsahuje také korpusové konverzace, které můžeme použí pro trénink. Na výběr je z vícero jazyků, já volím angličtinu.
po importu příslušného modulu se nám doplní dostupná konverzační témata. Je možné je trénovat i jednotlivě.
from chatterbot.trainers import ChatterBotCorpusTrainer
Training ai.yml: [####################] 100%
Training botprofile.yml: [####################] 100%
Training computers.yml: [####################] 100%
Training conversations.yml: [####################] 100%
Training emotion.yml: [####################] 100%
Training food.yml: [####################] 100%
Training gossip.yml: [####################] 100%
Training greetings.yml: [####################] 100%
Training health.yml: [####################] 100%
Training history.yml: [####################] 100%
Training humor.yml: [####################] 100%
Training literature.yml: [####################] 100%
Training money.yml: [####################] 100%
Training movies.yml: [####################] 100%
Training politics.yml: [####################] 100%
Training psychology.yml: [####################] 100%
Training science.yml: [####################] 100%
Training sports.yml: [####################] 100%
Training trivia.yml: [####################] 100%
Po importu stejným způsobem jako v předchozím příkladu zavoláme metodu train
trainer = ChatterBotCorpusTrainer(chatbot)
trainer.train(
"chatterbot.corpus.english"
)
Výstup chatbotu již začíná být zajímavějším.
>do you know something about computers?
☻ The heart of the computer, to put it simply.
>how can I use computer?
☻ Might be used in help desks, sales, entertainment and personal chatterbots.
Závěr
Knihovna ChatterBot poskytuje další možnosti, jak si svého chatbota přizpůsobit. V ideálním případě jej můžeme natrénovat na vlastních historických konverzacích, čímž se se odpovědi stávají více relevatními k požadovanému konkrétnímu využití. Například zákaznická podpora se zaměřením na prodávané produkty. Tyto konverzace lze jednoduše exportovat a následně na nich trénovat náš model. Můžeme je buď upravit vlastním postupem a uložit do daného formátu nebo využít samotného ChatterBotu, který si umí za použití zabudovaného preprocesoru data upravit sám. Do modelu můžeme dále vkládat logické adaptéry, abychom mohli lépe řídit konverzaci. Do těla chatbotu lze zakomponovat i externí API, díky které můžeme v odpovědích získávat aktuální informace, např. dopravní situace, počasí, atd.
Pro využití chatbotu v produkčním prostředí můžeme využít možnosti instalace jako Django aplikace, kterou použijeme na webových stránkách.
Dokumentaci ke knihovně ChatterBot nalezneme zde:
Tento postup vychází z článku ChatterBot: Build a Chatbot With Python
