一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

深度學(xué)習(xí)知識(shí)庫精品:TensorFlow文本摘要生成

 timtxu 2017-04-07

本文被收錄于深度學(xué)習(xí)知識(shí)庫

相關(guān)背景

維基百科對(duì)自動(dòng)摘要生成的定義是, “使用計(jì)算機(jī)程序?qū)σ欢挝谋具M(jìn)行處理, 生成一段長度被壓縮的摘要, 并且這個(gè)摘要能保留原始文本的大部分重要信息”. 摘要生成算法主要分為抽取型(Extraction-based)和概括型(Abstraction-based)兩類. 傳統(tǒng)的摘要生成系統(tǒng)大部分都是抽取型的, 這類方法從給定的文章中, 抽取關(guān)鍵的句子或者短語, 并重新拼接成一小段摘要, 而不對(duì)原本的內(nèi)容做創(chuàng)造性的修改. 這類抽取型算法工程上已經(jīng)有很多開源的解決辦法了, 例如Github上的項(xiàng)目sumy, pytextrank, textteaser等. 本文重點(diǎn)講概括型摘要生成系統(tǒng)的算法思想和tensorflow實(shí)戰(zhàn), 算法思想源于A Neural Attention Model for Abstractive Sentence Summarization這篇論文. 本文希望幫助讀者詳細(xì)的解析算法的原理, 再結(jié)合github上相關(guān)的開源項(xiàng)目textsum講解工程上的實(shí)際應(yīng)用.本文由PPmoney大數(shù)據(jù)算法團(tuán)隊(duì)撰寫,PPmoney是國內(nèi)領(lǐng)先的互聯(lián)網(wǎng)金融公司,旗下PPmoney理財(cái)總交易額超過700億元。此外,若對(duì)TensorFlow的使用技巧和方法感興趣,歡迎閱讀本團(tuán)隊(duì)負(fù)責(zé)人黃文堅(jiān)所著的《TensorFlow實(shí)戰(zhàn)》。

2 算法原理

下面對(duì)A Neural Attention Model for Abstractive Sentence Summarization這篇文章, 的算法原理進(jìn)行講解. 我們將這個(gè)模型簡稱為NAM. 主要分為模型訓(xùn)練(train)和生成摘要(decode)兩部分講解.

2.1 模型訓(xùn)練(train)

NAM這個(gè)模型是純數(shù)據(jù)驅(qū)動(dòng), 我們喂給它的訓(xùn)練集數(shù)據(jù)是由一系列{正文: 摘要}對(duì)組成. 假設(shè)正文是x=[x1...xM], M是正文詞符的數(shù)量, 對(duì)應(yīng)的摘要為y=[y1...yN], N是摘要單詞的數(shù)量. 對(duì)于給定的數(shù)據(jù), 我們希望給定x生成摘要為y的概率最大, 即maxθlogp(y|x;θ), θ是模型的參數(shù). 但這個(gè)很難求解, 實(shí)際中我們用序列化的方式實(shí)例化這個(gè)目標(biāo), 原來的目標(biāo)函數(shù)變?yōu)?

maxθi=0N?1logp(yi+1|xyc;θ)這里 yi+1是要預(yù)測(cè)的下一個(gè)詞, yc?y[i?C+1...i]是已知的序列, C是已知序列窗口的長度. 后面會(huì)提到, 這個(gè)窗口的位置也是注意力關(guān)注的位置, 在后面的訓(xùn)練過程中會(huì)根據(jù)學(xué)習(xí)到的權(quán)重調(diào)整不同位置注意力的概率大小. 這個(gè)窗口是隨著i的迭代來滑動(dòng)的. 參數(shù)說明: y: 參考摘要所有單詞向量組成的序列 x: 正文的所以單詞向量組成的序列 i: 當(dāng)前評(píng)估函數(shù)所對(duì)應(yīng)的位置 yc: 當(dāng)前訓(xùn)練的窗口對(duì)應(yīng)的局部摘要序列 yi+1: 模型要預(yù)測(cè)的下一個(gè)單詞

下面我們舉一個(gè)例子來說明訓(xùn)練的過程:

