論文《Unsupervised Dialog Structure Learning》筆記:詳解DD-VRNN

D-VRNN模型和DD-VRNN模型

總體架構

image.png
離散-可變循環變分自編碼器(D-VRNN)和直接-離散-可變循環變分自編碼器(DD-VRNN)概述。D-VRNN和DD-VRNN使用不同的先驗分布來建模 z t z_t zt?之間的轉換,如紅色實線所示。 x t x_t xt?的再生成用藍色虛線表示。狀態級別的循環神經網絡的循環關系以灰色虛線點劃線表示。 z t z_t zt?的推斷過程以黑色虛線表示。

方法

原則上,變分遞歸神經網絡(VRNN)在每個時間步都包含一個變分自編碼器(VAE),這些VAE通過一個狀態級的遞歸神經網絡(RNN)相連。在這個RNN中,隱藏狀態變量 h t ? 1 h_{t-1} ht?1? 編碼了直到時間 t t t 的對話上下文。這種連接幫助VRNN模擬對話的時間結構(Chung等人,2015年)。模型的觀測輸入 x t x_t xt? 是構建的話語嵌入。 z t z_t zt? 是時間 t t t 時VRNN中的潛在向量。與Chung等人(2015年)的工作不同,我們模型中的 z t z_t zt? 是一個離散的獨熱向量,其維度為 N N N,其中 N N N 是潛在狀態的總數。

D-VRNN與DD-VRNN之間的主要區別在于 z t z_t zt? 的先驗設定。在D-VRNN中,我們假設 z t z_t zt? 依賴于整個對話上下文 h t ? 1 h_{t-1} ht?1?,如圖(a)中紅色部分所示,這與Chung等人(2015年)的設定相同;而在DD-VRNN中,我們假設在先驗中, z t z_t zt? 直接依賴于 z t ? 1 z_{t-1} zt?1?,以模擬不同潛在狀態之間的直接轉換,如圖(b)中紅色部分所示。我們使用 z t z_t zt? h t ? 1 h_{t-1} ht?1? 來重新生成當前話語 x t x_t xt?,而不是生成下一個話語 x t + 1 x_{t+1} xt+1?,如圖1中藍色虛線所示。重生成的思想有助于恢復對話結構。接下來,遞歸神經網絡利用 h t ? 1 h_{t-1} ht?1? x t x_t xt? z t z_t zt? 更新自身,并允許上下文隨著對話的進行而傳遞,如圖1中灰色點劃線所示。最后,在推斷中,我們用上下文 h t ? 1 h_{t-1} ht?1? x t x_t xt? 構建 z t z_t zt? 的后驗,并通過從后驗中抽樣來推斷 z t z_t zt?,如圖1中黑色虛線所示。每個操作的數學細節在下文中描述。φ(·)τ 是高度靈活的特征提取函數,如神經網絡。 φ τ x φ_{τ}^x φτx? φ z τ φzτ φzτ φ τ p r i o r φ^{prior}_τ φτprior? φ τ e n c φ^{enc}_τ φτenc? φ τ d e c φ^{dec}_τ φτdec? 是分別用于輸入 x x x,潛在向量 z z z,先驗,編碼器和解碼器的特征提取網絡。

句子嵌入

用戶話語 u t = [ w 1 , t , w 2 , t , … , w n w , t ] u_t = [w_{1,t}, w_{2,t}, \ldots, w_{n_w,t}] ut?=[w1,t?,w2,t?,,wnw?,t?] 和系統話語 s t = [ v 1 , t , v 2 , t , … , v n v , t ] s_t = [v_{1,t}, v_{2,t}, \ldots, v_{n_v,t}] st?=[v1,t?,v2,t?,,vnv?,t?] 是在時間 t t t 的用戶話語和系統話語,其中 w i , j w_{i,j} wi,j? v i , j v_{i,j} vi,j? 是單獨的詞語。兩方話語的連接, x t = [ u t , s t ] x_t = [u_t, s_t] xt?=[ut?,st?],是VAE中的觀測變量。我們使用Mikolov等人(2013年)的方法來進行詞嵌入,并對 u t u_t ut? s t s_t st? 的詞嵌入向量進行平均,得到 u ~ t \tilde{u}_t u~t? s ~ t \tilde{s}_t s~t? u ~ t \tilde{u}_t u~t? s ~ t \tilde{s}_t s~t? 的連接被用作 x t x_t xt? 的特征提取,即 ? τ x ( x t ) = [ u ~ t , s ~ t ] \phi^x_\tau (x_t) = [\tilde{u}_t, \tilde{s}_t] ?τx?(xt?)=[u~t?,s~t?] ? τ x ( x t ) \phi^x_\tau (x_t) ?τx?(xt?) 是模型的輸入。

