基於反饋的Query改寫 你說過的,我才最懂

2021-10-13 10:32:52 字數 3081 閱讀 5441

本文對之前做過一段時間的query改寫(糾錯,本文不嚴格區分這兩種叫法)做一些總結,演算法原理可以參考亞馬遜的這篇**:feedback-based self-learning in large-scale conversational ai agents。

並且分數值滿足一定的閾值設定,那麼可以把改寫的query和原始query一起送入下游意圖識別模組,看召回情況,再打分。

這種改寫方式,有理有據,但相應的短板也非常明顯:

另外還有一些seq2seq系列的方法,也做過相應的實驗,這類改寫方法過於不可控,當做玩具試試是可以的,包括也有*****結合bert來做的。

那麼,有沒有方法可以彌補上述經典糾錯方法的短板呢?

亞馬遜的這篇*****,提供了一種新的思路,筆者之前也已復現並小幅改進了該篇**,效果屬實驚豔。*****幹的事情,其實就是提出了一種挖掘query改寫對的方法,基於使用者和chatbot的歷史互動資料,挖掘改寫對,並把改寫對提供給線上改寫模組,進行整句替換,像alexa、小愛、天貓精靈等,都有著對應的應用場景。

那麼,*****是怎麼幹的?流程如下:

使用者query->dis對映

session資料構造

markov離線計算

最優nlu修正計算

主要講講前三個步驟,我們分別來看,以使用者和chatbot互動的歷史資料為例,第一步幹的事情,是把這些歷史資料構造成query->dis的對映結構,關於dis是啥,來看*****中一張圖:

上圖中的hidden state組成了interpretation space,在實操中,筆者並沒有直接把query對齊*****中的hidden state構建(,,),而是將query對映到乙個新的dis空間,dis由domain+intent+slot組成,我們要把相似的query給對映到統一的dis空間中。

第二步session資料,是由dis和reply組成的。那麼session資料是怎麼構造的呢,*****中做了乙個約定,使用者和chatbot連續兩次的互動時間差在45s以內的,才能屬於同乙個連續的session。以上圖c為例,下面是user和chatbot的一次完整互動記錄:

user:play stickable me

chatbot:???

user:play the album stickable me

chatbot:??? 

user:play despicable me

chatbot:ok.

前兩輪的互動中,由於asr識別錯誤、使用者表述不明等可能的原因,chatbot並沒能正確識別使用者意圖, 前兩輪user的utterance(query)分別被對映入不同的dis空間中,分別為:

music,#,music.dialog.general.general,#song:stickable me

music,#,music.dialog.general.general,#album:stickable me

music,#,music.dialog.general.general,#album:despicable me

當我們構建好了足夠多這樣的session資料後,就能成功地計算出不同的utterance和dis之間的轉移概率:

第三步,當session資料構造完畢後,我們便可以得到乙個完整的dis空間,該dis空間各個dis之間的轉移狀態  也就能得到了。

得到了,,後,回過頭來想想問題是不是可以轉換為:當由於asr識別錯誤或者使用者表述錯誤等原因,chatbot未能正確識別使用者的意圖時,我們需要計算出一條最有可能的路徑,以到達錯誤utterance最有可能的改寫utterance?而第一步,即要求出原始錯誤的dis到達最有可能的dis的路徑。此時,我們引入吸收馬爾科夫鏈,關於吸收馬爾科夫鏈的具體介紹,可以自行搜尋學習。

為計算出每個可能的非吸收態到吸收態的概率,構造轉移矩陣如下:

這裡的是dis之間的轉移矩陣,是各個是各個dis狀態到成功/失敗狀態的轉移概率矩陣,是乙個單位矩陣。

中間還會有幾步矩陣的計算比較關鍵,這裡不細講,最終我們會得到乙個從起始dis狀態到達success狀態的最有可能路徑,結合前述得到的和,我們即能算得最有可能的源utterance到目標utterance。

下面來看幾個改寫例子,有乙個直觀的感受:

鳥兒對話說-->鳥兒對花說

泰國新加坡-->咖哩咖哩

閉上你的狗嘴-->暫停

第乙個改寫對,金來改寫為驚雷,《驚雷》是2023年的一首神曲(?),在挖掘的過程中,asr誤識別為」金來「,我們將其正確改寫為了驚雷,這個case用編輯距離、相似度結合打分的方法也能解,第二個case同理;

同樣,在和chatbot互動的過程中,可能存在使用者表述不完整或者由於雜訊影響a導致asr識別不全等情景,以第三個case為例,便可給出演算法認為改寫正確的utterance,算是一種資訊的補全;

第五個case,是使用者想要讓chatbot中止當前的工作,用比較口語化的語言讓chatbot終止狀態,然而chatbot無法理解,只有在使用者說了比較清晰直觀的祈使命令,chatbot才會執行對應操作。

實操中,在仔細分析了大量的改寫case後,我們認為類似於第

四、五種case,已經不是傳統意義上的改寫任務,而更加是一種推薦任務。

以上是基於amazon的*****以及自己的一些實操經歷,針對多輪對話類改寫任務的一點小小總結,在工程上,對於上述的方法也做了一些嘗試,非常有趣。此外,在面向頭部和長尾的query改寫任務時,試過不少的方法,也踩了不少的坑,歡迎相關研究方向的小夥伴一起入坑討論。

陶冶了我的情操歌德說過

在哪唧唧喳喳的逛街 今天的在哪唧唧喳喳的逛街,也不像,我很相信,那是在排練舞蹈,陶冶了我的情操歌德說過,它讓我們有了壓力,賽跑應該每只鳥跑一次呀,我便起了好奇心,我才覺得世上並沒有佛祖,書中自有顏如玉。後來,構成了乙個完美的五線譜,白雪非常奇特,所以,讀書,過了幾秒鐘,它不是往上衝,有時會讓你考不好...

你說你很愛這首詩,我說我也有首很愛的詩

上次我們出去玩,不知怎麼就聊到了詩,你說你很愛 致橡樹 從最開始讀到就喜歡上了它,淡淡的,但韻味綿長。稍微有點遺憾的是,但是我就記得幾句,不然我會靜靜的背出來給你聽。致橡樹 舒婷 我如果愛你 絕不像攀援的凌霄花,借你的高枝炫耀自己 我如果愛你 絕不學痴情的鳥兒,為綠蔭重複單調的歌曲 也不止像泉源,常...

因為你是我愛的人 你說的我都相信

qq個性簽名 因為你是我愛的人 你說的我都相信 1.從你叫什麼名字開始,後來就有了這一切 2.你有病麼 你有藥麼 我恨你 我愛你 我不要 我想要 3.我能在15億人裡面愛上你乙個,真的不容易.對我好點,可以麼 4.他好像很好又好像很糟可我想擁抱他.5.他說愛你愛你又沒說只會愛你 6.如果你準備分手 ...