# Learning to Encode Text as Human-Readable Summaries using Generative Adversarial Networks [1810.02851](https://arxiv.org/pdf/1810.02851.pdf) ## Abstract & Introduction * Auto-encoder 把輸入資料壓縮至 latent-space,重新解釋輸入資料,但在latent-space 中的特徵向量人類無法解讀 * 此論文提出用 auto-encoder 把輸入文字轉換成人類可讀的句子,進而實現不成對抽象式摘要的訓練 * auto-encoder 由一個 generator 及 reconstructor 組成 * generator 把輸入文字編碼成短文字序列 * reconstructor 吃 generator 輸出,生成原本的輸入 * 為了讓 generator 的輸出可讀,discriminator 把 generator 輸出限制成偏向人類寫的摘要 * 通過將 generator 輸出作為輸入文本的摘要,可以實現不需將成對文檔摘要對作為訓練資料的抽象摘要 * 中英文的資料集都有好的成果 * 人類可讀的表達式要按照人類的文法且能被人類理解 * 因此,此論文讓 auto-encoder 輸出人類可讀的 latent representation * 人類可讀的 latent vector 這想法以前只能 semi supervise * 用預訓練過的 LM 輸出的 prior distribution 限制 auto-encoder 的輸出為自然語言 * 然而為了教導 compressor network 生成文本摘要,使用 label 過的資料訓練模型 * 但,本論文不需要 labeled data * 如圖,模型由3個部分組成: generator, discriminator 和 reconstructor * generator 與 reconstructor 一起訓練成文本的 auto-encoder * generator 作為原始文本的 encoder,但並非輸出 vector 而是比原始文本短的單詞序列 * reconstructor 則輸出原始的文本 * 因為輸入/出序列長度不同,所以用 RNN auto-encoder * ![](https://i.imgur.com/pJZA7dz.png) * 為避免 generator 生成的東西只有 reconstructor 看得懂 * 沒使前面提到的方法(LM輸出 piror distribution) * 而是用 adversarial auto-encoders, cycle GAN 及 discriminator * discriminator 和 generator 形成 GAN * 由於離散分布不可微分,由 GAN 生成離散分布是種挑戰 * 本論文發展了新的語言生成 GAN ## Related Work ### Abstractive Text Summarization ### GAN for Language Generation * GAN 用於語言生成的挑戰是自然語言的離散性 * 為了生成單詞序列,generator 通常會有不可微分的地方,如 argmax * 先前的論文作者沒有提供離散的單詞序列,而是直接將 generator 輸出層提供給 discriminator,可以成功的原因是用了 Earth mover's distance([EMD](https://en.wikipedia.org/wiki/Earth_mover%27s_distance)) * 計算2機率分布的相似性(從一個分布轉換到另一個的成本) * SeqGAN 用 reinforcement learning 解決序列生成的問題 * 本論文提出 self-critical adversarial REINFORCE 作為評估每個 time step 預期 reward 的另一種方法 * discriminator 指測量輸出序列的品質,因此 reward 很鬆散 * 分配給所有生成步驟的獎勵都相同 * 實驗中比較了 WGAN 跟此方法的效能 ## Proposed Method * ![](https://i.imgur.com/I632ekk.png) * generator $G$, discriminator $D$, and reconstructor $R$ * G and R are [seq2seq hybrid pointer-generator networks](https://medium.com/nlp-tsupei/pointer-generator-network-5a5a3a2bce3) * R 可以決定要從 G 輸出複製文字或是從字典生成 * 都輸入文字序列,輸出文字序列分布 * D 輸入序列,輸出純量 * 從資料集中挑選文件 $x$ 和人工撰寫摘要 $y^{real}$ 訓練; $x = \{x_1, x_2, ..., x_t, ..., x_T\}$,$x_t$ 表示一個字 * 把 $x$ 輸入給 G,$G(x) = \{y_1, y_2, ..., y_n, ..., y_N\}$,$y_n$ 表字典中字的機率分布 * 接著從 $y_n$ 隨機取樣 $y_n^s$,透過 $G(x)$ 得到序列 $y^s$ * 把 $y^s$ 丟進 $R$ 得到另一個序列分布 $\hat x$,嘗試生成原來的 $x$ * reconstructor $R$ 的 loss function: * $R_{loss} = \sum\limits_{k=1}^K l_s (x, \hat x)$ * $l_s$: cross entropy($x$, $\hat x$) 或 negative conditional log-likelihood ($x$, $y^s$) * (why $y^s$, 這不是G生成的嗎?怎麼會是$R_{loss}$參考對象) * $K$: 訓練文章數 * 下標 s 表示 $\hat x$ 從 $y^s$ 生成 * reconstructor 輸出 $\hat x$ 因為 teacher forcing 被原始 $x$ 限制 * R 不會直接拿 G(x) 輸出的分布當輸入(不這樣做會很難取樣出可讀的句子,只會得到有輸入資訊的機率分布) * 而是拿取樣過的 $y^s$ 當輸入 * 由於 $y_s$ 為離散序列(不可微),因此採用新的方法計算(第4章) * discriminator $D$ 學習把 $y^{real}$ 分數評高把 $y^s$ 分數評低 * $D_{loss}$ 會在第5章 * G 學習最小化 $R_{loss}$,最大化 $D_{loss}$ 讓 discriminator 分不出真假 * $G_{loss} = α R_{loss} − D'_{loss}$ * $α$: 超參數 * 上圖有2種對抗式訓練的方法,有2個 discriminator * discriminator 1 把 $G(x)$ 當輸入 (第5.1章) * discriminator 2 把 $y^s$ 當輸入 (第5.2章) ## Minimizing Reconstruction Loss * 因離散序列不可微,所以提出 REINFORCE algorithm * generator 為 agent 且 reward 為 $-l_s(x, \hat x)$ * 最大化 reward 的同時就是在最小化 $R_{loss}$ * 每次取樣導致 $R_{loss}$ 變化很大, reward 也很不穩定 * 利用 [self-critical sequence training](https://zhuanlan.zhihu.com/p/58832418) * 加一個 baseline 讓他們差距小一點 * 修改後要給 generator 的 reward: $r^R(x, \hat x) = -l_s(x, \hat x) - (l_a(x, \hat x) -b)$ * 後面括弧減掉的屬於 baseline * $l_a$ 同為 cross-entropy,但 $\hat x$ 由 $y^a$ 生成 * $y^a$ 由 $y_n$ 用 argmax 生成 * 訓練初期 $y^a$ 產生的 reward 較高,引入另一個 baseline $b$ * 稍微把 $l_a$ 減掉一個值讓 reward 大一點 * b 會漸漸變為 0 * generator 用 reward 為 $r^R(x, \hat x)$ 的 REINFORCE algorithm 更新參數並最小化 $R_{loss}$ ## GAN Training ### Method 1: Wasserstein GAN * discriminator 1 是一個 deep CNN with residual blocks * 輸入文字分布序列;輸出分數 * $D_{loss} = \frac{1}{K} \sum\limits_{k=1}^K D_1(G(x^{(k)})) - \frac{1}{K} \sum\limits_{k=1}^K D_1(y^{real(k)}) + \beta_1 \frac{1}{K} \sum\limits_{k=1}^K (\Delta_{y^{i(k)}} D_1(y^{i(k)}) - 1)^2$ * G(x) 跟 y real 的分數差距 * $K$: 訓練樣本數 * $k$: 第 k 個訓練樣本 * 最後一項是 [gradient penalty](https://zhuanlan.zhihu.com/p/52799555) * 相較原始 WGAN 能夠穩定的訓練 * 把 $G(x)$ 和 $y_{real}$ 做插值,並將 gradient penalty 用在差值序列 $y^i$ 上 * $\beta_1$ 決定 gradient penalty 的大小 * 前面 $G_{loss}$ 中的 $D'_{loss} = \frac{1}{K} \sum\limits_{k=1}^K D_1(G(x^{(k)}))$ ### Method 2: Self-Critic Adversarial REINFORCE * 核心概念: 用 LSTM discriminator 衡量每個時間點生成的 $y^s_i$ 的品質 * generator 就會知道跟上一個時間點相比,生成句子的改善或惡化 * 可以很容易在較常序列中找到有問題的生成步驟,從而輕鬆地解決問題 #### Discriminator 2 * 單向 LSTM ,輸入生成的 $y^s_i$ 根據序列 $\{y_1, y_2, ..., y_i \}$ 評分 * 分數可視為當前序列的品質 * 為了計算 $D_{loss}$ ,分數相加生成 * $D_2(y^s) = \frac{1}{N} \sum\limits_{n=1}^N s_n$ * N: 生成序列長度 * $D_{loss} = \frac{1}{K} \sum\limits_{k=1}^K D_2(y^{s(k)})) - \frac{1}{K} \sum\limits_{k=1}^K D_2(y^{real(k)}) + \beta_2 \frac{1}{K} \sum\limits_{k=1}^K (\Delta_{y^{i(k)}} D_2(y^{i(k)}) - 1)^2$ * 越早判別出真假,loss 就越低 #### Self-Critical Generator * 因為是丟離散序列 $y^s$ 給 discriminator ,所以梯度不能 back propagate 到 generator * 因此採用 policy gradient method * 用前一個時間點的分數 $s_{i-1}$ 當 baseline * generator 的 reward $r^D_i$ 評估當下與前次生成的序列的比較(改善或變差) * $r^D_i = \begin{cases} s_i & \quad \text{if } i = 1 \\ s_i - s_{i-1} & \quad \text{otherwise} \end{cases}$ * 然而有時先前會分數較低接著變高,反之亦然;因此根據 discount factor $\gamma$ 計算每個時間點的 discounted expected reward * $d_i = \sum\limits_{j=i}^N \gamma^{j-i} r^D_j$ * (應該是讓以前的生成分數影響不要那麼大) * 用 likelihood ratio trick 最小化 $G'_{loss}$ 並最大化 discounted expected reward ## Experiment * 在 English/Chinese Gigaword, CNN/Daily Mail dataset 上評估 * 測試時用 beam search (size=5) 生成句子並消除重複 * 附錄(A,B)有詳細的實作跟資料的再處理 * 有先個別預訓練 * generator 先做非監督的預訓練,讓其掌握原始文本的語意(附錄C) * discriminator 跟 reconstructor 分別根據上面以預訓練的 generator 的輸出作預訓練,確保能給期待的回饋 ### English Gigaword * 含每篇文章的第一句及其相應的標題 * 預處理語料庫包含成對的訓練/驗證資料(3.8M/400K) * 在3.8M訓練集上的部分或全部訓練模型 * 將文章標題中的句子用作 discriminator 的真實數據(因為寫法比較特殊) * 以下實驗顯示,標題甚至可以來自與訓練文檔無關的另一組文檔 * ![](https://i.imgur.com/EqHG0JP.png) * part (A) 沒打算弄成最好,是為了著重在非監督學習,且希望提出的方法可以用在所有模型上 * part \(C\) 我們直接將 Gigaword 摘要中的句子用作 discriminator 的訓練資料 * 到底 unpair 在哪 = = * 提出的方法都有所改進 (C-1, C-2) ### Semi-Supervised Learning * 先用 unlabel data 更新 generator 數次後,用 label data 進行 teacher forcing * 對於標記的 10K, 500K, 1M ladel data 用 teacher-forcing 訓練更新 25, 5, 3 次 * 在 teacher forcing 中,給原始文本作為輸入, generator 被限制預測人為書寫的原始文本摘要 * 可以看作是不成對訓練的正規化,可以防止 generator 產生不合理的原始文本摘要 * 用太多會 overfit * 僅使用1M標記的資料,使用 adversarial REINFORCE 甚至在表1(A-1)中對全部3.8M標記的資料進行監督訓練 ### Transfer Learning * 目前為止,進行的實驗要求標題與文檔不成對,但要在同一領域訓練 discriminator * 從 English Gigaword 生成摘要(target domain);用 CNN/Daily Mail 訓練 discriminator (source domain) * (E-1) 是經過預訓練的 generator 結果,不良的預訓練結果代表兩個數據集的數據分佈完全不同 * 由於 domain 之間的單詞分佈不匹配,因此使用另一個數據集的句子在目標測試集上產生的 ROUGE 分數較低 (E 對 C) * discriminator 仍對生成的單詞序列進行限制 * 經過不成對的訓練後,該模型提高了預訓練模型的ROUGE得分 (E-2), (E-3) 對 (E-1),並且在 (B) 部分中也超過了 baseline ### CNN/Daily Mail dataset * 為了知道模型能否用於長文本輸入/出 * 在不成對訓練中,為防止模型將輸入的文章直接與其對應的摘要匹配 * 我們將訓練配對分為兩組,一組僅提供文章,另一組僅提供摘要 * ![](https://i.imgur.com/ZEMib9K.png) * 因為跟 See 的模型相比較小、字典較小,所以有性能上的差異 * 記者經常將最重要的信息放在前幾句話中,因此,即使是最佳的抽象摘要模型,在 ROUGE 得分上也略輸 Lead-3 基準 * 但是,在進行預訓練或訓練期間,我們並未假設最重要的句子位於前幾個句子中 * 沒成對訓練的模型產生了不錯的 ROUGE-1 得分,但產生了較低的 ROUGE-2 和 ROUGE-L 得分 * 可能是因為我們生成的序列長度比 ground truth 短,並且我們的字典很小 * 另一個原因是 generator 擅長從文章中選擇最重要的詞,但有時卻無法將它們組合成合理的句子,因為GAN仍然很難生成長序列 * 由於 reconstructor 僅評估整個序列的重建損失,所以隨著生成的序列變長,對 generator 的重建獎勵變得極為稀疏 * 但是,與經過預訓練的生成器(C-2,C-3 對 C-1)相比,我們的模型仍然提高了 ROUGE 得分 * 生成的摘要實例可以在附錄D圖11中找到 ### GAN Training * 2種 GAN 在不同資料集上有不同優點 * WGAN 收斂得比較快 * 因為直接評估 generator 的連續分佈與真實資料的離散分佈間的距離 * 在訓練的早期就對分佈進行了銳化 * 但也會讓 generator 收斂在比較差的地方 * 另一方面,在使用 REINFORCE 進行訓練時, generator 會繼續尋找可以更好欺騙 discriminator 的網絡參數 * 我們認為,使用這種方法對 GAN 進行語言生成方面的培訓值得探討 ### Chinese Gigaword * 由成對的標題和新聞組成的長文本摘要數據集 * 新聞由幾個句子組成 * ![](https://i.imgur.com/E08LTSV.png) * (A) 列出了使用1.1M個成對文檔摘要直接訓練 generator 的結果 (upper bound) * (B) 僅將文檔中的前15個單詞作為其摘要 * (C\) 非成對訓練, discriminator 將訓練集中的摘要作為真實數據 * 在未配對和受監督的方法之間存在性能差異 (C-2), (C-3) vs (A) * 但所提出的方法仍比普通基準 (C-2), (C-3) vs (B) ## Conclusion and Future Work * 使用GAN建構模型將文本編碼為人類可理解的摘要 * 無需成對文檔摘要即可學習 * 希望使用額外的 discrminator 來控制所生成摘要的樣式和情感 ###### tags: `Paper`