|
上一期談到,query理解很大程度上是為后續(xù)的結(jié)果生成服務(wù)的,這一期就來講講,在系統(tǒng)理解了用戶query后,是怎么處理產(chǎn)生回復發(fā)送到用戶手里的。 這個小系列的文章記錄:
對話系統(tǒng)最為獨特的,就是這個多輪的問題,我自己本身對這塊不熟,也是在努力的學習下,有一些自己的感受和思考。 多輪的核心——對話管理人能夠進行多輪對話,很大程度和我們能記住并且使用溝通過程產(chǎn)生的信息和共識,這里值得注意的是,有兩個關(guān)鍵的能力,一個是記住,另一個是使用。而現(xiàn)有的大量技術(shù)也都是圍繞著這兩點來搭建的,甚至,比較統(tǒng)一的形成了一個“對話管理模塊”,即Dialog Management,DM。 對話管理承擔了多輪對話中信息的記錄和使用,所謂的記錄,就是對話過程的跟蹤,一般被稱為'Dialog State Tracking','DST'對話狀態(tài)跟蹤,而所謂的使用,有一個跟有意思的說法,叫做對話策略,'Dialog Policy',DP。這點和我們?nèi)粘5牧奶旌芟?,我們在對話過程中,一方面是能接收雙方交換的信息,另一方面也會根據(jù)自己的目標或者想法制定不同的對話策略,從而達到自己的目標。 當然了,這里的拆解的部分,在現(xiàn)實應用中并不一定是獨立拆分開的,可能是組合而成的端到端形式,也可能是拆解分開的形式,這個是根據(jù)現(xiàn)實情況來進行選擇的。
拆分式的對話管理因為把整個對話管理模塊進行了拆解,因此整個對話從信息的梳理存儲到對話策略的制定都會很明確,大家看起來也會非常好理解,這里先講這個。 先用最常見的就是任務(wù)型對話作為例子,這個例子前面是提到過的:
這是一段訂機票的任務(wù)型對話,這段任務(wù)型對話其實并不復雜,目標很明確,就是要引導用戶把所有信息都填充清楚后,進行訂機票的操作,列舉下來就這幾件事:
顯然,這種方式是非常規(guī)則化簡單化的,而隨著逐漸復雜,對話策略也就會逐步復雜,逐步迭代為一些類似類似用樹或者用有限狀態(tài)自動機來對這些規(guī)則進行合理化管理。 既然是拆解,那我們就拆解來看這些任務(wù)怎么做。 對話流程中的DSTDST主要用于對對話過程中的內(nèi)容就進行管理維護,這是為了下一步對話策略進行分析做基礎(chǔ)的,最簡單的方式其實就是直接用緩存把對話內(nèi)容記下來,形成可解釋的部分,如下面一個格式,只列舉部分字段: {而后對話策略根據(jù)缺失的信息進行追問即可。 而后,隨著內(nèi)容逐漸豐富,場景逐漸復雜,甚至因為輪數(shù)增加部分信息也有了更新和變化,這種固定格式的并不一定能夠滿足我們的需求,于是有了更多的改進措施,也逐步向模型、泛化的方式進行。 首先是對話狀態(tài)的表示,不難看出對話狀態(tài)數(shù)跟意圖和槽值對的數(shù)成指數(shù)關(guān)系,因此需要考慮構(gòu)造合理的模式來實現(xiàn),例如隱含信息狀態(tài)、貝葉斯更新等。然后是狀態(tài)的更新和轉(zhuǎn)移,這種隨著任務(wù)逐步復雜,是最快進行模型化的,從CRF到RNN,甚至用到遷移學習等,也從單一任務(wù)或者槽位的跟蹤逐步升級為多任務(wù)多目標的跟蹤,在DSTC大型賽事中被驗證具有很好的效果。此處已經(jīng)是一個非常完整的體系了,我也并不專業(yè),這里不展開,大家可以看看其他大佬的博客,我這里列舉一些好文章吧:
對話流程中的DPDP就是對話策略,對話策略是根據(jù)現(xiàn)有的query理解和DST,制定對話返回策略的部分,這部分一旦敲定,其實最終的回復也就差不多了,所以重要性也可想而知。 常見的對話策略都還比較簡單,例如上面的任務(wù)型,其實就是比較簡單的用一些規(guī)則,根據(jù)缺失的信息制定回復策略進行追問即可,這里甚至不需要很多復雜的操作,規(guī)則即可,但這也就僅限在一些比較簡單任務(wù)了,對于復雜的任務(wù),進行復雜的策略分析和預測就顯得非常必要,DPL(對話策略學習)應運而生。 考慮到很多對話策略的文章直接就本著強化學習去聊了,但是我個人其實并不太想直奔那塊,而是想把對話策略先當成分類來去聊(雖然我也知道,強化學習某種意義上其實和分類問題很像),即在現(xiàn)有信息下,我們把策略的選擇當成是一個分類問題來去看,有了消息,我們該采取哪種策略,這點來看他實打?qū)嵕褪且粋€分類問題,主要原因是,它涉及的信息很多,最重要把他們綜合起來,在各種策略中找到一個比較好的,這無疑就是一個分類問題,再升級一下,可能就是一個召回+TOP1排序的問題:
毫無疑問,想到這里,分類問題很合適,甚至適合在這里構(gòu)造一個完整的分類系統(tǒng),從模型分類到召回-排序的模式來做,都沒有問題。 而后,由于本身DP就是一個決策問題,甚至是一個多次決策的問題,因此把問題交給強化學習可能更好,于是強化學習就開始成為DP的重要手段了。說到強化學習,必須提到的就是強化學習本身需要的元素,即狀態(tài)、動作、獎勵,在多輪對話里,狀態(tài)就可以理解為DST中的信息,動作就是采取的對話策略,獎勵就是采取行動會得到的獎勵,我們所希望的就是全局,也就是整次對話下來,獎勵最高,多輪對話無疑是符合這個模式的。 和DST一樣,我這里不展開說,有興趣大家可以自己進行深入閱讀,我這里放一些我覺得比較好的文章吧:
端到端式的對話管理端到端式的對話管理大部分出現(xiàn)在學術(shù)界中,用過特定的模型完成多輪信息的整合和對話策略的決策,甚至從輸入開始進行串聯(lián),從輸入直接到輸出完成全局的端到端結(jié)果回復。 檢索式多輪沒錯,檢索式其實也有多輪,也能做多輪,而且其實研究還不少,其本質(zhì)就是把歷史的對話信息和當前的回復都放到模型的輸入中,形成端到端的模式,不過從社區(qū)目前的關(guān)注度來看,關(guān)注度其實并不太高,列出一些文章供大家參考下:
生成式多輪與檢索式對應的生成式多輪,生成式的靈活性可想而知。簡單的方案其實很早就有了,seq2seq就是最經(jīng)典的操作,直接將這些對話信息放入模型,這種操作方式和編碼器類似,能直接生成一些基本的多輪回復,這種方式雖然簡單,但終究算是一個可行的方法。 而后,考慮到對話信息的存儲和處理,以及對知識的錄入,其實慢慢的開始有用大模型、知識圖譜的趨勢,開始構(gòu)造出更加順滑,具有一定知識性的回復結(jié)果,GPT、BERT的始祖Transformer做的是機器翻譯,而這本質(zhì)其實還是文本生成,結(jié)合對抗生成模型的介入,這種模式為生成式多輪帶來了新的發(fā)展。
多輪對話的其他問題和難點除了上面聊的東西,其實很多場景都面臨很多復雜多樣的問題,這些我經(jīng)常有聽說過的,列舉一下,有興趣的也可以多查查資料學習,也歡迎各位大佬推薦文章深入學習和閱讀。
拓展閱讀文章寫完了,但是總感覺意猶未盡,還有很多細節(jié)感覺無法寫完,否則這就奔著一本書之類的去了,先到此為止吧。對話系統(tǒng),和推薦系統(tǒng)、搜索系統(tǒng)一樣,都是一些很復雜的系統(tǒng),而且系統(tǒng)還會受到各種場景問題的外因(客服、智能助手、閑聊等)、系統(tǒng)內(nèi)運轉(zhuǎn)的內(nèi)因(多輪信息的存儲、知識庫的挖掘存儲、多意圖處理)影響,從而產(chǎn)生了其實并不一致的各種解決方案,目前雖有大體統(tǒng)一的趨勢,但是內(nèi)部結(jié)構(gòu)其實都有對自己面對的問題做了很多權(quán)衡,如果要變得更為深入,那就需要自己多實踐+多閱讀,多看看更多的方案和論文,才能有更好的提升。 這里,列舉一些比較好的材料供大家參考學習吧:
另外大家也可以關(guān)注幾個大廠的對話系統(tǒng),技術(shù)都相對成熟了,部分會需求和應用的原因,會有些技術(shù)領(lǐng)域的限制,主要包括幾個語音助手(小布助手、小愛同學、siri、天貓精靈、小度等),幾個大廠(美團、平安、阿里小蜜、58等都有不少對話系統(tǒng)的分享)。 |
|
|