技術(shù)進(jìn)步和自動(dòng)化開(kāi)始影響人類經(jīng)濟(jì)和日常生活的各個(gè)領(lǐng)域。人工智能的飛速發(fā)展要求訓(xùn)練計(jì)算機(jī)完成人工工作,并在業(yè)務(wù)中實(shí)現(xiàn)其用途。聊天機(jī)器人是人工智能在商業(yè)中的主要應(yīng)用之一。NLP與聊天機(jī)器人一起在客戶服務(wù)領(lǐng)域具有巨大的潛力,并且可以輕松接受客戶的訂單并向他們提供有關(guān)司服務(wù)的咨公詢。可以在公司官方網(wǎng)站上或在其他等流行的Messenger中借助bot自動(dòng)化支持中心的工作。在本文中,將為您提供有關(guān)聊天機(jī)器人開(kāi)發(fā)的簡(jiǎn)短教程,并分享在Python中構(gòu)建Telegram聊天機(jī)器人的經(jīng)驗(yàn)。
項(xiàng)目簡(jiǎn)介
如今,NLP變得非常重要,因?yàn)樗梢岳斫夥墙Y(jié)構(gòu)化文本數(shù)據(jù)。例如,它可以用于商業(yè)用途,并創(chuàng)建可以根據(jù)客戶的需求,興趣和特征對(duì)客戶進(jìn)行分類并同時(shí)處理數(shù)百萬(wàn)個(gè)請(qǐng)求的智能機(jī)器人。
我們的項(xiàng)目允許創(chuàng)建聊天機(jī)器人,該聊天機(jī)器人能夠分析客戶與顧問(wèn)之間的實(shí)時(shí)對(duì)話。可以教一個(gè)機(jī)器人以提高答案的質(zhì)量,并訓(xùn)練他處理更多個(gè)案的情況。
在線咨詢意味著與客戶進(jìn)行面對(duì)面的咨詢,并影響其作為潛在買(mǎi)家的影響。為此,顧問(wèn)應(yīng)了解客戶的個(gè)人資料。大多數(shù)在線對(duì)話是通過(guò)電話或消息來(lái)處理的。該應(yīng)用程序具有多個(gè)庫(kù),用于理解人的語(yǔ)音并將其轉(zhuǎn)換為文本數(shù)據(jù)。
據(jù)此,該項(xiàng)目的想法是建立一個(gè)能夠自學(xué)習(xí)的交互式系統(tǒng),同時(shí)通過(guò)分類和處理客戶的詞匯形式與客戶進(jìn)行交流。我們的AI機(jī)器人的主要目的是識(shí)別實(shí)體集群-相關(guān)實(shí)體的組。實(shí)體群集對(duì)于許多活動(dòng)可能非常有用。例如,我們可以分析客戶需求,并根據(jù)興趣組對(duì)需求進(jìn)行識(shí)別甚至分類。
技術(shù)棧
前端:
· Javascript編程語(yǔ)言;
· JSON對(duì)象可視化工具JSON模式查看器;
· 前端框架Twitter Bootstrap;
· 用于實(shí)時(shí)客戶端-服務(wù)器連接的SocketIO。
技術(shù)選擇
該項(xiàng)目的體系結(jié)構(gòu)基于Telegram,其后端部分以Python編程語(yǔ)言編寫(xiě)。由于Web客戶端是項(xiàng)目的主要組成部分,因此最重要的決定之一就是選擇合適的框架來(lái)實(shí)現(xiàn)Web應(yīng)用程序。有幾種用于Python語(yǔ)言的“全棧”框架:Django,Grok,web2py,Giotto。
該應(yīng)用程序用Python編程語(yǔ)言編寫(xiě),以統(tǒng)一開(kāi)發(fā)和機(jī)器學(xué)習(xí)的過(guò)程。選擇Django和Web2py框架進(jìn)行開(kāi)發(fā)。為了制作Telegram機(jī)器人并將其與Telegram服務(wù)集成,使用了Telegram Bot API。
為了實(shí)現(xiàn)項(xiàng)目的AI部分,使用了以下Python庫(kù):
· NumPy?—支持大型多維數(shù)組和矩陣的庫(kù)。
· SciPy—用于Python編程語(yǔ)言的科學(xué)儀器的開(kāi)源庫(kù),其中包含用于優(yōu)化和遺傳算法的模塊。
· NLPK庫(kù)?—在Python上用于符號(hào)和統(tǒng)計(jì)自然語(yǔ)言處理的一組庫(kù)和程序。
· Gensim Python庫(kù)?-一種流行的工具,用于基于機(jī)器學(xué)習(xí)的自動(dòng)語(yǔ)言處理。在該庫(kù)中,實(shí)現(xiàn)了聚類和分布式語(yǔ)義算法(word和doc)。它可以解決主題建模的問(wèn)題,并區(qū)分文本或文檔的主要主題。
· Scrapy-?用于從網(wǎng)頁(yè)接收數(shù)據(jù)的生產(chǎn)力最高的Python庫(kù)之一。
選擇工具的關(guān)鍵是選擇機(jī)器學(xué)習(xí)庫(kù)。在形態(tài)分析方面,我們決定選擇Pyromorphy2,因?yàn)樗С侄碚Z(yǔ)。選擇TeleBot庫(kù)以使用Telegram Bot API。Web套接字的客戶端實(shí)現(xiàn)是通過(guò)SocketIO庫(kù)處理的。Flask-SocketIO庫(kù)用于建立實(shí)時(shí)的客戶端-服務(wù)器通信。它是用于將SocketIO庫(kù)與Flask結(jié)合使用的工具-Flask是用于處理Web套接字的便捷框架。
資料庫(kù)
為了創(chuàng)建一個(gè)基于AI的機(jī)器人,有必要使用問(wèn)題和答案數(shù)據(jù)庫(kù)。客戶的查詢與漫游器的回復(fù)之間的時(shí)間間隔應(yīng)盡可能小。為了實(shí)現(xiàn)此目標(biāo),我們決定選擇Redis-一個(gè)高效的非關(guān)系數(shù)據(jù)庫(kù)。有關(guān)問(wèn)題和答案的信息存儲(chǔ)為對(duì)話中的消息塊。這種方法的優(yōu)點(diǎn)是:
· 它使人們可以方便地找到記錄的必要元素。
· 通過(guò)使用這種存儲(chǔ)數(shù)據(jù)的方式,可以記錄任意長(zhǎng)度的對(duì)話,而對(duì)哈希表中字段或鍵的數(shù)量沒(méi)有任何限制。
由于開(kāi)發(fā)的主要目標(biāo)是創(chuàng)建實(shí)時(shí)應(yīng)用程序,因此使用了網(wǎng)絡(luò)套接字技術(shù)。它們將暗示允許實(shí)時(shí)客戶端-服務(wù)器交互的交互式連接。與HTTP/HTTPS相比,Web套接字能夠與雙向流一起使用,這將加速應(yīng)用程序的工作。它們對(duì)于創(chuàng)建任何類型的實(shí)時(shí)軟件都是很有用的:聊天機(jī)器人,物聯(lián)網(wǎng)應(yīng)用程序或多人在線游戲。
實(shí)施機(jī)器學(xué)習(xí)
在任何智能系統(tǒng)的開(kāi)發(fā)中,選擇合適的機(jī)器學(xué)習(xí)算法是重要的一點(diǎn)。機(jī)器學(xué)習(xí)的所有算法可以分為三種類型:
· 如果存在具有特定明顯屬性的數(shù)據(jù)塊,而另一塊塊尚不清楚,則使用受控學(xué)習(xí),并且有必要在工作時(shí)對(duì)其進(jìn)行預(yù)測(cè)。
· 不受控制的學(xué)習(xí)用于找出未標(biāo)記的數(shù)據(jù)集中的隱式關(guān)系。
· 強(qiáng)化學(xué)習(xí)是上述類別的共生關(guān)系,意味著存在某種特定類型的反饋,當(dāng)沒(méi)有標(biāo)記或錯(cuò)誤消息時(shí),該反饋可用于每個(gè)步驟或操作。
該項(xiàng)目的任務(wù)之一是根據(jù)數(shù)據(jù)庫(kù)中的問(wèn)題對(duì)答案進(jìn)行分類。根據(jù)答案與相應(yīng)類別的關(guān)系對(duì)其進(jìn)行分類。
借助決策樹(shù)來(lái)處理機(jī)器學(xué)習(xí)。其中之一代替了隨機(jī)森林。它是處理投票的幾棵經(jīng)過(guò)訓(xùn)練的樹(shù)的集合。根據(jù)其結(jié)果,隨機(jī)林根據(jù)指定的選擇準(zhǔn)備答復(fù)。為了選擇合適的設(shè)備,使用了執(zhí)行圖備忘錄。它是由Microsoft設(shè)計(jì)的模型,用于為特定任務(wù)選擇機(jī)器學(xué)習(xí)算法。
基于該方案,我們得出結(jié)論:當(dāng)學(xué)習(xí)的精度和速度是最高優(yōu)先級(jí)時(shí),隨機(jī)森林算法是最適合解決多類分類任務(wù)的算法。
機(jī)器人培訓(xùn)過(guò)程
機(jī)器人學(xué)習(xí)的過(guò)程包括以下幾個(gè)階段:
· 對(duì)話數(shù)據(jù)庫(kù)預(yù)處理?-在完成此階段之后,僅保留與對(duì)話當(dāng)前階段相對(duì)應(yīng)的那些集合。
· 選擇問(wèn)題?-完成上一個(gè)階段后,系統(tǒng)創(chuàng)建了學(xué)習(xí)的核心。在此階段之前,將每個(gè)問(wèn)題的文本簡(jiǎn)化為通用形式。此外,借助詞法分析儀Pymorphy2對(duì)所有單詞進(jìn)行了歸一化處理。這樣,每個(gè)單詞都恢復(fù)為其初始形式,并且分詞簡(jiǎn)化為不定式。盡管上下文不同,但它允許以相同的方式處理相同的單詞。
· 創(chuàng)建TF-IDF矢量化器以對(duì)問(wèn)題進(jìn)行規(guī)范化選擇?-基于矢量化器,整個(gè)問(wèn)題數(shù)據(jù)庫(kù)的處理以及對(duì)隨機(jī)森林的學(xué)習(xí)均基于矢量化器。
應(yīng)用程序的工作流程
該應(yīng)用程序由一個(gè)Web客戶端和一個(gè)基于Python的Telegram聊天機(jī)器人組成。該應(yīng)用程序的主要功能是:
· 實(shí)時(shí)處理客戶信息;
· 提供機(jī)器人回復(fù)的可能變體;
· 機(jī)器人決策的實(shí)時(shí)處理并將回復(fù)發(fā)送給客戶端。
Web客戶端包括用于對(duì)話圖工作的界面和用于發(fā)送消息的鍵盤(pán)。與機(jī)器人的客戶端交互是使用Telegram機(jī)器人的經(jīng)典選擇。啟動(dòng)應(yīng)用程序后,還將啟動(dòng)兩個(gè)流程。其中一項(xiàng)是維護(hù)Telegram bot的工作,另一項(xiàng)是維護(hù)應(yīng)用程序的工作。通過(guò)TeleBot庫(kù)的“消息處理程序”工具處理客戶消息。
在圖的頂部,找到用戶的問(wèn)題和答案的可能選項(xiàng)。單擊答案之一后,其文本將自動(dòng)顯示在答案的空間中。
然后,系統(tǒng)正在等待客戶端對(duì)已發(fā)送消息的答復(fù)。當(dāng)它收到它時(shí),通過(guò)將用戶的答案與所選消息一起添加到分支中來(lái)重新組織圖形。應(yīng)用程序準(zhǔn)備了新的答復(fù)。
項(xiàng)目的主要挑戰(zhàn)
在進(jìn)行該項(xiàng)目時(shí),我們面臨以下挑戰(zhàn):
· 實(shí)施客戶消息的實(shí)時(shí)處理;
· 實(shí)時(shí)介紹顧問(wèn)答案的可能變體;
· 實(shí)時(shí)處理顧問(wèn)的決定并將答復(fù)發(fā)送給客戶;
· 系統(tǒng)運(yùn)行時(shí)動(dòng)態(tài)擴(kuò)展對(duì)話數(shù)據(jù)庫(kù)。
為了解決這些挑戰(zhàn),我們實(shí)現(xiàn)了以下功能:
· 預(yù)處理客戶的答案-創(chuàng)建詞匯頻率矩陣以從最常用的單詞中找出。
· 在自組織映射的幫助下,搜索將具有相似含義的單詞組合在一起的有義聚類。這是一種人工神經(jīng)網(wǎng)絡(luò),經(jīng)過(guò)訓(xùn)練后可以生成訓(xùn)練樣本輸入空間的低維離散化表示,稱為地圖。自組織圖不同于其他人工神經(jīng)網(wǎng)絡(luò),因?yàn)樗鼈儜?yīng)用競(jìng)爭(zhēng)性學(xué)習(xí)而不是糾錯(cuò)學(xué)習(xí)。
· 使用Redis進(jìn)行數(shù)據(jù)存儲(chǔ),可以快速處理查詢。
上述就是關(guān)于如何在Python上開(kāi)發(fā)Telegram聊天機(jī)器人的全部?jī)?nèi)容,想了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。