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