打開應(yīng)用保存高清大圖
我們希望根據(jù), 當(dāng)前局部摘要序列yc和全部的正文信息x, 來預(yù)測(cè)下一個(gè)單詞yi+1. 我們希望模型預(yù)測(cè)下一個(gè)單詞為yi+1的概率最大, 并且希望所有單詞都盡可能的預(yù)測(cè)準(zhǔn)確, 在公式上表現(xiàn)為N?1i=0logp(yi+1|xyc;θ)最大. 窗口C會(huì)從摘要的起始位置滑動(dòng)到終止位置, 當(dāng)iC時(shí), yc超出摘要的部分用起始符號(hào)來補(bǔ)全. 我們感興趣的分布p(yi+1|xyc;θ)是基于輸入語句x的條件語言模型. 這里我們直接將原始的分布, 參數(shù)化為一個(gè)神經(jīng)網(wǎng)絡(luò). 這個(gè)神經(jīng)網(wǎng)絡(luò)既包括了一個(gè)神經(jīng)概率語言模型(neural probabilistic language model), 也包括了一個(gè)編碼器(這個(gè)編碼器就是一個(gè)條件摘要模型). 通過包含編碼器并且聯(lián)合訓(xùn)練這兩個(gè)組塊, 我們根據(jù)當(dāng)前yc對(duì)x的不同內(nèi)容投入不同的關(guān)注度, 進(jìn)而的到更好的結(jié)果. 模型結(jié)構(gòu)如下圖所示:
打開應(yīng)用保存高清大圖

  • 模型整體的網(wǎng)絡(luò)結(jié)構(gòu)圖(具有一個(gè)額外的編碼器單元): 右側(cè)分支: 僅根據(jù)當(dāng)前的序列yc預(yù)測(cè)下一個(gè)單詞是yi+1的概率, E是詞嵌入, y? c -> h包括加權(quán)和激活函數(shù)的操作. 左側(cè)分支: 使用ycx生成隱層的下一個(gè)輸出, yc會(huì)對(duì)encoder產(chǎn)生影響, 讓encoder更多的關(guān)注x中與yc有關(guān)的內(nèi)容. 聯(lián)合輸出: 最終結(jié)合右側(cè)的神經(jīng)語言模型和左側(cè)attention-based編碼器的輸出, 求下一個(gè)詞是yi+1的概率.

  • 基于注意力模型的編碼器enc31的網(wǎng)絡(luò)結(jié)構(gòu)圖: 左側(cè)分支: F是詞嵌入矩陣, x? -> xˉ是做了一下平滑處理. 右側(cè)分支: G是詞嵌入矩陣, 根據(jù)當(dāng)前的yc, 對(duì)x? 的不同位置投入不同的注意力, 并形成一個(gè)加權(quán)向量. 聯(lián)合輸出: 此時(shí)p已經(jīng)攜帶了注意力的信息, 用p對(duì)平滑后的xˉ再做加權(quán), 得到encoder的輸出. 下面兩幅圖分別是對(duì)整體結(jié)構(gòu)和編碼器結(jié)構(gòu)的展開:

    打開應(yīng)用保存高清大圖
    打開應(yīng)用保存高清大圖

感興趣的同學(xué)可以結(jié)合原文中的公式理解: 上圖(a)中對(duì)應(yīng)的公式:

p(yi+1|xyc;θ)exp(Vh+Wenc(xyc))yc~=[Eyi?C+1...Eyi]h=tanh(Uyc~)參數(shù)是: θ=(EUVW) E?D×V, 是一個(gè)詞嵌入矩陣; U?(CD)×HV?V×HW?V×H, 是權(quán)重矩陣. 上圖(b)中對(duì)應(yīng)的公式:enc3(xyc)=pTxˉpexp(x? Pyc~)x? =[Fx1...FxM]yc~=[Gyi?C+1...Gyi]?ixˉi=q=i?Qi+Qx? i/Q這里G?D×V是一個(gè)內(nèi)容的嵌入, P?H×(CD)是一個(gè)新的權(quán)重矩陣參數(shù), Q是一個(gè)平滑窗口. Mini-batch訓(xùn)練 這個(gè)模型是純數(shù)據(jù)驅(qū)動(dòng)的, 只要給它{正文: 摘要}訓(xùn)練集就能完成訓(xùn)練. 一旦我們已經(jīng)定義了局部條件模型p(yi+1|xyc;θ), 我們就能估計(jì)參數(shù)來最小化摘要集合的負(fù)對(duì)數(shù)似然函數(shù). 假設(shè)訓(xùn)練集由J個(gè)輸入-摘要對(duì)組成(x(1)y(1))...(x(J)y(J)). 負(fù)對(duì)數(shù)似然函數(shù)作用到摘要的每一個(gè)詞, 即 NLL(θ)=?j=1Jlogp(y(j)|x(j);θ)=?j=1Ji=1N?1logp(y(j)i+1|x(j)yc;θ)我們通過使用mini-batch和隨機(jī)梯度下降最小化NLL.

