Java实现话术词槽匹配_知识图谱与KBQA——槽填充
一、相關概念
開放域對話:不太嚴謹的定義可以理解為 ,在不確定用戶意圖前的各種瞎聊,你不知道用戶會問什么樣千奇百怪的問題,但是chatbot都能接住,然后和用戶進行對話,這種就是開放域的對話。
填槽:填槽指的是為了讓用戶意圖轉化為用戶明確的指令而補全信息的過程。
準入條件:從一個開放域轉入到封閉域,或者從一個封閉域轉入到另一個封閉域,中間的跳轉是需要邏輯判斷的,而這個邏輯判斷就是準入條件。
封閉域對話:封閉域對話是指識別用戶意圖后,為了明確用戶目的(或者稱為明確任務細節)而進行的對話。
澄清話術:當用戶的需求中缺乏一些必要條件時,需要對話系統主動發問,把必要條件全部集齊之后再去做最終的滿足執行。
二、槽與槽位
1.槽的定義
填槽的專業表述:從大規模的語料庫中抽取給定實體(query)的被明確定義的屬性(slot types)的值(slot
fillers)——網絡文章定義
所以這里槽可以理解為實體已明確定義的屬性。例如打車中的,出發地點槽,目的地槽,出發時間槽中的屬性分別是“出發地點”、“目的地”和“出發時間”。
2.槽與槽位
槽是由槽位構成的,一個槽位就是一種填槽的方式。
(1)槽位的屬性:接口槽與詞槽
詞槽,通過用戶對話的關鍵詞獲取信息的填槽方式
接口槽,通過其他方式獲取信息的填槽方式
(2)槽位的屬性:槽位優先級
當有多個槽位的時候,槽該采用那個信息,這時候有個優先級。
還是之前的出發地點槽,如果用戶通過詞槽指定了出發地點是A,優先級就應該是最高的,其次才是通過不同的接口槽獲取的B,C等。
3.槽的屬性:可默認填寫/不可默認填寫
有些槽是不可默認填寫的,不填沒辦法繼續下去,有些即使不填,有默認值也可。
4. 槽的屬性: 澄清話術
當槽不可默認填寫同時又沒有填寫的時候,就要進行澄清
為了澄清而表達的內容,就是澄清話術
不同槽的澄清話術不同,例如打車三槽中,目的地的澄清話術可能是“請告訴我您的目的地”,而出發時間的槽可能是“請告訴我您的出發時間”
5. 槽的屬性:澄清順序
當有多個槽需要澄清的時候,就存在先后順序的問題,所以需要一個澄清順序,先問什么,再問什么。
6. 槽的屬性:平級槽或依賴槽
根據槽和槽之間是否獨立,后續的槽是否依賴前面槽的結果。
可以將槽之間的關系分為
平級槽,槽與槽之間沒有依賴,例如打車中的三槽
依賴槽,后續的槽是否依賴前面槽的結果,例如手機號碼槽,不同國家手機號碼格式不同(槽的屬性不同),所以國家槽會影響選擇哪個手機號碼槽。
7. 槽的能力:多輪記憶狀態
它能在對話的過程中,在被打斷回到之前的封閉域對話后,能記住原有填槽的內容,減少重復填槽。
參考網址:
Chatbot中的填槽(Slot Filling)
填槽與多輪對話:AI產品經理需要了解的AI技術概念
三、槽填充
任務型對話系統的語言理解部分,通常使用語義槽來表示用戶的需求,如出發地、到達地、出發時間等信息。通常把領域識別和用戶意圖檢測當做文本分類問題,而把槽填充當做序列標注(Sequence Tagging)問題,也就是把連續序列中每個詞賦予相應的語義類別標簽。 因此可以使用序列標注模型來抽取語義槽。
很多機器學習算法都能夠解決序列標注問題,包括HMM/CFG,hidden vector state(HVS)等生成式模型,以及CRF, SVM等判別式模型。
CRF (條件隨機場)是過去經常使用的序列標注模型,但是受限于馬爾科夫假設,它無法很好的處理長距離依賴問題。
隨著深度學習方法的流行,人們使用循環神經網絡,如雙向 LSTM 來解決長距離依賴問題,同時還避免了繁瑣的特征工程工作。
最近,人們將這兩種方法進行融合,即雙向 LSTM-CRF 模型,進一步提高了槽填充的準確率。
1.基于RNN的槽填充
本次實驗主要參考論文《Using Recurrent Neural Networks for Slot Filling in Spoken Language Understanding 》 ,基于RNN來實現語義槽填充。
本次實驗基于ATIS(Airline Travel Information Systems )數據集。顧名思義,ATIS數據集的領域為"Airline Travel"。ATIS數據集采取流行的"in/out/begin(IOB)標注法": "I-xxx"表示該詞屬于槽xxx,但不是槽xxx中第一個詞;"O"表示該詞不屬于任何語義槽;"B-xxx"表示該詞屬于槽xxx,并且位于槽xxx的首位。
總的來說,將槽填充問題當做序列標注問題是一種有效的做法,而RNN能夠較好的對序列進行建模,提取相關的上下文特征。雙向RNN的表現優于單向RNN,而LSTM的表現優于Simple RNN。
從實驗設置可以看出,本次實驗沒有過多的調參。如果想取得更好的結果,可以進行更細致的調參,包括 :
改變詞向量維度和隱狀態維度;
考慮采用預訓練詞向量,然后固定或者進行微調;
采用正則化技術,包括L1/L2, Dropout, Batch Normalization, Layer Normalization等;
嘗試使用不同的優化器(如Adam),使用mini-batch,調整學習率;
增加epoch次數。
此外,可以考慮在輸入時融入詞性標注和命名實體識別等信息,在輸出時使用Viterbi算法進行解碼,也可以嘗試不同形式的門控RNN(如GRU,LSTM變體等)以及采用多層RNN,并考慮是否使用殘差連接等。
參考網址:“你什么意思”之基于RNN的語義槽填充(Pytorch實現)
2.使用Attention-Based RNN模型識別意圖和槽填充
Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling
這篇文章主要介紹了使用Attention-Based RNN模型識別意圖和槽填充(slot filling)。意圖識別通常使用分類的方法將句子分為相應的意圖種類。槽填充則可以看做是序列標注問題,即對于給定的句子中的每個詞分別打上相應的標簽。
槽填充既可以用RNN模型也可以用encoder-dedoder 模型解決。即源輸入是句子序列,目標輸出則是標注序列,同時意圖識別也可以用encoder-dedoder 模型解決。即源輸入是句子序列,目標輸出則是意圖種類。但是對與槽填充來說,句子與相應的標簽是一 一對應的,也就是說有“explicit alignment”。作者提出了兩種模型,一種是將“alignment information”加入到encoder-dedoder 模型中,另一種就是將“alignment information”和”attention“加入到RNN模型中來解決槽填充和意圖識別問題。
參考網址:意圖識別與槽填充
3.基于BLSTM-CNN-CRF 的聯合槽填充和意圖識別模型
該模型使用來自ATIS 數據集中所有可用問句及其對應的語義幀進行訓練,模型的輸入是問句的序列編碼(如 one-hot編碼),并利用 BLSTM 訓練出的標簽向量與通過CNN 得到的特征向量進行拼接,然后將其組合送至CRF 層解碼出包含意圖信息和槽值信息的完整語義幀。
參考文獻:基于 BLSTM-CNN-CRF 模型的槽填充與意圖識別_華冰濤,袁志祥,肖維民,鄭 嘯
總結
以上是生活随笔為你收集整理的Java实现话术词槽匹配_知识图谱与KBQA——槽填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 获取400的错误信息_获取40
- 下一篇: 计算机二级考数组吗,数组-Java语言程