<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【NLP】文本生成?還不快上知識(shí)庫

          共 5405字,需瀏覽 11分鐘

           ·

          2020-10-25 11:19

          公眾號(hào)關(guān)注?“ML_NLP
          設(shè)為 “星標(biāo)”,重磅干貨,第一時(shí)間送達(dá)!

          來自 |?知乎

          地址 | https://zhuanlan.zhihu.com/p/163343976

          作者 | 三和廠妹

          編輯 |?機(jī)器學(xué)習(xí)算法與自然語言處理公眾號(hào)

          本文已獲得作者授權(quán),未經(jīng)許可禁止二次轉(zhuǎn)載


          本文本來是寫ACL2020一篇對(duì)話系統(tǒng)論文《Dynamic Fusion Network for Multi-Domain End-to-end Task-Oriented Dialog》筆記,發(fā)現(xiàn)需要太多的前序知識(shí),于是順便按時(shí)間順序整理了一下記憶網(wǎng)絡(luò)和知識(shí)庫任務(wù)導(dǎo)向的幾篇經(jīng)典論文。

          知識(shí)庫導(dǎo)向

          知識(shí)庫任務(wù)導(dǎo)向可以融合進(jìn)很多任務(wù)中,如ERNIE就是在bert的基礎(chǔ)上利用了知識(shí)庫;之前在一個(gè)信息抽取的比賽任務(wù)冠軍方案中,看到加入知識(shí)庫也是一個(gè)上分點(diǎn),在抽取人物或者作品的時(shí)候,知識(shí)庫能幫你確認(rèn)這是什么類型;另外,比如知識(shí)庫在對(duì)話文本生成的場景中,如果不結(jié)合外部知識(shí)庫,生成的任務(wù)語義都只能源于訓(xùn)練數(shù)據(jù),無法獲得一些常識(shí)性知識(shí),如:

          ”我想喝星巴克“
          ”附近沒有星巴克呢,有其他咖啡店請問你需要么“

          如果你的訓(xùn)練數(shù)據(jù)中沒有”星巴克“是”咖啡店“的知識(shí),那捕獲不到這種語義,而依賴知識(shí)庫,相當(dāng)于給一個(gè)已經(jīng)十歲的孩子再教育,比剛生出來開始教爬容易多了。

          記憶網(wǎng)絡(luò)

          MemNN也是NLP的一個(gè)分支,它最大的特點(diǎn)是不像普通的編碼結(jié)構(gòu)如LSTM和CNN之類的會(huì)對(duì)信息壓縮成hidden state,從hidden state中抽取特征,這類方法產(chǎn)生的記憶太小了,在壓縮過程中損失了很多有用信息,MemNN是將所有的信息存在一個(gè)外部memory中,和inference一起聯(lián)合訓(xùn)練,得到一個(gè)能夠存儲(chǔ)和更新的長期記憶模塊,最大限度的保存有用信息。

          通過幾篇論文具體了解一下:

          1. MemNN記憶網(wǎng)絡(luò)原理簡介

          MemNN主要包括2種操作

          • embedding:sentence經(jīng)embedding過程產(chǎn)生2個(gè)矩陣:input(圖中 embedding A) 和output matrix (embedding B)

          • inference: 計(jì)算得到和上述內(nèi)部向量之間的相關(guān)性,具體是三個(gè)步驟。


          1. input memory representation過程會(huì)計(jì)算問題向量Embedding B 和input matrix (Embedding A )的點(diǎn)積后歸一化,得到和input matrix維度一致的概率向量p,即問題和各記憶向量的相關(guān)程度;

          2. output memory representation過程將output matrix(Embedding c)按概率向量p進(jìn)行加權(quán)求和,得到輸出向量o,相當(dāng)于選取了相關(guān)性最高的記憶向量組合;

          3. output calculation是將輸出向量轉(zhuǎn)化為所需答案的格式,得到各單詞相對(duì)答案的概率,運(yùn)算是全連接型的矩陣乘累加;


          • inference是通過多層神經(jīng)網(wǎng)絡(luò)來推斷語句和問題的相關(guān)性(圖中右邊的多個(gè)疊加)

          MemNN 存在的問題

          • MemNN對(duì)輸入內(nèi)容的保存沒有經(jīng)過大幅度的壓縮(參數(shù)都是embedding),信息完整性很高,這樣在問答推理上相比RNN等壓縮模型很有優(yōu)勢,不過帶來的問題就是存儲(chǔ)空間會(huì)隨著內(nèi)容的增大而線性增加,內(nèi)存帶寬需求的增加。

          • 由于MemNN計(jì)算的特點(diǎn)是從sentence生成的多個(gè)向量中選擇相關(guān)性最大的產(chǎn)生答案,因此中間結(jié)果矩陣會(huì)是一個(gè)很稀疏的矩陣,只有相關(guān)性較強(qiáng)的部分才有值,其他不相關(guān)的幾乎都是0,因此密集運(yùn)算加速器(如GPU等)效果就不好了,需要軟件和硬件著重考慮如何進(jìn)行稀疏性的優(yōu)化。

          2. KV-MemNN 字典型記憶網(wǎng)絡(luò)

          在MemN2N中把context線性變換成了一個(gè)整體的embedding作為memory,而KV-MemNN的不同之處在于引入了外部知識(shí)源,將其中的memory變成了(key, value)鍵值對(duì)。

          主要包括下面三個(gè)步驟:

          • Key Hashing:使用的是倒排索引的方法,選擇一個(gè)大小為N的k-v對(duì)集合,從知識(shí)庫中選出潛在的候選記憶,在消除停用詞的情況下保證key對(duì)應(yīng)的單詞在query中出現(xiàn);

          • Key Addressing:階段主要是利用Hashing的結(jié)果(候選記憶)去和query經(jīng)過線性變換后的結(jié)果計(jì)算一個(gè)相關(guān)概率(relevance probability), 與MemNN中 的inner product 類似

          ?

          其中??是query, ??是特征篩選器,??是矩陣, 初始時(shí)

          ?

          • value reading: key被設(shè)計(jì)的和query相關(guān)(圖中藍(lán)色矩陣),value被設(shè)計(jì)的和answer相關(guān)(圖中黃色部分),所以使用Addressing得到的probability和kv中的v進(jìn)行weight sum操作 ?

          表示即根據(jù)query的偏重注意力從中讀取出來知識(shí)源中有價(jià)值的記憶,

          • 記憶會(huì)多跳循環(huán)更新,雖然這部是無監(jiān)督的,但是多跳更新直觀上與推理能對(duì)應(yīng)上??的多跳更新

          ?

          ?的更新

          ?

          最后label與model的輸出點(diǎn)乘后softmax后求loss

          ?

          文中作者還嘗試了很多K-V的表示形式, 感興趣大家可以讀原文;

          3. Mem2seq 記憶網(wǎng)絡(luò)文本生成

          Mem2Seq是一個(gè)使用帶有指針網(wǎng)絡(luò)思想的多跳注意力機(jī)制的生成模型,這種方法有效的結(jié)合了KB的信息且Mem2Seq學(xué)習(xí)如何生成動(dòng)態(tài)的查詢來控制memory的訪問。它與KV-MemNN的區(qū)別在于知識(shí)源的表達(dá)形式以及它是在應(yīng)用在seq的生成中,decoder的每一步都用到了記憶并對(duì)記憶更新。

          Encoder:上圖中a部分是encoder的核心,??表示第k跳記憶,query要經(jīng)過K-hop的更新,類似從歷史對(duì)話中找到這是真正的query是什么,從上面幾種方案中可以看出,這個(gè)也是memNet的常規(guī)操作;

          Decoder:?上圖b部分描述解碼,每一個(gè)時(shí)刻,將產(chǎn)生兩個(gè)分布:詞表分布??和記憶部分分布??記憶部分分布是指對(duì)話歷史以及KB的信息。

          計(jì)算如下:

          上式表明,當(dāng)生成的詞與記憶存儲(chǔ)器中的詞相等時(shí),使用記憶存儲(chǔ)器的詞,即完成復(fù)制功能,當(dāng)生成的詞不在記憶存儲(chǔ)器中時(shí),??指向一個(gè)特殊字符,模型將使用詞表分布??來生成輸出。

          4. GLMP-任務(wù)型對(duì)話中全局到局部的記憶指針網(wǎng)絡(luò)

          GLMP是最接近我們要看的這篇論文的內(nèi)容了,仔細(xì)介紹一下:

          1. 解決的問題是如何有效地在任務(wù)型對(duì)話系統(tǒng)中嵌入知識(shí)庫

          • Mem2Seq的改進(jìn)在于將decoder變成了PointNetwork,將copy以及生成思想和記憶網(wǎng)絡(luò)結(jié)合在一起,有效的實(shí)現(xiàn)了任務(wù)型對(duì)話知識(shí)庫嵌入;

          • 動(dòng)態(tài)的大量的知識(shí)庫的嵌入無疑相當(dāng)于對(duì)模型引入一個(gè)巨量噪聲,而且加大模型計(jì)算等方面的開銷(知識(shí)庫難于編碼以及解碼),為了有效地在任務(wù)型對(duì)話系統(tǒng)中嵌入知識(shí)庫,原文提出了全局到局部的記憶指針網(wǎng)絡(luò)(GLOBAL-TO-LOCAL MEMORY POINTER NETWORKS,GLMP, 全局到局部的記憶指針網(wǎng)絡(luò));

          2. GLMP結(jié)構(gòu)

          【Encoder部分】

          Global Memory Encoder編碼對(duì)話歷史,輸出的兩個(gè)量:全局上下文表示全局記憶指針

          1. 全局上下文表征

          • 編碼上下文?使用了一個(gè)context rnn(其實(shí)就是雙向GRU)來編碼用戶的一句話,得到每一個(gè)時(shí)間步?

          • 編碼記憶?每一hop的可訓(xùn)練嵌入矩陣與Mem2Seq相似?

          • 上下文與記憶的鏈接?為了克服MN的弊端--建模記憶之間相關(guān)性比較困難,因此將得到的隱狀態(tài)加到dialogue memory representation中,即

          encoder端的輸入為:??, 其中??表示的是上文提到的三元組;(B是歷史對(duì)話信息,X是三元組,m對(duì)話也轉(zhuǎn)成3元 組信息, 統(tǒng)一表達(dá)形式,n+l 外部三元組和歷史對(duì)話拼接起來的字?jǐn)?shù))

          終于得到了全局上下文的表達(dá)為:

          全局上下文表征??的是??(??雙向GRU最后隱狀態(tài))經(jīng)過K-hop迭代產(chǎn)生的)

          2.?全局記憶指針(Global Memory Pointer)

          全局記憶指針用來過濾其余知識(shí)庫的噪聲

          • 首先使用編碼器的最后一個(gè)隱層狀態(tài)??查詢外部知識(shí)直到最后一跳(只是最后一條計(jì)算吧),做內(nèi)積相似度計(jì)算,執(zhí)行Sigmoid函數(shù)(0-1的值),最后獲得的memory分布即為全局內(nèi)存指針G,最終它被傳遞給解碼器使用。

          • 訓(xùn)練全局記憶指針的生成需要添加額外的輔助任務(wù),使用標(biāo)簽為??來檢查??中的 Object詞是否在對(duì)應(yīng)的真實(shí)響應(yīng)??中出現(xiàn),如果出現(xiàn)則為1,沒有為0。

          最終交叉熵loss為:

          因?yàn)镾igmoid是一個(gè)二分類的函數(shù),非真即假,添加額外的輔助任務(wù)訓(xùn)練全局記憶指針就是為了過濾知識(shí)庫,保留有用的知識(shí)傳遞給decoder來實(shí)例化slot, 那就得到了一個(gè)全局記憶的指針;



          decoder部分

          • decoder使用了粗略空槽的RNN(sketch rnn),先用一個(gè)占位符占著, 然后利用全局記憶指針過濾掉的外部知識(shí)庫來尋找槽位具體相關(guān)信息 ,最后使用局部記憶指針(local memory point)來實(shí)例化未填充的slot值,這個(gè)slot的值可能是知識(shí)庫中的信息或者生成的內(nèi)容。

            • 首先有產(chǎn)生一個(gè)粗糙(sketch)帶有未填充slot值(但是有slot標(biāo)簽)的響應(yīng) , sketch RNN 是一個(gè)單層的GRU,但是它的生成單詞表中有Sketch Tag,例如 會(huì)產(chǎn)生“@poi is @distance away”來替代“Starbucks is 1 mile away.”

            • 在每一個(gè)時(shí)間步,sketch RNN 的隱狀態(tài)有兩個(gè)作用:


          1. 如果判斷結(jié)果是生成而非copy, 那h的作用預(yù)測(生成)下一個(gè)詞(就是decoder的用法),使用??(t時(shí)間步d維的隱狀態(tài))的計(jì)算公式為生成下一個(gè)詞可以表示為:

          ?

          loss表示為

          2. 作為外部知識(shí)庫的查詢向量,當(dāng)生成的結(jié)果是Tag時(shí),之前編碼的全局記憶指針就會(huì)遞給外部知識(shí)庫,來確定這個(gè)tag填什么,起到過濾外部知識(shí)庫作用;

            • ?作為查詢向量來與過濾后的外部知識(shí)庫做PointNetwork,產(chǎn)生的分布就是局部記憶指針(Local memory pointer,L)

            • 計(jì)算如下(copy point 原理部分,有生成目標(biāo)就生成,沒有就copy):

          用幾句話描述GLMP

          1. 引入了知識(shí)庫和記憶網(wǎng)絡(luò)結(jié)合

          2. decoder引入了pointer Net

          3. encoder 編碼記憶網(wǎng)絡(luò)和上下文(包括知識(shí)庫實(shí)體)并生成全局的關(guān)注點(diǎn)指針(用于過濾噪聲),decoder部分借鑒pointerNet, 用隱狀態(tài)生成局部指針來確定copy時(shí)指向那個(gè)實(shí)體

          DFU:多領(lǐng)域端到端任務(wù)導(dǎo)向的動(dòng)態(tài)融合對(duì)話網(wǎng)絡(luò)

          終于到了這篇Dynamic Fusion Network for Multi-Domain End-to-end Task-Oriented Dialog 主角了,其實(shí)有了GLMP的前序知識(shí),這篇看起來就簡單多了。

          相對(duì)GLMP這篇文章要解決的主要問題是:在任務(wù)型對(duì)話中如何快速在不同領(lǐng)域遷移學(xué)習(xí)。任務(wù)型對(duì)話是領(lǐng)域強(qiáng)相關(guān)的,不同領(lǐng)域數(shù)據(jù)和模型相差巨大,作者設(shè)計(jì)了一個(gè)基于GLMP的架構(gòu)DF-Net,既能自動(dòng)學(xué)習(xí)到不同領(lǐng)域的相關(guān)性又能學(xué)到各個(gè)域特有的知識(shí)。

          • 加強(qiáng)版的encoder和decoder模塊

          • 在GLMP的基礎(chǔ)上,encoder和decoder 將混合域隱節(jié)點(diǎn)特有域隱節(jié)點(diǎn)的拼接后融合成??,其中??指shared, ??指 domain-specific

          ?

          具體加強(qiáng)方式

          • 動(dòng)態(tài)融合

            • 作者認(rèn)為加強(qiáng)版的encoder和decoder即使融合進(jìn)了不同的域的信息,但是忽略了不同域的細(xì)粒度相關(guān)性。因此設(shè)計(jì)動(dòng)態(tài)融合的架構(gòu)是:

            • 各個(gè)域數(shù)據(jù)首先各自先GLMP,從而獲得所有域中各自域的特定特征

            • 私有特征都由動(dòng)態(tài)domain-specific特征融合模塊進(jìn)行融合, 作者借鑒了Mixture-of-Experts mechanism (MoE) 混合專家機(jī)制,可以看出預(yù)測屬于某私域的概率分布,實(shí)質(zhì)上看起來就是一個(gè)加了一個(gè)輔助任務(wù)來計(jì)算每個(gè)域的attention

          ???

          • 共享特征由動(dòng)態(tài)shared特征融合模塊融合 共享特征的融合就是指將原始encoder和decoder替換為加強(qiáng)版


          • 對(duì)抗學(xué)習(xí)

            • 作者最后為了更好的訓(xùn)練對(duì)模型做了一些調(diào)整,引入了對(duì)抗學(xué)習(xí)來更好的學(xué)習(xí)域之間共有的特征

            • 引入了梯度反轉(zhuǎn)層

            • 最后的loss為??,看過GLMP我們也知道??也是多個(gè)混合loss組成,??是在混合loss的基礎(chǔ)上再混合,真是一個(gè)各種混合的任務(wù),但是,實(shí)驗(yàn)結(jié)果非常強(qiáng),在少量數(shù)據(jù)下,模型的trans能力比之前最好的高了十幾個(gè)點(diǎn)



          往期精彩回顧





          獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:

          https://t.zsxq.com/y7uvZF6

          本站qq群704220115。

          加入微信群請掃碼:




          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品黄色在线观看 | 亚洲欧美成人网 | 97青娱乐在线观看视频网站 | 婷婷五月天伊人 | 国产美女裸无遮挡裸体免费观软件 |