AI實驗室: 手把手打造智能聊天機器人(附Python實作程式碼)

Derek Wu
Feb 25, 2022

--

想建立一個Line ChatBot很容易,Line API串接就好了。可是如果想要打造的是人工智能的線上客服、AI智能聊天機器人、AI助理,又或是標題、工作自動分類機器人呢? 其實還是很容易,看完這篇複製貼上就好了。

不需要艱深的數學背景、複雜的模型、昂貴的費用或是大量的人力心力投入,連訓練資料都不用另外下載,希望大家能輕鬆簡單的體會AI\ML其實也可以很好入門、很平易近人,就像我當初認識他們一樣。

前情提要: 這次要認識的是 MultinomialNB貝氏分類模型 ,從1960年代開始就被廣泛應用,最常被提到的應用就是垃圾郵件分類,模型簡單、好用是CP值超高的ML模型。 如果想了解模型的原理 — 貝氏定理,可以參考另一篇文章

進入正題

貝氏分類模型,是利用過去的經驗,來預測結果。舉例來說: 過去的經驗告訴我,看到烏雲就有很大的機率會下雨,所以今天有烏雲,我就預判下雨的機會很大,於是我就帶雨傘出門。

所以只要
1.預測的事件有規律
2.過去的資料夠精準、cover條件夠多,基本上就會越準。

而這個模型的弱點就是,沒有看過的東西他不會;比如我沒看過淡積雲,所以當淡積雲出現的時候,我無從判斷會不會下雨。所以這種Model適合用在有一定範圍資料(Closed Domain)的應用,不論是聊天機器人還是分類問題。

這篇要帶大家實作的是線上智能客服(聊天機器人),他可以根據用戶的訊息,來預測用戶的意圖,給予相對應的回答。
下面是另一個人資貓的範例:

以下針對程式幾個步驟說明,想先玩玩看的,可以跳到下面程式碼的部分。

Step2 資料預處理
這步驟確在排除奇怪的符號,確保你的訓練資料都有給正確的分類

Step2.1 分詞
不同於英文句子中每個單字都有空白隔開,中文是以詞為單位,不同的斷詞就會有不同意思,ex. 這頓飯 好 好吃 v.s. 好好 吃 這頓飯。一樣的"好好吃",前者表示美味,後者表示乖乖吃。這邊使用Jieba分詞系統,最近中研院有推出CKIP 分詞系統,大家可以試試看效果如何。

Step6 優化
ML機器學習優化好比教育,從訓練資料優化(更精準的訓練資料、準確的答案等)就像是用更好的教材、從模型優化(調參數,模型架構更換調整)就像是提升師資。一般來說,都會從訓練資料下手,因為再好的師資都沒辦法用錯誤的內容教會正確的答案。
1.加入自定義字典: 讓機器可以認得"防空洞" 而不是"防 空洞"
2.停用過濾詞: 不重要的詞像是"喔" 直接忽略
3.沒看過的問題加入訓練資料集: 活到老學到老,不會就學

Step0 架構
有沒有想過只能讀機器數字的機器如何讀中文? 如果一步步輸出整個過程,其實是:
一句話 > 一堆詞 > 一堆編號 >電腦記住編號出現的機率
大家有興趣可以輸出看看整個過程。

說明完了,直接上Code

礙於篇幅有限,有任何問題歡迎下面留言詢問討論&指教,希望大家都能好好玩,然後這篇能成為你的第一個AI應用在自己的有領域上!

如果有讓你看完這篇文,可以幫我拍手 1–10 下
如果覺得這文章對你有幫助,可以幫我拍手 10–30 下
如果覺得想看到更多關於學習筆記的文章,可以幫我拍手 30–50 下
讓我知道也記得 Follow我 DerekWu
更歡迎你在下方留言,我很樂意與你討論聊天或回答問題!

--

--

Derek Wu

B.S. in Math, 4 years Recsys engineer exp, currently pursuing M.S. in Computer Science. 數學系畢業,美國交換學生,四年演算法&系統工程師經驗,開發推薦系統。目前研究生在讀中, Work hard, play hard!