2.2 Beam Search生成摘要(decode)

我們現(xiàn)在回到生成摘要的問題. 回顧前面, 我們的目標(biāo)是找到:

y?=argmaxyi=0N?1logp(yi+1|xyc;θ)是長度為N的序列y組成的集合, 如果字典中的單詞數(shù)量是V的話, 我們要生成的這個(gè)摘要就有VN種可能性. 因?yàn)槲覀冞@里已經(jīng)做了處理, 只根據(jù)前面的C個(gè)已經(jīng)預(yù)測(cè)出的單詞yc來預(yù)測(cè)下一個(gè)詞yi+1. 這樣算法復(fù)雜度變成了O(NVC). 但是即使是這樣, 這個(gè)算法也太復(fù)雜了. 使用維特比譯碼需要O(NVC).復(fù)雜度獲得精確的解. 然而在實(shí)際中V太大使得問題難解. 一個(gè)替代方法是使用貪婪解來近似獲得argmax, 只保證每次前進(jìn)的一小步是概率最大的. 在精確解和貪婪解方法之間取一個(gè)折中, 就是beam-search束搜索解碼器(Algorithm1), 它在保持全量字典V的同時(shí), 在輸出摘要的每一個(gè)位置上將自己限制在K個(gè)潛在的假設(shè)內(nèi). 這種beam-search方法在神經(jīng)機(jī)器翻譯模型NMT也很常用. Beam search算法展示如下:

打開應(yīng)用保存高清大圖
參數(shù)說明: N: 摘要的長度 K: beam的尺寸 V: 字典里所有單詞的數(shù)量 C: 關(guān)注的詞序列的長度

Beam search案例

下面舉一個(gè)簡單的例子來說明beam search算法的運(yùn)行過程. 在這個(gè)例子里, 摘要長度N=4, beam的大小K=6, 注意力窗口大小C=2, 模型最理想的結(jié)果是‘i am a chinese’. Beamsearch的每一次迭代都從字典V里找K個(gè)最大的可能.

打開應(yīng)用保存高清大圖
Step1: 預(yù)測(cè)前C個(gè)詞的時(shí)候窗口溢出的部分需要進(jìn)行padding操作, 預(yù)測(cè)第1個(gè)詞的時(shí)候我們選出K個(gè)詞符.
打開應(yīng)用保存高清大圖
Step2: 預(yù)測(cè)第2個(gè)詞的時(shí)候, 我們選出新的K個(gè)詞符, 對(duì)應(yīng)K條備選路徑. 前一階段概率低的路徑和詞符, 被拋棄掉.
打開應(yīng)用保存高清大圖
Step3: 重復(fù)前面的過程.
打開應(yīng)用保存高清大圖
Step4: 每次beam search不一定能選出不同的K個(gè)詞, 但是每次beam search都找到最優(yōu)的前K個(gè)路徑, 路徑可以有重疊.
打開應(yīng)用保存高清大圖
Step5: 迭代N次, 最終選出可能性最大的一條詞序列路徑
打開應(yīng)用保存高清大圖
下面是對(duì)Beam Search算法的詳細(xì)分析, 對(duì)原文的Algorithm 1逐條進(jìn)行解釋.

