日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】创建强大聊天机器人的初学者指南

發(fā)布時(shí)間:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】创建强大聊天机器人的初学者指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?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?chatterbot

ChatterBot文本語(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。

  • from?chatterbot?import?ChatBot from?chatterbot.trainers?import?ListTrainer from?chatterbot.trainers?import?ChatterBotCorpusTrainerimport?os#?創(chuàng)建聊天機(jī)器人實(shí)例 bot?=?ChatBot('Buddy',storage_adapter='chatterbot.storage.SQLStorageAdapter',database_uri='sqlite:///database.sqlite3_eng',logic_adapters=['chatterbot.logic.MathematicalEvaluation','chatterbot.logic.BestMatch',{'import_path':?'chatterbot.logic.BestMatch','default_response':?'I?am?sorry,?but?I?do?not?understand.','maximum_similarity_threshold':?0.90}],read_only?=?True,preprocessors=['chatterbot.preprocessors.clean_whitespace','chatterbot.preprocessors.unescape_html','chatterbot.preprocessors.convert_to_ascii'])#?定位訓(xùn)練文件夾 directory?=?'training_data'for?filename?in?os.listdir(directory):if?filename.endswith(".txt"):?#?only?pick?txt?file?for?trainingprint('\n?Chatbot?training?with?'+os.path.join(directory,?filename)+'?file')training_data?=?open(os.path.join(directory,?filename)).read().splitlines()trainer?=?ListTrainer(bot)?#?bot?trainingtrainer.train(training_data)else:continue#?用戶(hù)選擇是否使用英語(yǔ)語(yǔ)料庫(kù)數(shù)據(jù)進(jìn)行訓(xùn)練 decision?=?input('Train?chatbot?with?English?corpus?data??(Y/N):?')if?decision?==?'Y':print('\n?Chatbot?training?with?English?corpus?data')trainer_corpus?=?ChatterBotCorpusTrainer(bot)trainer_corpus.train('chatterbot.corpus.english')
  • 然后,運(yùn)行「chatbot.py」啟動(dòng)聊天機(jī)器人。

  • from?chatterbot?import?ChatBotbot?=?ChatBot('Buddy',storage_adapter='chatterbot.storage.SQLStorageAdapter',database_uri='sqlite:///database.sqlite3_eng',logic_adapters=['chatterbot.logic.MathematicalEvaluation','chatterbot.logic.BestMatch',{'import_path':?'chatterbot.logic.BestMatch','default_response':?'I?am?sorry,?but?I?do?not?understand.','maximum_similarity_threshold':?0.90}],read_only?=?True,preprocessors=['chatterbot.preprocessors.clean_whitespace','chatterbot.preprocessors.unescape_html','chatterbot.preprocessors.convert_to_ascii'])#?運(yùn)行并獲得用戶(hù)的響應(yīng)。 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)

    你已經(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。