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