Beam Search算法分析

  1. π[0]是可以用規(guī)定好的起始符號(hào)來初始化. 在訓(xùn)練和生成摘要時(shí), 窗口QC沿著文本滑動(dòng)如果超出范圍, 用起始符號(hào)做padding.
  2. 如果模型是abstraction-based, 輸出y的備選集合是整個(gè)字典, 如果希望摘要的單詞全部從原文中抽取, 那么詞典由輸入正文x的所有單詞構(gòu)成.
  3. 我們會(huì)設(shè)定一個(gè)最大輸出長度N, 算法會(huì)進(jìn)行N輪迭代.
    1. 現(xiàn)已有K個(gè)假設(shè), 每一個(gè)假設(shè)都對(duì)應(yīng)一條路徑; 對(duì)每一個(gè)假設(shè), 我們從字典S(有V個(gè)單詞)中選出K個(gè)單詞作為備選.
    2. 在字典中尋找, 搜索其他單詞, 如果計(jì)算的到的state值比當(dāng)前集合中的任意一個(gè)大, 就把它保留下來.
    3. 當(dāng)每一個(gè)假設(shè)都遍歷完整個(gè)字典S, 就會(huì)產(chǎn)生K×K條路徑, 我們?cè)谶@些路徑中選擇概率最大的K個(gè)路徑作為下一次迭代的基礎(chǔ).(每一條路徑都保留了之前i?1個(gè)節(jié)點(diǎn)對(duì)應(yīng)的單詞)
  4. 當(dāng)N次迭代進(jìn)行完后, 我們只剩下了K條路徑, 最后在從這其中選出1條概率最大的即可.
  5. 路徑所經(jīng)歷的所有節(jié)點(diǎn)即為摘要的單詞. 如果這中間遇到了停止符, 摘要就是從, 如果沒有出現(xiàn), 摘要的最大長度就是N.

Beam Search的運(yùn)算復(fù)雜度從O(NVC)變成了O(KNV), 因?yàn)?span>VNK, 加速效果非常顯著. 束搜索依據(jù)已經(jīng)計(jì)算好的路徑以及當(dāng)前的V個(gè)備選值, 計(jì)算出最優(yōu)的K的值. 最新的K個(gè)最優(yōu)值都保留著相應(yīng)路徑上之前的所有的節(jié)點(diǎn).

3 TensorFlow程序?qū)崙?zhàn)

NAM模型的程序最早是由facebook開源的torch版本的程序. 最近谷歌開源了TensorFlow版本的摘要生成程序textsum, Github上的項(xiàng)目. textsum的核心模型就是基于注意力的seq2seq(sequence-to-sequence)模型, textsum使用了LSTM和深度雙向RNN. Github上的textsum首頁給出了此項(xiàng)目在Bazel環(huán)境下的運(yùn)行方式. 如果你不想通過Bazel運(yùn)行, 你可以直接在seq2seq_attention.py中設(shè)定運(yùn)行參數(shù). 設(shè)定完參數(shù)后, 直接運(yùn)行python seq2seq_attention.py即可. 參數(shù)設(shè)定如下圖所示:

打開應(yīng)用保存高清大圖
除了上述項(xiàng)目運(yùn)行時(shí)所需的必要參數(shù), 模型參數(shù)也在seq2seq_attention.py中設(shè)定, 如下圖所示, 包括學(xué)習(xí)率, 最小學(xué)習(xí)率(學(xué)習(xí)率會(huì)衰減但不會(huì)低于最小學(xué)習(xí)率), batch size, train模式encoder的RNN層數(shù), 輸入正文詞匯數(shù)上限, 輸出摘要詞匯數(shù)上限, 最小長度限制, 隱層節(jié)點(diǎn)數(shù), word embedding維度, 梯度截取比例, 每一個(gè)batch隨機(jī)分類采樣的數(shù)量.
打開應(yīng)用保存高清大圖
git項(xiàng)目textsum給的toy數(shù)據(jù)集太小, vocab也幾乎不可用(一些常見的單詞都沒有覆蓋到). 如果希望獲得好的效果, 需要自己整理可用的數(shù)據(jù)集. 主要文件說明: - seq2seq_attention.py: 主程序, 選擇程序的運(yùn)行模式, 設(shè)定參數(shù), 建立模型, 啟動(dòng)tensorflow - seq2seq_attention_model.py: 建立attention-based seq2seq model, 包括算法的encoder, decoder和attention模塊, 都在Seq2SeqAttentionModel中完成. - seq2seq_attention_decode.py: 讀取數(shù)據(jù), 調(diào)用beam_search解碼 beam_search.py: beam search算法的核心程序

textsum程序解析

