介紹
自然語言處理(NLP)領域的突破近來出現了突然上升。我們可用的文本數據量巨大,數據科學家正在提出新的創新解決方案來解析它並分析模式。從編寫整本小說到解碼古代文本,我們已經看到了NLP的各種應用。
最受歡迎的應用程序之一是聊天機器人。Zomato,Starbucks,Lyft和Spotify等組織正在其網站和移動應用上利用這項技術。作爲用戶,我們不再需要擔心被擱置 - 只需鍵入您的查詢,聊天機器人將立即分析文本並給出適當的響應。
考慮到這些聊天機器人的流行程度和實用性,我想展示如何創建一個。在本文中,我們將使用Slack構建一個聊天機器人,Slack是世界上最大的團隊通信應用程序。然後,我們將利用Google的DialogFlow(以前的api.ai)爲機器人添加智能。
聽起來不錯?開始吧!
目錄
- 什麼是Chatbot,爲什麼要關心?
- 解剖我們的Chatbot
- 一個簡單的基於Chatbot的規則使用Slack
- 瞭解用於NLP和機器學習的Google的Dialogflow(api.ai)
- 將Chatbot變爲現實(集成DialogFlow和Slack)
什麼是Chatbot,爲什麼要關心?
聊天機器人爲用戶提供了一種方法,可以使用簡單的語言提供複雜的命令並完成複雜的任務。
例如,假設您想從擁有自己的聊天機器人的電子商務網站購買一雙鞋子。你可以告訴機器人你想要購買一些鞋子,它會和你談談收集更多的細節,比如“什麼牌子/顏色?”,“你的尺碼是多少?”和“什麼樣的鞋子?運動鞋或靴子?“ 您不必瀏覽網站,而是與機器人進行對話, 反映出去零售店時的體驗類型。
用例的另一個例子是星巴克的聊天機器人:
在與機器人交談時,可以輕鬆訂購咖啡,然後點擊一堆按鈕並手動搜索訂單。出於這些原因,聊天機器人被認爲是與用戶互動的最佳方式之一。現在我們知道聊天機器人是什麼了,讓我們進入基礎知識。以下是我對聊天機器人的定義:
聊天機器人是一種服務,由規則和人工智能提供支持,您可以通過聊天界面進行交互。該服務可以是任何數量的東西,從功能到娛樂,它可以存在於任何主要的聊天產品(Facebook Messenger,Slack,Telegram,Text Messages等)中。
通俗地說,聊天機器人是在聊天平臺上與用戶交互的程序。它可以像你想要的那樣愚蠢(有趣),也可以像你需要的那樣聰明(足智多謀)!
解剖我們的Chatbot
根據我們希望它具有哪種功能,有多種方法可以創建聊天機器人。在本教程中,我們將構建一個基本的聊天機器人。以下是它的高級設計:
我們將使用Slack的API將消息發送到DialogFlow(DF)。DialogFlow的NLP引擎將理解用戶消息背後的意圖和語義,併爲我們的聊天機制發送適當的回覆以發送給用戶。Slack接口和DialogFlow一起構成了聊天機器人。舉一個類比,Slack接口將是我們機器人的“面孔”,DialogFlow將是“大腦”。
一個簡單的基於Chatbot的規則使用Slack
在本研究中,Slack是我們的首選平臺,因爲它在全球範圍內廣泛用於組織級通信。它還通過其API添加機器人提供了非常好的支持。然而,在我們對Slack做任何事情之前,我們需要準備好一些東西:
- 一個Slack工作區來測試我們的機器人
- 機器人的Slack應用程序
創建Slack工作區
工作區(組)是Slack組織團隊的方式。如果您是Slack上的Analytics Vidhya小組的成員,那麼您就是工作區的一員。工作區的URL地址如下所示:
https://workspace-name.slack.com
您可以在此網址創建自己的工作區:
https://slack.com/create#email
輸入電子郵件後,Slack將向您發送電子郵件ID的6位數代碼。按照他們給出的步驟選擇您的姓名,密碼,團隊規模。然後,Slack要求您爲該組提供名稱:
你可以給它任何你喜歡的名字。我會說出一些東西 。選擇URL地址並創建工作區後,Slack將建議發送電子郵件邀請。你可以點擊“立即跳過”跳過這一步,瞧!您剛剛在Slack上創建了自己的工作區。嘗試發送一些消息!
創建一個Slack應用程序
既然您有一個可以進行實驗的工作空間,那麼您需要一個可以附加機器人的應用程序。在以下鏈接上創建應用:
https://api.slack.com/apps
單擊“創建應用程序”併爲應用程序命名並選擇您的工作區:
這會將您重定向到您的應用信息中心。從那裏,您可以選擇 “Bots”選項:
單擊“添加機器人用戶” - >爲機器人命名。就我而言,我把它命名爲“skynet”。現在我們已經爲我們的應用程序創建了一個機器人,我們需要將它添加到我們的工作區,以便我們可以與它聊天!返回上面的應用程序儀表板並向下滾動以找到“將應用程序安裝到工作區”選項。
一旦你這樣做,Slack會要求你“授權”申請。繼續並接受授權。現在我們已經授權了bot,讓我們使用python創建一個基於規則的簡單聊天機器人。
使用python創建基於規則的bot
在我們能夠將任何外部程序連接到Slack bot之前,我們需要確保Slack擁有訪問機器人的正確權限。爲此,Slack提供了一個“auth令牌”,我們需要在嘗試連接時提供該令牌。返回“app dashboard”並選擇“OAuth&Permissions”選項:
這將打開應用程序的權限設置。選擇“Bot用戶OAuth訪問令牌”並保存(我出於安全原因隱藏了它們)。此令牌有助於連接到我們的機器人。
現在你已經完成了所有設置,讓我們編寫一些python代碼。爲了便於連接到Slack API,我編寫了一個小的python程序。讓我們設置代碼環境。
注意:整個項目都在python 2.7中。
1.安裝slackclient庫。
$ pip install slackclient
2.克隆我的鬆散存儲庫。
$ git clone https://github.com/mohdsanadzakirizvi/Slack-AI-ChatBot.git
3.將鬆弛身份驗證令牌設置爲“Bot User OAuth Access Token”的值以及環境變量中bot的名稱。
$ export SLACK_TOKEN = <your_bot_user_oauth_token_here>
$ export BOTNAME = <your_botname_here>
例如,我的BOTNAME是“skynet”,所以我將它設置爲:
$ export BOTNAME = skynet
4.轉到Slack-AI-ChatBot目錄。
$ cd Slack-AI-ChatBot
5.啓動python bot。
$ python mainbot.py
您現在應該收到以下通知:
現在一切都已設置完畢,您可以轉到Slack工作區並開始與機器人聊天。請注意,它只會在您使用提及@chatbotname(就像我們通常在Slack中所做的那樣)進行交談時纔會回覆。
這些是我在機器人中預設的一些硬編碼規則。您可以更改它們或添加自己的規則。如果你打開文件mainbot.py,你會發現以下功能:
def handle_command(slack_api, command, channel): """ Recieves commands directed for the bot, if they are valid perform action else resends clarification """ EXAMPLE_COMMAND = 'do' if command.lower().startswith(EXAMPLE_COMMAND) or command.lower().startswith('what'): slack_api.rtm_send_message(channel, 'Yes, code me further to do that!') elif command.lower().startswith('hi') or command.lower().startswith('hey') or command.lower().startswith('hello') or command.lower().startswith('who are you'): slack_api.rtm_send_message(channel, 'Hey, I\'m your slack bot, how may I help you?') else: print 'Invalid Command: Not Understood' slack_api.rtm_send_message(channel, 'Invalid Command: Not Understood')
這就是所有魔法發生的地方。繼續嘗試添加自己的規則,並儘可能自定義聊天機器人!此外,我在項目的整個代碼中添加了註釋,以使其易於理解。請隨意瀏覽此處的代碼,以瞭解該過程的工作原理。
現在我們已經嘗試使用自定義規則爲Slack構建一個聊天機器人,讓我們看看我們如何利用NLP和ML的強大功能讓我們的機器人更加智能化!
注意:每次更改代碼時,都必須重新啓動程序才能使更改生效。
瞭解用於NLP和機器學習的Google的Dialogflow(api.ai)
在我們繼續之前,回想一下我們在本文開頭討論的聊天機器人的解剖。供您參考,下面是該圖:
包括設置Slack在內的第一部分已經完成。現在,是時候探索DialogFlow api了。
設置DialogFlow
1. 使用您的Google帳戶免費訪問https://dialogflow.com/並註冊
2.您將可以訪問您的控制檯:
代理
DialogFlow通過創建代理來工作。代理最好被描述爲NLU(自然語言理解)模塊。這些可以包含在您的應用,產品或服務中。他們將自然用戶請求轉換爲可操作的數據。
當用戶輸入與代理程序中的某個意圖匹配時,會發生此轉換。意圖是處理用戶請求的代理的預定義或開發人員定義的組件。
例如,您告訴聊天機器人您感覺很冷,或者您希望關閉風扇。代理需要知道這些語句背後的意圖。更具體地說,“用戶希望我做什麼?”。一旦知道了意圖,就可以生成相應的動作/回覆。
讓我們從創建自己的代理開始。我們將以披薩公司的聊天機器人爲例。
在窗口的左上角,您將看到“創建代理”選項。單擊它併爲您的代理選擇一個名稱。我把我的名字命名爲“pizzaBot”。
現在我們已準備好代理,我們需要定義一些它需要識別的實體以及它需要理解的一些意圖。
理解意圖和實體
a.) Entity
實體是您需要代理識別的一組對象。例如,如果我們要創建一個pizzaBot,我們的一些實體將是披薩通常需要的對象:
- Breads
- Toppings
- Cheese, etc.
讓我們創建我們的實體。
- 單擊左側的“實體”按鈕,然後選擇“創建實體”。
- 爲您的披薩選擇一堆配料。
- 單擊“保存”按鈕,您將擁有您的澆頭實體。
- 讓我們的代理人添加另一個實體“奶酪”:
現在我們的實體已準備就緒,我們需要定義一些意圖,以幫助我們的代理了解如何處理這些實體。
b。)意圖
簡單來說,意圖是用戶“說”的內容與機器人對該指令採取的操作之間的映射。如果單擊intent選項卡,您將看到已存在兩個意圖。
- 當機器人不理解用戶說的內容時的默認回退意圖,以及
- 當用戶說出“你好”的內容並且你希望機器人用類似的東西迴應時,會觸發歡迎意圖。
讓我們來玩默認意圖吧。
由於我們尚未對我們的代理進行過培訓,因此它使用了默認的回退意圖,並使用爲該方案存儲的衆多響應之一進行響應。讓我們創建一個烹飪比薩餅的意圖,並稱之爲“makePizza”。單擊“創建意圖”,選擇一個名稱並保存。你會看到這樣的東西:
DialogFlow的工作方式是從一些示例用戶句子開始。然後,它訓練它的引擎,以生成一個算法,使這些句子與正確的意圖最匹配。讓我們爲我們的代理添加一些基本的培訓短語:
我們的想法是儘可能多地和多樣化地訓練我們的代理人,使其更加精確。設置訓練短語後,您需要定義代理在遇到此意圖時應採取的操作。 您可以通過單擊“添加參數和操作”選項來執行此操作。添加以下操作和參數:
這些列名稱的含義是什麼?
- 必需 - 定義此參數是否對操作是必需的。
- 實體 - 這裏我們將參數映射到我們預定義的實體。
- 值 -如果我們想在響應中重用這個參數,我們可以簡單地使用它的值名稱,參數將替換它的位置。
- 是List - 如果參數值可以是列表(例如,順序中可以有多個澆頭)。
- 提示 -代理在提示用戶輸入參數時應該說什麼?我們在這裏定製。
點擊澆頭旁邊的“定義提示”,然後寫上“您想要在披薩上添加什麼配料?”
同樣,添加一個奶酪。哇。這是很多工作。讓我們看看我們取得了什麼。保存意圖並返回代理的演示區域。嘗試向代理商詢問披薩。由於我們已經在一些示例短語上訓練了代理,因此它應該能夠立即識別與訂購披薩相關的任何短語。它還應該問你想要的配料和奶酪類型?查看以下視頻,瞭解我在說什麼。
注意談話的自然感覺。觸發意圖後,代理會嘗試通過對話從用戶中提取您標記爲重要的參數。請注意,您只需要提供一些訓練短語的示例; DialogFlow的NLP引擎負責其餘部分。
此外,您可以爲用戶添加自定義響應,以防意圖成功執行並完成。單擊“操作和參數”下面的“添加響應”按鈕,添加以下響應,然後保存:
一旦你的披薩準備好了,你會受到以下消息的歡迎:
幕後發生了什麼?當我們在響應字段中使用$ cheese和$ toppings時,它們會自動被從用戶對話中提取的參數值替換。方便,不是嗎?
培訓代理商
現在關於代理的所有內容都已設置好,現在是時候進行培訓了。單擊代理名稱旁邊的設置圖標。
在設置窗口中,選擇“ML設置”。
以下是一些需要注意的重要事項:
- 訓練模型有兩種模式:
- 混合模式
- 僅ML模式
- 當訓練樣本較少時,混合模式很好。 如果你有一個大的設置,你應該去ML模式
- ML分類閾值是模型應具有的最小置信度分數。只有這樣才能對意圖採取行動,否則它將回到我們之前討論過的“默認意圖”。
單擊“訓練”按鈕,一旦訓練了訓練,將其保存。現在我們的NLP代理人很高興。讓我們進入下一步並將其與我們的Slack應用程序集成,以使聊天機器人完成!
將Chatbot變爲現實(集成DialogFlow和Slack)
DialogFlow(DF)是與大多數流行應用程序集成的絕佳選擇。它 支持開箱即用與Slack的集成。讓我們的DF代理與我們的Slack機器人一起工作吧!
使用DialogFlow設置Slack應用憑據
在窗口的左側,單擊“Integrations”按鈕,您將看到許多選項。選擇Slack圖標,然後單擊下面的設置。彈出如下框:
在右上角,切換開關以“打開”與Slack的集成。
向下滾動,您將找到輸入Slack應用程序憑據的字段:
爲此,請回到Slack應用程序的控制檯。如果您尚未打開它,只需轉到以下URL並選擇您的應用:
https://api.slack.com/apps
向下滾動頁面,您將找到應用程序的憑據(出於安全原因,我隱藏了它們)。
將它們複製到DialogFlow頁面中的相應字段。
注意:要複製“客戶端密鑰”,您必須先單擊旁邊的“顯示”選項按鈕。複製憑據後,單擊DialogFlow中Slack框右下角的“開始”。
繼續鬆弛設置
現在您已經設置了Slack和Dialogflow,您需要啓用OAuth(幫助身份驗證),事件請求URL(由Dialogflow提供)和事件訂閱(我們的機器人會聽哪種事件?)。
添加OAuth URL
- 從Dialogflow的Slack設置頁面複製OAuth URL
- 轉到Slack Developer Console並單擊左側菜單中的OAuth&Permissions。
- 單擊“ 添加新的重定向URL”按鈕並粘貼OAuth URL。
- 單擊添加。
添加事件請求URL
- 從Dialogflow的Slack設置頁面複製事件請求URL。
- 轉到Slack Developer Console並單擊左側菜單中的Event Subscriptions。
- 單擊開關以啓用事件,然後將事件訂閱URL粘貼到 請求URL字段中。
片刻之後,您應該會在“請求URL”字段上方看到綠色的“已驗證”文本。
啓用事件訂閱
事件訂閱是聊天機器人最具競爭力的事情。它基本上告訴Slack我們的機器人會聽到什麼樣的事件並被觸發。 事件的範圍可以從加入頻道的人到新的個人信息。
- 單擊左側菜單中的“ 事件訂閱 ”。
- 單擊開關以啓用該選項。
- 在訂閱機器人事件下,單擊添加機器人用戶事件按鈕。
這將顯示文本字段和事件列表。您可以在此字段中輸入術語,以搜索您希望機器人響應的事件。以下是我建議添加的事件列表: - 添加事件後,單擊屏幕底部的“ 保存更改”按鈕。
將Slack Bot添加到團隊中
- 在Slack Developer Console中,單擊左側菜單中的Manage Distribution。
- 在“ 與您的團隊共享您的應用程序”部分下,單擊“ 添加到鬆弛”按鈕。
- 在下一頁上,單擊“ 授權”按鈕以添加代理。
完成此步驟後,您可以返回工作區並開始與機器人交談!
與聊天機器人交談
轉到你的工作區和個人DM機器人,或提到他的名字,如@botname,它將開始響應。
你注意到了嗎?
除了回答普通的披薩問題之外,機器人還擅長回覆諸如“hi”,“hello”和“thank you”等通用消息?這是可能的,因爲DialogFlow功能稱爲“SmallTalk”。
配置小談話
如果單擊DialogFlow左窗格中的“Small Talk”按鈕,您將遇到一組選項:
Small Talk讓你添加你的機器人在收到諸如“嗨,你好”之類的通用評論或諸如“你是誰?”和“你能做什麼?”等一般性問題時應該如何反應。繼續並使用特定於項目的詳細信息進行設置。
結束筆記
我們的聊天機器人終於完全成型了!既然您已經能夠理解聊天機器人的工作方式並且已經實現了基於規則的簡單機器人和基於ML的智能機器人,那麼您可以通過探索Slack和DialogFlow提供的功能來做更多的事情。
這對我來說是一次很棒的學習經歷。利用DialogFlow的強大功能,我們能夠避免在我們從頭開始實施NLP和ML模型時遇到的大量複雜性。我挑戰你繼續建立自己的一些有趣的聊天機器人!
總結一下,這裏有一些您可以查看的資源/鏈接:
- 查看DialogFlow文檔,瞭解有關其API的任何疑問。
- Slack bot-users文檔對於他們的bot平臺存有疑慮。
- 本文中使用的所有代碼都可以在GitHub上找到。