在 Transformers 中使用對(duì)比搜索生成可媲美人類水平的文本

1. 引言
自然語(yǔ)言生成 (即文本生成) 是自然語(yǔ)言處理 (NLP) 的核心任務(wù)之一。本文將介紹神經(jīng)網(wǎng)絡(luò)文本生成領(lǐng)域當(dāng)前最先進(jìn)的解碼方法?對(duì)比搜索 (Contrastive Search)。提出該方法的論文?“A Contrastive Framework for Neural Text Generation”?最初發(fā)表于 NeurIPS 2022 ([論文]、[官方實(shí)現(xiàn)])。此后,?“Contrastive Search Is What You Need For Neural Text Generation”?的作者又進(jìn)一步證明了對(duì)比搜索可以用?現(xiàn)有的?語(yǔ)言模型在?16?種語(yǔ)言上生成可媲美人類水平的文本 ([論文]、[官方實(shí)現(xiàn)])。
[備注]?對(duì)于不熟悉文本生成的用戶,請(qǐng)參閱 此博文 了解更多詳情。
2. Hugging Face ?? 對(duì)比搜索演示
目前,???transformers
?的 PyTorch 和 TensorFlow 后端均支持對(duì)比搜索。你可以在 該 Colab notebook 中根據(jù)不同的后端選擇相應(yīng)的部分來探索該方法,文章頂部也有該 notebook 鏈接。我們還構(gòu)建了這個(gè)不錯(cuò)的 演示應(yīng)用,用它可以直觀地比較對(duì)比搜索與其他流行的解碼方法 (例如波束搜索、top-k 采樣 [3] 以及核采樣 [4])。
3. 環(huán)境安裝
在進(jìn)行后續(xù)實(shí)驗(yàn)前,我們要先安裝最新的?transformers
?庫(kù),如下:
4. 現(xiàn)有解碼方法存在的問題
解碼方法可以分為兩類: (i) 確定性方法,(ii) 隨機(jī)方法。下面我們分別對(duì)兩者進(jìn)行討論!
4.1. 確定性方法
確定性方法,如貪心搜索和波束搜索,通過在語(yǔ)言模型輸出的所有候選補(bǔ)全詞中選擇概率最高的詞來生成最終文本。然而,正如之前研究 [3][4] 指出的,確定性方法通常會(huì)導(dǎo)致 _模型退化_,即生成的文本不自然且包含不必要的重復(fù)。
下面,我們看一個(gè)用 GPT-2 模型和貪心搜索生成文本的例子。
模型輸出:Output:
[備注]?我們可以看到,貪心搜索生成的結(jié)果中有明顯的重復(fù)。
4.2. 隨機(jī)方法
為了解決確定性方法帶來的問題,隨機(jī)方法通過在解碼過程中引入隨機(jī)性來生成文本。常用的兩種隨機(jī)方法是 (i) top-k 采樣 [3] 和 (ii) 核采樣 (也稱為 top-p 采樣) [4]。
下面,我們給出用 GPT-2 模型和核采樣 (p=0.95) 生成文本的示例。
模型輸出:Output:
[備注]?雖然核采樣可以生成沒有重復(fù)的文本,但生成文本的語(yǔ)義一致性并不是很好。例如,生成的短語(yǔ)?‘AI is not journalism’?與給定的上文即?‘DeepMind Company’?不一致。
我們注意到,這種語(yǔ)義不一致的問題可以通過降低溫度 (temperature) 來部分解決。然而,降低溫度會(huì)使核采樣更接近貪心搜索,這其實(shí)就變成了貪心搜索和核采樣之間的權(quán)衡。一般來講,要找到一個(gè)既能避免貪心搜索又能避免核采樣陷阱的快捷且與模型無(wú)關(guān)的溫度相當(dāng)有挑戰(zhàn)。
5. 對(duì)比搜索
本節(jié)我們來詳細(xì)介紹一種新的解碼方法, _?對(duì)比搜索_。
5.1. 解碼目標(biāo)
給定前綴文本?,我們按如下公式選擇輸出詞元?:

