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