深度學習屬於機器學習中的一環,所謂深度(Deep)是指多層式架構的模型,如各種神經網路(Neural Network)模型、強化學習(Reinforcement learning, RL)演算、自然語言處理(Natural Language Processing, NLP)等,以多層的神經層或try-and-error 的方式,並且以優化(Optimization)或反覆的方式求解。
這幾年NLP 的應用範圍相當廣泛,好比說聊天機器人(ChatBot),幾乎每一家企業都有這方面需求,從售前支援(Pre-sale)、銷售(Sales)到售後服務(Post Services)等方面,用途十分多元,而支援系統功能的技術則涵蓋了NLP、NLU、NLG,既要能解析對話(NLP)、理解問題 (NLU),又要能回答得體、幽默、周全(NLG),技術範圍相當廣泛。
要開發一個功能完善的ChatBot,除了技術之外,更要有良好的規劃與設計作為基礎,當中有那些重要的「眉角」呢?現在就跟大家來一窺究竟。
ChatBot 類別
廣義來說,ChatBot 不一定要具備AI 的功能,只要能自動回應訊息,基本上就稱為ChatBot。通常一說到聊天機器人,大家直覺都會想到蘋果公司的Siri,它可以跟使用者天南地北的聊天,不管是天氣、金融、音樂、生活資訊都難不倒它,但是,對於一般中小企業而言,這樣的功能並不能帶來商機,他們需要更直接的支援功能,因此我們把ChatBot 分為以下類別:
- 不限話題的機器人:可以與人自由自在的閒聊,包括公開資訊的查詢與應答,比如溫度、股市、播放音樂等,也包含日常寒暄,不需要精準的答案,只要有趣味性、即時回覆。
- 任務型機器人:例如專家系統,具備特定領域的專業知識,服務範圍像是醫療、駕駛、航行、加密文件的解密等,著重在複雜的演算法或規則式(Rule based)的推理,需給予精準的答案,但不求即時的回覆。
- 常見問答集(Frequently Asked Questions, FAQ):客服中心將長年累積的客戶疑問集結成知識庫,當客戶詢問時,可快速搜尋,找出相似的問題,並將對應的處理方式回覆給客戶,答覆除了要求正確性與話術之外,也講究內容是否淺顯易懂和詳實周延,避免重複而空泛的回答,引發客戶不耐與不滿。
- 資訊檢索:利用全文檢索的功能,搜尋關鍵字的相關資訊,比如Google 搜尋,不需要完全精準的資訊,也不要單一的答案,而是提供所有可能的答案,由使用者自行作進一步判斷。
- 資料庫應用:藉由SQL 指令來查詢、篩選或統計資料,例如,旅館訂房、餐廳訂位、航班查詢/訂位、報價等,這是最傳統的需求,但如果能結合NLP,讓輸出入介面更友善,例如語音輸入/輸出,可以引爆新一波的商機。
以上這五種類別的ChatBot 各有不同的訴求,功能設計方向也因而有所差異,所以,在開工之前,務必要先搞清楚老闆要的機器人是哪一種,免得到時候開發出來,老闆才跟你說「這不是我要的」,那就欲哭無淚了。
ChatBot 設計
上面談到的ChatBot 種類非常多元,如果就每一種應用都詳細介紹的話,應該可以再寫幾萬字了,所以此處僅針對共同的關鍵功能進行說明。
ChatBot 的規劃要點如下:
- 訂定目標:根據規劃的目標,選擇適合的ChatBot 類別,可以是多種類別的混合體。
- 收集應用案例(Use Case):收集應用的各種狀況和場景,整理成案例,以航空機票的銷售來舉例,就包括了每日空位查詢、旅程推薦、訂票、付款、退換票等,分析每個案例的現況與導入ChatBot 後的場景與優點。
- 提供的內容:現在行銷是內容為王(Content is king)的時代,有內容的資訊才能吸引人潮並帶來錢潮,這就是大家常聽到的內容行銷(Content Marketing)。因此,要評估哪些資訊是有效的、又該如何生產、並以何種方式呈現(Video、Podcast、部落文等)。
- 挑選開發平台,有下列四種方式供選擇:
套裝軟體:現在已有許多廠商提供某些行業別的解決方案,像是金融、保險等各行各業,技術也從傳統的IVR 順勢轉為ChatBot,提供更便利的使用介面。
ChatBot 平台:許多大型系統廠商都有提供ChatBot 平台,他們利用獨有的NLP 技術以及大量的NER 資訊,整合各種社群軟體,使用者只要直接設定,就可以在雲端使用ChatBot 並享有相關的服務。廠商包括Google DialogFlow、微軟的QnA Maker。
開發工具:許多廠商提供開發工具,方便工程師快速完成一個ChatBot,例如Microsoft Bot Framework、Wit.ai 等,可參閱「10 Best Chatbot Development Frameworks to Build Powerful Bots」[1],另外Google、Amazon 智慧音箱也都有提供SDK。
自行構建:可以利用套件加速開發,像是TextBlob、Gemsim、SpaCy、Transforms 等NLP 函數庫,或是Rasa、ChatterBot 等ChatBot Open Source。
- 佈署平台:可選擇雲端或本地端,雲端可享有全球服務、或以微服務的方式運作,以使用次數計費,可節省初期的高資本支出,因此,若ChatBot 不是資料庫交易類別的話,有越來越多企業採用雲端方案。
- 用戶偏好(Preference)與面貌(Profile):考量要儲存哪些與業務相關的用戶資訊。
ChatBot 的術語定義
- 技能(Skill):例如銀行的技能包含存提款、定存、換匯、基金購買、房貸等,每一個應用都稱為一種技能。
- 意圖(Intent):技能中每一種對談的用意,例如,技能是旅館訂房,意圖則是有查詢某日是否有空的雙人房、訂房、換日期、退房、付款等。
- 實體(Entity):關鍵的人事時地物,利用前面所提的「命名實體識別」(NER)找出實體,每一個意圖可指定必要的實體,例如,旅館訂房必須指定日期、房型、住房天數、身分證字號等。
- 例句(Utterance):因為不同的人表達同一意圖會有各種不同表達方式,所以需要收集大量的例句,訓練ChatBot,例如「我要訂3/21 雙人房」、「明天雙人房一間」等。
- 行動(Action):所需資訊均已收集完整後,即可作出回應(Response)與相關的動作,例如訂房,若已確定日期、房型、住房天數、身分證字號後,即可採取行動,為客人保留房間,並且回應客戶「訂房成功」。
- 開場白(Opening Message):例如歡迎詞(Welcome)、問候語(Greeting)等,通常要有一些例句供隨機使用,避免一成不變,流於枯燥。
而對話設計有些注意事項如下:
- 對話管理:有兩種處理方式,有限狀態機(Finite-State Machine, FSM)和槽位填充(Slot Filling)。
有限狀態機(FSM):傳統的自動語音應答系統(IVR)大多採取這種方式,事先設計問題順序,確認每一個問題都得到適當的回答,才會進到下一狀態,如果中途出錯,就退回到前一狀態重來,銀行ATM 操作、電腦報修專線等也都是這種設計方式。
ATM 提款的有限狀態機(FSM)
槽位填充(Slot Filling):有限狀態機的缺點是必須按順序回答問題,並且每次只能回答一個資訊,而且要等到系統唸完問題才能回答,對嫻熟的使用者來說會很不耐,若能引進NLP 技術,就可以讓使用者用自然對談的方式提供資訊,例如「我要訂3/21 雙人房」,客戶說一句話,系統就能夠直接處理,若發現資訊有欠缺,系統再詢問欠缺的資訊即可,與真人客服對談一樣,不必像往常一樣,「國語請按1,台語請按2,客語請按3,英語請按4」,只是訂個房還要過五關斬六將。
- 整合社群媒體,譬如Line、Facebook Messager、Twitter 等,使用者不需額外安裝軟體,且不用教學,直接在對話群組加入官方帳號,即可開始與ChatBot對話。
- 人機整合:ChatBot 設計千萬不能原地打轉,重複問相同的問題,必須設定跳脫條件,一旦察覺對話不合理,就應停止或轉由客服人員處理,避免引起使用者不快,造成反效果,使用有限狀態機設計方式,常會發生這種錯誤,若狀態已重複兩次以上,就可能是bug。幾年前,微軟聊天機器人Tay,推出後不到24 小時,就因為學會罵人、講髒話,導致微軟緊急將她下架,就是一個血淋淋的案例。
除了技術層面之外,ChatBot 也稱為「Conversational AI」,因此對話的過程,需注意使用者的個資保護,包含像是對話檔案的存取權、對話中敏感資訊的保全,並且讓使用者清楚知道ChatBot 的能力與應用範圍。
要謹記,聊天機器人不能盲目建造,對症下藥才是王道。