上式中,??是語(yǔ)言模型輸出概率分布??中 k 個(gè)概率最大的候選詞元的集合。第一項(xiàng),即 _模型置信度 (model confidence)_,是語(yǔ)言模型預(yù)測(cè)的每個(gè)候選詞元??的概率。第二項(xiàng), _退化懲罰 (degeneration penalty)_,用于度量??與上文??中每個(gè)詞元的相異度,其中函數(shù)??用于計(jì)算每?jī)蓚€(gè)詞元間的余弦相似度。更具體地說,退化懲罰被定義為??的向量表征??與其上文??中每個(gè)詞元的向量表征間余弦相似度的最大值。這里,候選詞元的向量表征??是在給定??和 ??的條件下將二者連接起來輸入給語(yǔ)言模型,然后由語(yǔ)言模型計(jì)算出來的。直觀上,如果??的退化懲罰較大意味著它與上文更相似 (在表示空間中),因此更有可能導(dǎo)致模型退化問題。超參數(shù)??用于在這兩項(xiàng)中折衷。當(dāng)??時(shí),對(duì)比搜索退化為純貪心搜索。
[備注]?在生成輸出時(shí),對(duì)比搜索同時(shí)考慮 (i) 語(yǔ)言模型預(yù)測(cè)的概率,以保持生成文本和前綴文本之間的語(yǔ)義連貫性; (ii) 與上文的相似性以避免模型退化。
5.2. 使用對(duì)比搜索生成文本
下面,我們使用與 ?第 4.1 節(jié) ?和 ?第 4.2 節(jié) ?中相同的前綴文本 (即?“DeepMind Company is”?),并使用對(duì)比搜索生成文本 (取 k=4、)。為了充分展示對(duì)比搜索的卓越能力,我們讓語(yǔ)言模型生成一個(gè)?512?詞元的?長(zhǎng)文檔,如下:
參數(shù)設(shè)置如下:
--top_k
: 對(duì)比搜索中的超參?。--penalty_alpha
: 對(duì)比搜索中的超參?。
模型輸出:Output:
[備注]?我們看到生成的文本質(zhì)量非常高。整個(gè)文檔語(yǔ)法流暢,語(yǔ)義連貫。同時(shí),生成的文本也很好地保持了事實(shí)的正確性。例如,在第一段中,它正確闡述了?“AlphaGo”?作為?“第一個(gè)擊敗職業(yè)圍棋選手的程序”?這一事實(shí)。
5.3. 對(duì)比搜索的結(jié)果可視化
為了更好地理解對(duì)比搜索的工作原理,我們對(duì)貪心搜索 ( 第 4.1 節(jié) ) 和對(duì)比搜索進(jìn)行了直觀比較。具體來說,我們分別將貪心搜索和對(duì)比搜索生成的詞元相似度矩陣可視化。兩個(gè)詞元之間的相似性被定義為它們的向量表征 (即最后一個(gè)轉(zhuǎn)換器層的隱藏狀態(tài)) 之間的余弦相似性。貪心搜索 (上) 和對(duì)比搜索 (下) 的結(jié)果如下圖所示。


[備注]?從貪心搜索的結(jié)果中,我們看到非對(duì)角線的相似度很高,這清楚地表明貪心搜索產(chǎn)生了重復(fù)。相反,在對(duì)比搜索的結(jié)果中,高相似度分?jǐn)?shù)主要出現(xiàn)在對(duì)角線上,這證明我們成功解決了退化問題。對(duì)比搜索的這一優(yōu)良特性是通過在解碼過程中引入退化懲罰 (參見 ?第 5.1 節(jié) ) 來實(shí)現(xiàn)的。
6. 更多的生成示例
在本節(jié)中,我們提供了更多的生成示例來比較不同的解碼方法。
6.1. 示例一: GPT-2
在這部分中,我們使用 GPT-2 生成文本,其前綴文本來自 OpenAI 發(fā)布 GPT-2 的博客文章。
In a shocking finding, scientist discovered a herd of unicorns living in a remote, previously unexplored valley, in the Andes Mountains. Even more surprising to the researchers was the fact that the unicorns spoke perfect English.
加載語(yǔ)言模型并準(zhǔn)備前綴文本:
6.1.1. 使用貪心搜索生成文本
代碼:
模型輸出:Output:
6.1.2. 使用核采樣生成文本
代碼:
模型輸出:
6.1.3. 使用對(duì)比搜索生成文本
代碼:
模型輸出:
6.2. 示例二: OPT
本節(jié)中,我們使用 Meta 最近發(fā)布的 OPT 模型 [5],并從著名的 ResNet 論文 [6] 摘要中選取前兩個(gè)句子來作為前綴文本。
Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used previously.
加載語(yǔ)言模型并準(zhǔn)備前綴文本:
6.2.1. 使用貪心搜索生成文本
代碼:
模型輸出:
6.2.2. 使用核采樣生成文本
代碼:
模型輸出:
6.2.3. 使用對(duì)比搜索生成文本
代碼:
模型輸出:Output:
7. 更多資源
有關(guān)對(duì)比搜索的更多詳細(xì)信息,請(qǐng)查看我們的論文和代碼,如下:
A Contrastive Framework for Neural Text Generation: 論文、官方實(shí)現(xiàn)
Contrastive Search Is What You Need For Neural Text Generation: 論文、官方實(shí)現(xiàn)
8. 引用
參考文獻(xiàn)
[1] Su et al., 2022 “A Contrastive Framework for Neural Text Generation”, NeurIPS 2022
[2]?Su and Collier, 2022 “Contrastive Search Is What You Need For Neural Text Generation”, Arxiv 2022
[3] Fan et al., 2018 “Hierarchical Neural Story Generation”, ACL 2018
[4] Holtzman et al., 2020 “The Curious Case of Neural Text Degeneration”, ICLR 2020
[5] Zhang et al., 2022 “OPT: Open Pre-trained Transformer Language Models”, Arxiv 2022
[6] He et al., 2016 “Deep Residual Learning for Image Recognition”, CVPR 2016
- 本文由 Yixuan Su 和 Tian Lan 撰寫
致謝
我們要感謝 Joao Gante (@joaogante)、Patrick von Platen (@patrickvonplaten) 和 Sylvain Gugger (@sgugger),感謝他們?cè)谖覀儗⒈疚闹械膶?duì)比搜索集成進(jìn)?transformers
?庫(kù)的過程中給予的幫助和指導(dǎo)。
英文原文:?https://hf.co/blog/introducing-csearch
原文作者: Tian Lan
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)