# 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
* 
* 為避免 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
* 
* 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 的真實數據(因為寫法比較特殊)
* 以下實驗顯示,標題甚至可以來自與訓練文檔無關的另一組文檔
* 
* 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
* 為了知道模型能否用於長文本輸入/出
* 在不成對訓練中,為防止模型將輸入的文章直接與其對應的摘要匹配
* 我們將訓練配對分為兩組,一組僅提供文章,另一組僅提供摘要
* 
* 因為跟 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
* 由成對的標題和新聞組成的長文本摘要數據集
* 新聞由幾個句子組成
* 
* (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`