Google開源的textsum項(xiàng)目的具體算法是基于Hinton 2014年的Grammar as a Foreign Language這篇論文, 下面給出textsum工程中attention-based seq2seq模型的整體結(jié)構(gòu)圖, 圖中所使用的名字與程序中的變量名一致, Seq2SeqAttentionModel是一個(gè)類, 定義在seq2seq_attention_model.py中; attention_decoder是一個(gè)函數(shù), 定義在/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py中. 為了方便理解, 簡單解釋一下圖中出現(xiàn)的符號(hào),

打開應(yīng)用保存高清大圖
第一個(gè)符號(hào)表示從x1,x2到y(tǒng)的線性變換, 紅色變量是訓(xùn)練過程要學(xué)習(xí)出來的.
打開應(yīng)用保存高清大圖
attention機(jī)制比較復(fù)雜也比較重要, 我們對(duì)這部分細(xì)化一下來看. attention decoder結(jié)構(gòu)圖如下:
打開應(yīng)用保存高清大圖
下圖是對(duì)attention模塊的細(xì)化:
打開應(yīng)用保存高清大圖
符號(hào)說明:
打開應(yīng)用保存高清大圖

為什么attention這個(gè)模塊會(huì)起到效果呢? 因?yàn)閍ttention模塊會(huì)根據(jù)decoder當(dāng)前時(shí)刻的LSTM單元的狀態(tài), 來調(diào)整對(duì)attention_states(encoder輸出)的注意力. Attention_states不同位置獲得的關(guān)注不一樣. 這樣我們就更大程度地, 關(guān)注了原文中, 對(duì)當(dāng)前輸出更為有用的信息, 輸出結(jié)果也就更準(zhǔn)確了. Attention模塊輸出結(jié)果和decoder模塊原本的輸出聯(lián)合起來, 得到最終的輸出結(jié)果.

作者黃文堅(jiān),《TensorFlow實(shí)戰(zhàn)》作者,該書獲得Google TensorFlow工程研發(fā)總監(jiān)Rajat Monga、360首席科學(xué)家顏水成教授、北大長江學(xué)者崔斌教授的推薦,出版后曾獲京東、亞馬遜、當(dāng)當(dāng)計(jì)算機(jī)類圖書銷量第一?,F(xiàn)任職PPmoney大數(shù)據(jù)算法總監(jiān),負(fù)責(zé)集團(tuán)的風(fēng)控、理財(cái)、互聯(lián)網(wǎng)證券等業(yè)務(wù)的數(shù)據(jù)挖掘工作。Google TensorFlow Contributor。本科、研究生畢業(yè)于香港科技大學(xué),在頂級(jí)會(huì)議和期刊SIGMOBILE MobiCom、IEEE Transactions on Image Processing發(fā)表論文,并獲得兩項(xiàng)美國專利和一項(xiàng)中國專利。

知識(shí)庫系列內(nèi)容請(qǐng)?jiān)L問

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲av专区在线观看| 国内精品一区二区欧美| 九九热这里只有免费精品| 日本欧美一区二区三区就| 午夜福利精品视频视频| 欧美人妻少妇精品久久性色| 国产午夜福利一区二区| 欧美一区二区在线日韩| 沐浴偷拍一区二区视频| 大尺度激情福利视频在线观看| 国产精品亚洲欧美一区麻豆| 久久精品a毛片看国产成人| 国产欧美日本在线播放| 免费在线播放不卡视频| 日韩精品福利在线观看| 欧美极品欧美精品欧美| 国产av一区二区三区久久不卡| 日本黄色高清视频久久| 老司机精品视频在线免费看| 色婷婷丁香激情五月天| 国产免费自拍黄片免费看| 人妻久久一区二区三区精品99| 日韩精品一区二区不卡| 一区二区免费视频中文乱码国产| 欧美日韩国内一区二区| 欧美日本道一区二区三区| 在线免费不卡亚洲国产| 日韩免费午夜福利视频| 日本免费熟女一区二区三区| 正在播放国产又粗又长| 欧美人与动牲交a精品| 欧美日韩亚洲国产av| 午夜色午夜视频之日本| 国产精品免费不卡视频| 欧美不雅视频午夜福利| 成人精品一区二区三区综合| 国产精品内射视频免费| 91麻豆精品欧美一区| 国产成人av在线免播放观看av | 精品国产日韩一区三区| 三级高清有码在线观看|