2019年1月3日 星期四

[NLP] 自然語言處理觀念整理-5 (設計聊天機器人)

 

自然語言處理觀念整理-5


我們希望建構一個ChatBot平台, 允許使用者文字輸入 ,並讓開發者可以自行建立技能, 透過平台來觸發與操作技能, 來達到目的, 例如查天氣,訂車票,...等這類為開發者自定義技能, 本篇來探討平台設計時會發生的問題與解決方法
聊天機器人的三種模式:

聊天機器人的流程:




角色
管理者就是智慧音箱與聊天機器人平台的系統人員
開發者就是技能的開發者(例如查天氣,訂車票,放音樂的技能開發者)
使用者就是使用聊天系統對話的人


問題流程

操作流程示意圖

要完成以上的流程, 開發者必須先在平台上進行設定語意分析的參數(參數設定示意圖在下方), 完成後即可執行整個流程

===以下為流程===

>>使用者輸入文字

>> 進行語意分析
系統會由開發者自行定義的語法模型關鍵字找出意圖插槽,  人.時間.地點.數字因為判定過程較複雜, 交平台判定,  使用者也可以自訂實體來進行判定, 如下圖所示


語意分析示意圖



>> 插槽條件判定
找出意圖與插槽後, 會進行插槽條件判定, 當不足時, 系統會再次詢問使用者, 例如請問您想訂車票的時間是? 這些句子也在平台中設定

>> 插槽條件判定串接開發者API
若希望即時對使用者輸入做判定, 可以在每次問題回答完串接開發者API檢查是否正確, 再丟推薦選項給使用者

>> 插槽條件滿足後呼叫開發者技能API執行動作
將控制權還給開發者, 開發者自行設計該技能聊天互動流程, 設計選項與動作, 再透過聊天機器人API來發送訊息


參數設定
要能執行以上流程, 開發者必須先到語意分析進行參數設定, 參數設定包含
  • 新增技能 - 查天氣
  • 新增技能關鍵字 - 天氣,氣候,熱嗎,冷嗎......
  • 新增插槽與實體 - 地點 & 時間
  • 新增語法模型(正規表示法) - (datetime)(location)的天氣好嗎?
  • 設定插槽觸發條件 - datetime+location同時滿足
語意分析參數設定示意圖

進階功能
  • 管理者提供相關自然語言處理的API讓開發者於開發技能時使用, 例如文字注音互轉, 簡繁互轉, 文字數字轉阿拉伯數字, 時間判定, 斷詞, 找同義詞......等
  • 時間判定上是屬於較困難的部分, 必須考慮農曆國曆轉換, 節日設定, 週期時間(每周一), 區間時間(周二到周四)......等問題 
  • 提供即時測試的環境讓開發者直接測試, 調整參數
  • 在設定關鍵字時可以透過找同義詞功能協助
  • 使用者在回答問題時, 系統可以推薦出最有可能的選項
  • 將使用者使用log分析, 推播給開發者, 協助開發者調整參數
  • 意圖可能有多組讓使用者選擇
  • 問題回答到一半可以換技能, 也可以一次只回答一個問題, 設定錯誤次數跳離對話迴圈

找不到技能

將話題引導回技能

同義詞找技能
從「預約、門診、看診」中,探索出其他意涵相近的詞彙,例如「看病、掛號、上班時間」等 -> 提供門診時間表, 有多意圖則讓使用者選擇

情境
「我要預約今晚的門診」 -> 『您好,請參考門診時間表 🏥
「我今晚想過去看病」-> 『您好,請參考門診時間表 🏥
「你們星期天有開嗎?」->『您好,請參考門診時間表 🏥

推薦技能
情境
「我要預約今晚的門診」
-> 『對不起我不明白您的意思』
-> 依照過去使用者技能推薦skill列表
-> 列出小秘書最常用的skill列表
轉給客服
情境
「我要預約今晚的門診」
-> 『對不起我不明白您的意思』
-> 『是否連絡客服』
-> 
轉發訊息or qcall給技能開發者



閒聊
當技能比對不到, 可以透過閒聊來回答使用者, 這部分就是非常困難的部分, 方法很多種, 大概的方向為:

  • 建議先設定要閒聊的話題範圍, 範圍過大精準度難以提升, 容易變搞笑機器人
  • 蒐集對話庫, 可由ptt.Dcard.wiki...等來蒐集
  • 使用者問句要與對話庫的問句比對找出最相近的, 再產生相對應的答案句, 要比對就需透過一些演算法
  • 演算法 : 斷詞, 找關鍵字, 找同義字, 標註詞性, 句子語意分析, 情緒分析, 問句分類......等等, 所使用到的演算法很多種必須要去實驗看看
  • 回答句子也可以使用生成式(如深度學習sequence to sequence), 但須有大量語料庫進行訓練, 若生成句子文法怪異, 容易讓使用者對系統降低信心


開放API
將語句丟給google search 或 wiki 或其他......

結果測試
使用者輸入 : 今天台北天氣好嗎?
就會取得intent(意圖), 時間與地點的slot(插槽)


以下是google DialogFlow範例畫面, 可當成系統設計參考
1. 設定agent

2. 設定訓練語句(by agent)


3. 設定entity


4. 設定slot與entity對應


5. 設定slot與entity對應


應用
透過user意圖 推敲更深的意圖
例如調高銀行額度 >>貸款

  • chatbot客服當user想切到真人客服時, 可以先把重要的資訊萃取出來,  或顧客抱怨把資訊萃取出來給後續應用
  • tfidf 可以當成萃取的過濾, 過濾掉不重要的字
  • textrank萃取重要資訊不會比tfidf更好, 斷詞影響非常重要
  • 當發生國際事件時, 想知道tweet在討論什麼, 把文章做topic modeling(LDA, BERT topic(較精準)想去找出淺在的想法), 再取關鍵字, 再透過關鍵字爬文之類的應用, 找到想對應新聞再Summarization, 縮小範圍
  • prediction喂入資料如果依照時間序列, 出來就可以有預測的序列, 就可以知道每個時間區間被分到的類別情緒, 還有其他如國家, 地區或預測資料的欄位都可以拿來交叉做分析


Ref:



沒有留言:

張貼留言