知道怎麼實作一個會 Echo 的 Bot 後
再來就要思考,開發一個 Bot 我們要提供什麼功能
(e.g., 天氣查詢, 訂票, 推薦旅遊景點)
不過這裡要討論的不是 Bot 的功能
Bot 的功能實作,跟一般網站或 App 的實作並沒有太大的差別
接下來來談如何從使用者說的話來判斷,使用者要使用的功能
如果使用者問:「今天天氣如何?」「天氣今天好嗎?」
要如何知道,他都是要詢問今天的天氣狀況
也就是使用者的「意圖」
Based on Keyword
上一篇文章,輸入關鍵字就能回傳 template message 的 bot 也是用這樣的方式實作的
if "button" in text:
# Send ButtonTemplate
...
elif "confirm" in text:
# Send ConfirmTemplate
...
elif "carousel" in text:
# Send CarouselTemplate
...
else:
# Echo TextMessage
...
回歸到天氣的問題
可以試著找出「天氣」是否有出現在使用者的問句中
再來判斷「今天」, 「明天」這樣敘述時間的詞
e.g.
if "天氣" in text:
if "今天" in text:
return today_s_weather
elif "明天" in text:
return tomorrow_s_weather
Pros
- 不需要其他的背景知識,容易實作
- 運算量小
Cons
- 建立規則很麻煩
- 規則很容易就會出現例外,很難定義得完整
- 只要使用者無法觸發到關鍵字,就無法使用功能
- 一堆 if else 造成程式冗長,不易擴充和維護
AIML
Artificial Intelligence Modelling Language
它是一款基於 XML 的 markup language
這是最基本的 AIML
<aiml version="1.0.1" encoding="UTF-8"?>
<category>
<pattern> HELLO ALICE </pattern>
<template>
Hello User!
</template>
</category>
</aiml>
只要符合特定的 pattern,就回傳指定的 template
也能透過 <random>
這樣的 tag,從多種回覆隨機丟一種回傳
<random>
<li> response1 </li>
<li> response2 </li>
...
</random>
Pros
- 比起只用 if else 更結構化,較易維護和擴充
Cons
- 依然很難包含所有的狀況
Other NLP Service
這些服務能透過標記和訓練
解析出這句話的每一個片段,所具有的意義
- e.g. 「今天西雅圖天氣如何」
- 時間:今天
- 地點:西雅圖
- 意圖:天氣如何
Wit.ai
Wit.ai 跟 LUIS, API.ai 比較不同的地方是
從 Wit.ai 得到的是,我們設定的回覆
而不是一句話解析後的結果
LUIS
從這裡 可以測試兩個訓練過的範例機器人,看看從 LUIS 可以得到什麼
e.g.
- Question
how is the weather in the Taipei
- Response
{
"query": "how is the weather in the Taipei",
"topScoringIntent": {
"intent": "GetCurrentWeather",
"score": 0.50119406,
"actions": [
{
"triggered": false,
"name": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"required": true,
"value": null
}
]
}
]
},
"entities": [],
"dialog": {"contextId": "80cd646a-d85d-4b40-873d-1b47fa49adc8",
"status": "Question",
"prompt": "Where would you like to get the current weather for?",
"parameterName": "location"
}
}
API.ai
- Question
Hey Calendar, schedule lunch with
Mary Johnson at 12 pm tomorrow.
- Response
{
"action":"meeting.create",
"name":"Lunch with Mary Johnson",
"invitees":["Mary Johnson"],
"time":"2014-08-06T12:00:00-07:00"
}
Implement Through Powerful Libraries
不過這些服務,通常會有它的限制
這時候就能用上 Python 強大的函式庫們,來實作自己的版本
我在NLP Libs Sample 寫了這些函式庫的基本使用範例
另外,也可以看自己动手做聊天机器人教程
它是一系列聊天機器人教學,談這些做法背後的理論和實作
Beyond NLP
不過就算做了這些分詞、判斷意圖
也不能保證使用者就會買單
有人稱 Chat Bot 為下一代的 UX Design
Issue
- 如何讓使用者,在機器人的 Scope 內不會碰壁
- 如何讓機器人的判斷足夠 robust,不會每次回答都是不明白
- 如何讓使用者在最少的操作下,得到想得到的服務
更進一步是
如何設計一個有個性、有溫度的機器人
這裡就可以再去研究 NLP 的情感分析
Read More
- WHEN BOTS GO BAD: COMMON UX MISTAKES IN CHATBOT DESIGN
- Does Conversation Hurt Or Help The Chatbot UX?