【NLP】创建强大聊天机器人的初学者指南
作者 |?Louis Teo?
編譯 |?VK?
來(lái)源?| Towards Data Science
你是否面臨著太多來(lái)自客戶(hù)的標(biāo)準(zhǔn)要求和問(wèn)題,并且難以應(yīng)對(duì)?你是否在尋找一種既不增加成本又?jǐn)U大客戶(hù)服務(wù)的方法?
在這篇文章中,我將向你展示如何輕松創(chuàng)建一個(gè)強(qiáng)大的聊天機(jī)器人來(lái)處理1)你不斷增長(zhǎng)的客戶(hù)請(qǐng)求和查詢(xún),2)使用不同語(yǔ)言進(jìn)行交流。
我還將向你展示如何使用Flask將聊天機(jī)器人部署到web應(yīng)用程序中。
動(dòng)機(jī)
Covid-19大流行給世界帶來(lái)了沉重打擊。由于許多業(yè)務(wù)受到了重大控制而遭受了鎖定/損失。為了度過(guò)這段艱難時(shí)期,許多公司被迫將業(yè)務(wù)轉(zhuǎn)移到網(wǎng)上。
在線(xiàn)企業(yè)主面臨的一個(gè)主要的、常見(jiàn)的問(wèn)題是必須對(duì)客戶(hù)提出的大量問(wèn)題和要求作出回應(yīng)。對(duì)于那些人力資源有限的人來(lái)說(shuō),不可能及時(shí)處理所有的請(qǐng)求。
為了解決這個(gè)問(wèn)題,許多企業(yè)主開(kāi)始使用聊天機(jī)器人來(lái)為他們的客戶(hù)服務(wù)。
什么是聊天機(jī)器人
聊天機(jī)器人是一種人工智能驅(qū)動(dòng)的智能軟件,它能夠與人類(lèi)對(duì)話(huà)并執(zhí)行類(lèi)似人類(lèi)的任務(wù)。聊天機(jī)器人存在于許多智能設(shè)備(如Siri(iOS)、Google Assistant(Android)、Cortana(微軟)、Alexa(亞馬遜))、網(wǎng)站和應(yīng)用程序中。
為什么要用聊天機(jī)器人
根據(jù)HubSpot進(jìn)行的一項(xiàng)研究,71%的用戶(hù)愿意使用快速響應(yīng)的聊天應(yīng)用程序來(lái)獲得客戶(hù)幫助,許多人這樣做是因?yàn)樗麄兿M约旱膯?wèn)題能夠得到快速解決(當(dāng)然,也是高效的)。
一個(gè)聊天機(jī)器人,如果配置智能化,確實(shí)可以通過(guò)保持相同水平的客戶(hù)滿(mǎn)意度,同時(shí)允許人力資源集中在關(guān)鍵操作上,為企業(yè)釋放巨大的價(jià)值。
如何創(chuàng)建聊天機(jī)器人
多虧了Python中的ChatterBot庫(kù),創(chuàng)建chatbot不再像以前那樣是一項(xiàng)艱巨的機(jī)器學(xué)習(xí)任務(wù)。
現(xiàn)在,讓我們開(kāi)始創(chuàng)建
(1) 安裝ChatterBot庫(kù)
我們將從安裝ChatterBot庫(kù)開(kāi)始。安裝命令如下:
pip?install?chatterbotChatterBot文本語(yǔ)料庫(kù)(由大量結(jié)構(gòu)化文本組成的語(yǔ)言資源)分布在Python包中,因此需要單獨(dú)安裝:
pip?install?chatterbot_corpus如果你以前沒(méi)有安裝spaCy(一個(gè)用于高級(jí)自然語(yǔ)言處理的開(kāi)源庫(kù)),請(qǐng)現(xiàn)在安裝,因?yàn)镃hatterBot庫(kù)需要spaCy庫(kù)來(lái)工作:
pip?install?spacy安裝spaCy庫(kù)后安裝spaCy English(“en”)模型:
python?-m?spacy?download?en(2) 創(chuàng)建聊天機(jī)器人實(shí)例
在將整個(gè)聊天機(jī)器人打包成可執(zhí)行的Python腳本之前,我們將使用Jupyter Notebook開(kāi)發(fā)聊天機(jī)器人。讓我們從導(dǎo)入需要的模塊開(kāi)始:
from?chatterbot?import?ChatBot我們將創(chuàng)建一個(gè)chatbot實(shí)例,將bot命名為Buddy,然后指定幾個(gè)參數(shù)。我們需要指定的參數(shù)是:
「storage_adapter」:數(shù)據(jù)庫(kù)的“connector”類(lèi)型(如果使用SQL數(shù)據(jù)庫(kù),則使用'chatterbot.storage.SQLStorageAdapter';對(duì)于MongoDB,使用'chatterbot.storage.MongoDatabaseAdapter’). 在這種情況下,我們將使用SQL數(shù)據(jù)庫(kù)。
「database_uri」:數(shù)據(jù)庫(kù)名稱(chēng)
「logic_adapters」:ChatterBot如何選擇對(duì)給定輸入語(yǔ)句的響應(yīng)的邏輯。我們將使用BestMatch—一個(gè)邏輯適配器,它根據(jù)與輸入語(yǔ)句最接近的匹配項(xiàng)的已知響應(yīng)返回響應(yīng)。
「read_only」:我們將設(shè)置為真,因?yàn)槲覀冎幌胱屃奶鞕C(jī)器人從我們的訓(xùn)練數(shù)據(jù)中學(xué)習(xí)。
如果不指定任何參數(shù),則名為「db.sqlite3」的數(shù)據(jù)庫(kù)將被創(chuàng)建,并且默認(rèn)為你選擇最佳匹配邏輯。
bot?=?ChatBot('Buddy',storage_adapter='chatterbot.storage.SQLStorageAdapter',database_uri='sqlite:///database.sqlite3_eng',logic_adapters?=?['chatterbot.logic.BestMatch'],read_only?=?True)(3) 訓(xùn)練聊天機(jī)器人
是時(shí)候訓(xùn)練我們的聊天機(jī)器人了……(什么,就這樣?是的,這不是開(kāi)玩笑!)
我們將使用ChatterBot中可用的模塊來(lái)訓(xùn)練聊天機(jī)器人。訓(xùn)練只是將對(duì)話(huà)輸入到聊天機(jī)器人的數(shù)據(jù)庫(kù)中。
一旦給聊天機(jī)器人一個(gè)數(shù)據(jù)集,它就會(huì)在聊天機(jī)器人“知識(shí)圖”中生成必要的條目,以正確的順序表示輸入和輸出。
讓我們訓(xùn)練我們的聊天機(jī)器人能夠與我們進(jìn)行基本的對(duì)話(huà)。
我們導(dǎo)入ListTrainer模塊,通過(guò)傳遞chatbot對(duì)象(Buddy)并調(diào)用train()方法傳遞句子列表來(lái)實(shí)例化它。
from?chatterbot.trainers?import?ListTrainer trainer?=?ListTrainer(bot)trainer.train(["Hi,?can?I?help?you","Who?are?you?","I?am?your?virtual?assistant.?Ask?me?any?questions...","Where?do?you?operate?","We?operate?from?Singapore","What?payment?methods?do?you?accept?","We?accept?debit?cards?and?major?credit?cards","I?would?like?to?speak?to?your?customer?service?agent","please?call?+65?3333?3333.?Our?operating?hours?are?from?9am?to?5pm,?Monday?to?Friday"])聊天機(jī)器人測(cè)試
讓我們用一個(gè)input語(yǔ)句給機(jī)器人測(cè)試一下。
response?=?bot.get_response?('payment?method') print(response)我們還可以使用while循環(huán)和get_response()方法讓聊天機(jī)器人連續(xù)響應(yīng)我們的每個(gè)查詢(xún)。當(dāng)我們收到用戶(hù)的“Bye”語(yǔ)句時(shí),我們結(jié)束循環(huán)并停止程序。
name?=?input('Enter?Your?Name:?') print?('Welcome?to?Chatbot?Service!?Let?me?know?how?can?I?help?you') while?True:request?=?input(name+':')if?request=="Bye"?or?request=='bye':print('Bot:?Bye')breakelse:response=bot.get_response(request)print('Bot:?',?response)你剛剛創(chuàng)建了你的第一個(gè)聊天機(jī)器人!
語(yǔ)料庫(kù)數(shù)據(jù)訓(xùn)練
當(dāng)然,你會(huì)希望你的聊天機(jī)器人能夠在我們剛剛輸入的內(nèi)容的基礎(chǔ)上進(jìn)行更多的對(duì)話(huà)(!)-在這種情況下,我們需要進(jìn)一步訓(xùn)練我們的聊天機(jī)器人。
幸運(yùn)的是,我們簡(jiǎn)化了這項(xiàng)任務(wù)。我們可以使用語(yǔ)料庫(kù)數(shù)據(jù)和實(shí)用程序模塊快速訓(xùn)練聊天機(jī)器人進(jìn)行通信。在撰寫(xiě)本文時(shí),ChatterBot獨(dú)立支持世界上22種主要語(yǔ)言——英語(yǔ)、漢語(yǔ)、西班牙語(yǔ)、印地語(yǔ)、法語(yǔ)等。
這里我們將使用英語(yǔ)語(yǔ)料庫(kù)數(shù)據(jù)來(lái)訓(xùn)練聊天機(jī)器人用英語(yǔ)進(jìn)行交流。
注意:如果你在運(yùn)行語(yǔ)料庫(kù)訓(xùn)練時(shí)遇到問(wèn)題,請(qǐng)將此chatterbot_corpus文件夾(https://github.com/gunthercox/chatterbot-corpus/tree/master/chatterbot_corpus)復(fù)制到錯(cuò)誤消息中指定的文件目錄中
from?chatterbot.trainers?import?ChatterBotCorpusTrainertrainer?=?ChatterBotCorpusTrainer(bot)trainer.train('chatterbot.corpus.english')讓我們測(cè)試一下我們的聊天機(jī)器人是否變得更聰明了…。
對(duì)!它變得更聰明了-它現(xiàn)在可以告訴你一個(gè)笑話(huà)…
關(guān)于訓(xùn)練聊天機(jī)器人使用不同語(yǔ)言的重要說(shuō)明
要訓(xùn)練聊天機(jī)器人使用另一種語(yǔ)言,你需要用新名稱(chēng)創(chuàng)建一個(gè)新的聊天機(jī)器人實(shí)例,打開(kāi)一個(gè)新的SQL數(shù)據(jù)庫(kù),并進(jìn)行新的訓(xùn)練
你不能訓(xùn)練同一個(gè)聊天機(jī)器人說(shuō)多種語(yǔ)言-這會(huì)混淆聊天機(jī)器人。聊天機(jī)器人只能用一種語(yǔ)言交流。
預(yù)處理輸入
ChatterBot提供了幾個(gè)內(nèi)置的預(yù)處理器,允許我們?cè)赽ot的邏輯適配器處理語(yǔ)句之前清理輸入語(yǔ)句。
清理使我們的輸入語(yǔ)句更易讀,更容易被聊天機(jī)器人分析。它從輸入語(yǔ)句中刪除可能干擾文本分析的“噪音”,例如額外的空格、Unicode字符和轉(zhuǎn)義的html字符。
bot?=?ChatBot('Buddy',storage_adapter='chatterbot.storage.SQLStorageAdapter',database_uri='sqlite:///database.sqlite3_eng',logic_adapters?=?['chatterbot.logic.BestMatch'],read_only?=?True,preprocessors=['chatterbot.preprocessors.clean_whitespace',????????????????????????????'chatterbot.preprocessors.unescape_html',??????????????????????????'chatterbot.preprocessors.convert_to_ascii'])在包含了預(yù)處理器函數(shù)之后,重新運(yùn)行chatbot,你可以看到對(duì)于「who are you」和「whó are yóu」.,我們得到了相同的響應(yīng)。
低置信度的情況
除此之外,我們還可以通過(guò)將logic adapter的屬性設(shè)置為:
默認(rèn)回答:“對(duì)不起,我不明白。我還在學(xué)習(xí)。請(qǐng)聯(lián)系abc@xxx.com尋求進(jìn)一步的幫助
最大相似度閾值:0.9
maximum_similarity_threshold:停止搜索過(guò)程之前,兩個(gè)語(yǔ)句之間所需的最大相似度。匹配語(yǔ)句的搜索將繼續(xù),直到找到相似度大于或等于的語(yǔ)句或搜索集用盡為止。默認(rèn)為0.95。
bot?=?ChatBot('Buddy',storage_adapter='chatterbot.storage.SQLStorageAdapter',database_uri='sqlite:///database.sqlite3_eng',logic_adapters?=?[{'import_path':?'chatterbot.logic.BestMatch','default_response':?'I?am?sorry,?I?do?not?understand.?I?am?still?learning.?Please?contact?abc@xxx.com?for?further?assistance.','maximum_similarity_threshold':?0.90}],read_only?=?True,preprocessors=['chatterbot.preprocessors.clean_whitespace', 'chatterbot.preprocessors.unescape_html', 'chatterbot.preprocessors.convert_to_ascii'])讓我們嘗試從一個(gè)意外的輸入中獲取響應(yīng)-我們的聊天機(jī)器人將在不理解語(yǔ)句時(shí)使用「default_response」進(jìn)行響應(yīng)。
這是這個(gè)項(xiàng)目的Github鏈接。你可以下載可執(zhí)行的Python腳本,你可以馬上用它來(lái)訓(xùn)練你的聊天機(jī)器人!請(qǐng)下載訓(xùn)練數(shù)據(jù)文件夾并編輯對(duì)話(huà)文件以滿(mǎn)足你的需要:https://github.com/louisteo9/Chatbot
完整的代碼和運(yùn)行說(shuō)明
在把所有代碼放在一起之后,讓我們使用可執(zhí)行腳本來(lái)訓(xùn)練我們的聊天機(jī)器人,看看我們的聊天機(jī)器人在行動(dòng)中…!
創(chuàng)建一個(gè)「training_data」文件夾,并將要訓(xùn)練的所有對(duì)話(huà)存儲(chǔ)在文本文件中。訓(xùn)練腳本將讀取文件夾中的所有文本文件。
運(yùn)行「chatbot_training.py」. 如果你想用英語(yǔ)語(yǔ)料庫(kù)來(lái)訓(xùn)練聊天機(jī)器人,你會(huì)被要求選擇Y或N。
然后,運(yùn)行「chatbot.py」啟動(dòng)聊天機(jī)器人。
你已經(jīng)完成了聊天機(jī)器人訓(xùn)練并在終端上運(yùn)行。
使用Flask將聊天機(jī)器人部署為web應(yīng)用程序
下一步是什么?我們將把我們的聊天機(jī)器人部署到一個(gè)web應(yīng)用程序中,這樣客戶(hù)就可以使用它了。
要在web應(yīng)用程序上運(yùn)行chatbot,我們需要找到一種方法讓?xiě)?yīng)用程序接收傳入的數(shù)據(jù)并返回?cái)?shù)據(jù)。我們可以用我們想要的任何方式來(lái)實(shí)現(xiàn)這一點(diǎn)—HTTP請(qǐng)求、web套接字等
在ChatterBot FAQ(https://chatterbot.readthedocs.io/en/stable/faq.html)頁(yè)面上有一些現(xiàn)有的例子向我們展示了如何做到這一點(diǎn)。我將向你展示如何使用Flask部署web應(yīng)用程序。
從我的github下載示例代碼,然后根據(jù)需要編輯static和template文件夾中的文件:https://github.com/louisteo9/chatbot
之后,讓我們運(yùn)行「web_app.py」.
這將把我們的聊天機(jī)器人部署到http://127.0.0.1:5000/
啟動(dòng)你的web瀏覽器,然后轉(zhuǎn)到上面的URL啟動(dòng)我們的聊天機(jī)器人。
下一步
再次祝賀你!你已經(jīng)成功地構(gòu)建了第一個(gè)聊天機(jī)器人,并使用Flask將其部署到一個(gè)web應(yīng)用程序中。我希望聊天機(jī)器人在回答一些你訓(xùn)練過(guò)的標(biāo)準(zhǔn)商務(wù)問(wèn)題方面做得很好。
為了進(jìn)一步提高聊天機(jī)器人的性能,你可以做的一件事是編制一份迄今為止由客戶(hù)發(fā)布的常見(jiàn)問(wèn)題解答列表,提供常見(jiàn)問(wèn)題解答,然后在聊天機(jī)器人上對(duì)他們進(jìn)行訓(xùn)練。
為什么有些聊天機(jī)器人沒(méi)有達(dá)到預(yù)期?有些聊天機(jī)器人之所以失敗,僅僅是因?yàn)閷?duì)企業(yè)提出的標(biāo)準(zhǔn)問(wèn)題和要求沒(méi)有得到充分的分析,結(jié)果聊天機(jī)器人沒(méi)有得到所需的訓(xùn)練。
訓(xùn)練和改進(jìn)你的聊天機(jī)器人在一開(kāi)始是一個(gè)持續(xù)的過(guò)程,類(lèi)似于人類(lèi)學(xué)習(xí)新技能和知識(shí)的方式。一旦學(xué)習(xí)到這些技能,它們就被構(gòu)建在聊天機(jī)器人中,聊天機(jī)器人不需要再接受訓(xùn)練,除非你的業(yè)務(wù)發(fā)展壯大。
接下來(lái),你可以考慮將你的聊天機(jī)器人部署到PaaS,它可以完全從云端托管和運(yùn)行web應(yīng)用程序。你可以考慮的一個(gè)流行的免費(fèi)PaaS是Heroku。
往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線(xiàn)及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線(xiàn)手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯 獲取本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi): https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請(qǐng)掃碼:總結(jié)
以上是生活随笔為你收集整理的【NLP】创建强大聊天机器人的初学者指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【算法基础】数据结构导论第五章-图.pp
- 下一篇: 【学术相关】大学老师的职业前景究竟怎么样