Prior in D-VRNN

在D-VRNN中,先驗是我們在觀察數據之前對 z t z_t zt? 的假設。在D-VRNN中,假設 z t z_t zt? 的先驗依賴于上下文 h t ? 1 h_{t-1} ht?1?,并遵循公式(1)中顯示的分布是合理的,因為對話上下文是影響對話轉換的關鍵因素。由于 z t z_t zt? 是離散的,我們使用softmax函數來獲取分布。

z t ~ softmax ( ? τ prior ( h t ? 1 ) ) (1) z_t \sim \text{softmax}(\phi^{\text{prior}}_\tau (h_{t-1}))\tag{1} zt?softmax(?τprior?(ht?1?))(1)

Prior in DD-VRNN

DD-VRNN中的先驗。 z t z_t zt? 在公式(1)中對整個上下文 h t ? 1 h_{t-1} ht?1? 的依賴性,使得我們難以解開 z t ? 1 z_{t-1} zt?1? z t z_t zt? 之間的關系。但這種關系對于解碼對話交換如何從一次流向下一次至關重要。因此,在DD-VRNN中,我們直接在先驗中模擬 z t ? 1 z_{t-1} zt?1? z t z_t zt? 的影響,如公式(2)和圖1(b)所示。為了將這個先驗分布適配到變分推斷框架中,我們用公式(3)中的 p ( z t ∣ z t ? 1 ) p(z_t|z_{t-1}) p(zt?zt?1?) 來近似 p ( x t ∣ z t , z t ) p(x_t|z_{t}, z_{t}) p(xt?zt?,zt?)。稍后,我們將展示設計的新先驗在特定場景下的優勢。
z t ~ softmax ( ? τ prior ( z t ? 1 ) [ ] (2) z_t \sim \text{softmax}(\phi^{\text{prior}}_\tau (z_{t-1})[\tag{2}] zt?softmax(?τprior?(zt?1?)[](2)

它表示潛在狀態 z t z_t zt? 的先驗分布直接依賴于前一時間步的潛在狀態 z t ? 1 z_{t-1} zt?1?,并通過特征提取函數 ? τ prior \phi^{\text{prior}}_\tau ?τprior? 映射和softmax函數來確定。

image.png

模型整體的概率分布可以近似為:
p ( x ≤ T , z ≤ T ) ≈ ∏ t = 1 T p ( x t ∣ z ≤ t , x < t ) p ( z t ∣ z t ? 1 ) (3) p(x_{\leq T}, z_{\leq T}) \approx \prod_{t=1}^{T} p(x_t|z_{\leq t}, x_{<t})p(z_t|z_{t-1})\tag{3} p(xT?,zT?)t=1T?p(xt?zt?,x<t?)p(zt?zt?1?)(3)

生成

z t z_t zt? 是在上下文下當前對話交換的概括。我們使用 z t z_t zt? h t ? 1 h_{t-1} ht?1? 來重構當前的話語 x t x_t xt?。這種 x t x_t xt? 的重生產允許我們恢復對話結構。

我們使用兩個RNN解碼器,dec1和dec2,分別由參數 γ 1 \gamma_1 γ1? γ 2 \gamma_2 γ2? 參數化,以分別生成原始的 u t u_t ut? s t s_t st? c t c_t ct? d t d_t dt? 是dec1和dec2的隱藏狀態。上下文 h t ? 1 h_{t-1} ht?1? 和特征提取向量 ? τ z ( z t ) \phi^z_\tau (z_t) ?τz?(zt?) 被連接起來,形成dec1的初始隱藏狀態 h 0 dec1 h^{\text{dec1}}_0 h0dec1? c ( n w , t ) c(n_w,t) c(nw?,t) 是dec1的最后一個隱藏狀態。由于 v t v_t vt? u t u_t ut? 的響應,并且會受到 u t u_t ut? 的影響,我們將 c ( n w , t ) c(n_w,t) c(nw?,t) d 0 d_0 d0? 連接起來,將信息從 u t u_t ut? 傳遞給 v t v_t vt?。這個連接向量被用作dec2的 h 0 dec2 h^{\text{dec2}}_0 h0dec2?。這個過程在公式(4)和(5)中顯示。

c 0 = [ h t ? 1 , ? τ z ( z t ) ] c_0 = [h_{t-1}, \phi^z_\tau (z_t)] c0?=[ht?1?,?τz?(zt?)]
w ( i , t ) , c ( i , t ) = f γ 1 ( w ( i ? 1 , t ) , c ( i ? 1 , t ) ) (4) w(i,t), c(i,t) = f_{\gamma_1}(w(i-1,t), c(i-1,t))\tag{4} w(i,t),c(i,t)=fγ1??(w(i?1,t),c(i?1,t))(4)

d 0 = [ h t ? 1 , ? τ z ( z t ) , c ( n w , t ) ] d_0 = [h_{t-1}, \phi^z_\tau (z_t), c(n_{w},t)] d0?=[ht?1?,?τz?(zt?),c(nw?,t)]

v ( i , t ) , d ( i , t ) = f γ 2 ( v ( i ? 1 , t ) , d ( i ? 1 , t ) ) (5) v(i,t), d(i,t) = f_{\gamma_2}(v(i-1,t), d(i-1,t))\tag{5} v(i,t),d(i,t)=fγ2??(v(i?1,t),d(i?1,t))(5)

遞歸過程

狀態級RNN根據以下等式(6)更新其隱藏狀態 h t h_t ht? h t ? 1 h_{t-1} ht?1? f θ f_\theta fθ? 是由參數 θ \theta θ 參數化的RNN。
h t = f θ ( ? τ z ( z t ) , ? τ x ( x t ) , h t ? 1 ) (6) h_t = f_\theta (\phi^z_\tau (z_t), \phi^x_\tau (x_t), h_{t-1}) \tag{6} ht?=fθ?(?τz?(zt?),?τx?(xt?),ht?1?)(6)

推斷

我們根據上下文 h t ? 1 h_{t-1} ht?1? 和當前話語 x t x_t xt? 來推斷 z t z_t zt?,并構建 z t z_t zt? 的后驗分布,通過另一個softmax函數,如等式(7)所示。一旦我們得到了后驗分布,我們應用Gumbel-Softmax來取 z t z_t zt? 的樣本。D-VRNN和DD-VRNN在它們的先驗上有所不同,但在推斷上沒有不同,因為我們假設在先驗中 z t z_t zt? 之間的直接轉換而不是在推斷中。
z t ∣ x t ~ softmax ( ? τ e n c ( h t ? 1 ) , ? τ x ( x t ) ) (7) z_t|x_t \sim \text{softmax}(\phi^{enc}_\tau (h_{t-1}), \phi^x_\tau (x_t)) \tag{7} zt?xt?softmax(?τenc?(ht?1?),?τx?(xt?))(7)

這段文字描述了變分遞歸神經網絡(VRNN)的損失函數,以及為了解決變分自編碼器(VAE)中潛在變量消失的問題,如何結合了兩種損失函數:bow-loss和Batch Prior Regularization (BPR)。以下是對該段落的翻譯以及相關公式的解釋:

損失函數

VRNN的目標函數是其在每個時間步的變分下界,如等式(8)所示(Chung等人,2015)。為了緩解VAE中潛在變量消失的問題,我們結合了bow-loss和Batch Prior Regularization (BPR)(Zhao等人,2017,2018)到最終的損失函數中,并引入了可調整的權重 λ \lambda λ,如等式(9)所示。

L VRNN = E q ( z ≤ T ∣ x ≤ T ) [ log ? p ( x t ∣ z ≤ t , x < t ) ] + \mathcal{L}_{\text{VRNN}} = \mathbb{E}_{q(z_{\leq T}|x_{\leq T})}[\log p(x_t | z_{\leq t},x_{<t})]+ LVRNN?=Eq(zT?xT?)?[logp(xt?zt?,x<t?)]+
∑ t = 1 T ? KL ( q ( z t ∣ x ≤ t , z < t ) ∥ p ( z t ∣ x < t , z < t ) ) (8) \sum_{t=1}^{T} -\text{KL}(q(z_t | x_{\leq t},z_{<t}) \| p(z_t | x_{<t},z_{<t}))\tag{8} t=1T??KL(q(zt?xt?,z<t?)p(zt?x<t?,z<t?))(8)

L D-VRNN = L VRNN-BPR + λ ? L bow (9) \mathcal{L}_{\text{D-VRNN}} = \mathcal{L}_{\text{VRNN-BPR}} + \lambda * \mathcal{L}_{\text{bow}} \tag{9} LD-VRNN?=LVRNN-BPR?+λ?Lbow?(9)

狀態轉移概率計算

一種既能數值表示又能視覺表示對話結構的好方法是構建一個潛在狀態之間的轉移概率表。這樣的轉移概率也可以用來設計在強化學習(RL)訓練過程中的獎勵函數。我們因為D-VRNN和DD-VRNN的先驗不同,所以分別計算它們的轉移表。

D-VRNN

從等式(6)我們知道 h t h_t ht? x ≤ t x_{\leq t} xt? z < t z_{<t} z<t? 的函數。結合等式(1)和(6),我們發現 z t z_t zt? x ≤ t x_{\leq t} xt? z < t z_{<t} z<t? 的函數。因此, z < t z_{<t} z<t? z t z_t zt? 有一個間接的影響通過 h t ? 1 h_{t-1} ht?1?。這個間接影響加強了我們的假設,即前面的狀態 z < t z_{<t} z<t? 影響未來的狀態 z t z_t zt?,但也使得恢復一個清晰的結構和解開 z t ? 1 z_{t-1} zt?1? z t z_t zt? 直接影響變得困難。

為了更好地可視化對話結構并與基于HMM的模型進行比較,我們通過估算二元轉移概率表來量化 z t ? 1 z_{t-1} zt?1? z t z_t zt? 的影響,其中 p i , j = # ( s t a t e i , s t a t e j ) # ( s t a t e i ) p_{i,j} = \frac{\#(state_i,state_j)}{\#(state_i)} pi,j?=#(statei?)#(statei?,statej?)?。分子是有序對( s t a t e i , t ? 1 state_i, t-1 statei?,t?1 s t a t e j , t state_j, t statej?,t)的總數,分母是數據集中 s t a t e i state_i statei? 的總數。我們選擇一個二元轉移表而不是一個更大 n n n n n n-gram轉移表,因為最近的上下文通常是最相關的,但應該注意的是,與HMM模型不同,我們模型中的轉移程度既不是有限的也不是預先確定的,因為 z t z_t zt? 捕獲了所有上下文。根據不同的應用,可能會選擇不同的 n n n

命名實體離散變分遞歸神經網絡(NE-D-VRNN)

在任務導向對話系統中,某些命名實體的存在,如食物偏好,對于確定對話的階段起著關鍵作用。為了確保潛在狀態捕獲此類有用信息,我們在計算等式(9)中的損失函數時,對命名實體賦予更大的權重。這些權重鼓勵重構的話語含有更多正確的命名實體,因此影響潛在狀態有更好的表示。我們將這個模型稱為NED-VRNN(命名實體離散變分遞歸神經網絡)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161993.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161993.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust錯誤處理:Result

文章目錄 簡介錯誤匹配 Rust基礎教程&#xff1a; 初步? 所有權? 結構體和枚舉類? 函數進階? 泛型和特征? 并發和線程通信? cargo包管理? 可空類型Option Rust進階教程&#xff1a; 用宏實現參數可變的函數? 類函數宏 簡介 Rust中沒有提供類似try…catch之類…

qt雙擊treeview節點之后,完成編輯,獲取完成編輯得信號

Qt 中&#xff0c;要獲取 QTreeView 節點完成編輯的信號&#xff0c;您可以使用 QTreeView 的 doubleClicked 信號以及重寫相應的編輯觸發函數。通常情況下&#xff0c;完成編輯后會觸發 closeEditor 信號。 以下是一個示例代碼&#xff0c;演示了如何實現這個功能&#xff1a…

【亞太杯思路助攻】2023年第十三屆APMCM亞太地區大學生數學建模競賽——(文末領取方式)

2023年第十三屆APMCM亞太地區大學生數學建模競賽——正式開賽&#xff01;&#xff01;&#xff01; 賽題已由高分雅思學姐翻譯完成&#xff0c;我們的O獎學長也在第一時間分析了賽題&#xff0c;幫助大家最快時間&#xff0c;選擇最適合是自己的賽題。 B題 C題 祝各位小伙伴都…

[Android]使用Retrofit進行網絡請求

以下是使用 Retrofit 發送 POST 請求獲取分頁城市列表的 Kotlin 代碼示例 1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依賴 dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2…

排序算法--歸并排序

實現邏輯 ① 將序列每相鄰兩個數字進行歸并操作&#xff0c;形成floor(n/2)個序列&#xff0c;排序后每個序列包含兩個元素 ② 將上述序列再次歸并&#xff0c;形成floor(n/4)個序列&#xff0c;每個序列包含四個元素 ③ 重復步驟②&#xff0c;直到所有元素排序完畢 void pri…

C#結合JavaScript實現上傳視頻到騰訊云點播平臺

目錄 需求 關鍵代碼 界面元素布局 C# 實現服務端的簽名類 上傳視頻的JS實現 視頻演示 小結 需求 在云培訓系統里&#xff0c;制作視頻課件是我們的主要工作之一&#xff0c;制作完成后如果將這些素材存儲到服務器并進行分發播放&#xff0c;是擺在我們面前的一個問題。…

JVM垃圾回收相關算法

目錄 一、前言 二、標記階段&#xff1a;引用計數算法 三、標記階段&#xff1a;可達性分析算法 &#xff08;一&#xff09;基本思路 &#xff08;二&#xff09;GC Roots對象 四、對象的finalization機制 五、MAT與JProfiler的GC Roots溯源 六、清除階段&#xff1a;…

基于PCA算法的點云平面擬合

平面擬合 1、平面擬合2、參考文獻3、相關代碼 1、平面擬合 PCA 是一種數學變換的方法&#xff0c;利用降維的思想在變換中保持變量的總方差不變&#xff0c;將給定的一組變量線性變換為另一組不相關的變量&#xff0c;并且使變換后的第一變量的方差最大&#xff0c;即第一主成分…

OpenCV將兩張圖片拼接成一張圖片

OpenCV將兩張圖片拼接成一張圖片 示例代碼1示例代碼2 可以用opencv或者numpy的拼接函數&#xff0c;直接將兩張圖拼接到一起&#xff0c;很簡單方便&#xff0c;參考代碼2&#xff0c;推薦此方式。新建圖片&#xff0c;將兩張圖片的像素值填充到新圖片對應位置上即可&#xff0…

leetcode 32最長有效括號 34在排序數組中查找元素的第一個和最后一個位置

32. 最長有效括號 給你一個只包含 ( 和 ) 的字符串&#xff0c;找出最長有效&#xff08;格式正確且連續&#xff09;括號子串的長度。 示例 1&#xff1a; 輸入&#xff1a;s "(()" 輸出&#xff1a;2 解釋&#xff1a;最長有效括號子串是 "()" 示例 2&a…

python 二分查找函數應用——bisect_left(nums,target),bisect_right(nums,target)

bisect_left(nums,target),bisect_right(nums,target)是python內置的函數&#xff0c;可以便捷的幫我們完成一些有序序列的查找工作&#xff0c;現在將用三個樣例進行講解演示 前提注意事項&#xff1a; 導入函數模塊 待處理序列必須有序&#xff01;&#xff01;&#xff0…

淺談WPF之各種Template

前幾天寫了一篇文章【淺談WPF之控件模板和數據模板】&#xff0c;有粉絲反饋說這兩種模板容易弄混&#xff0c;不知道什么時候該用控件模塊&#xff0c;什么時候該用數據模板&#xff0c;以及template和itemtemplate之間的關系等&#xff0c;今天專門寫一篇文章&#xff0c;簡述…

26 - 原型模式與享元模式:提升系統性能的利器

原型模式和享元模式&#xff0c;前者是在創建多個實例時&#xff0c;對創建過程的性能進行調優&#xff1b;后者是用減少創建實例的方式&#xff0c;來調優系統性能。這么看&#xff0c;你會不會覺得兩個模式有點相互矛盾呢&#xff1f; 其實不然&#xff0c;它們的使用是分場…

TC397 EB MCAL開發從0開始系列 之 [15.1] Fee配置 - 雙扇區demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

2023年學習Go語言是否值得?探索Go語言的魅力

關注公眾號【愛發白日夢的后端】分享技術干貨、讀書筆記、開源項目、實戰經驗、高效開發工具等&#xff0c;您的關注將是我的更新動力&#xff01; 作為一門流行且不斷增長的編程語言&#xff0c;Go語言在2023年是否值得學習呢&#xff1f;讓我們來看看學習Go語言的好處以及為何…

Java使用Maven打包jar包的全部方式

1. spring-boot-maven-plugin插件&#xff08;在springboot項目中使用&#xff09; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals>…

1410.HTML 實體解析器

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;1410. HTML 實體解析器 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 使用map存放特殊字符串及其應被替換為的字符串。然后遍歷字符串替換 map 中的字符串即可。 解題代碼&#xff1a; …

ubuntu 手動清理內存cache

/proc是一個虛擬文件系統&#xff0c;我們可以通過對它的讀寫操作來做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件&#xff0c;來對當前kernel的行為做出調整。 那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下&#xff1a; …