整理 | 陳彩嫻
10月22日,在2020年中國計算機大會(CNCC)上,中國人民大學長聘副教授宋睿華、北京大學教授萬小軍與清華大學長聘副教授黃民烈圍繞 「自然語言生成」 的主題進行了演講。
儘管深度神經語言模型讓生成一段通順的自然語言越來越容易,但人類的創作能力卻不止於此。在此次演講中,宋睿華副教授從創作的獨特性出發,探討了人工智慧是否可以像人類創作者一樣寫出新穎的比喻,或編排出有戲劇衝突的臺詞。
萬小軍則認為,能夠生成多樣化的文本是很多文本生成應用的重要需求之一。儘管基於深度學習的自然語言生成取得了令人興奮的進步,但目前自然語言生成仍然面臨生成文本的多樣性不足等問題。因此,在這次演講中,萬小軍著重探討了多樣化文本生成技術。
黃民烈副教授提出,現有的語言生成模型對知識的表示與利用存在明顯不足。即使是強大的GPT-3,也存在明顯的知識衝突問題,尤其是常識問題。因此,黃民烈介紹了如何將知識融入語言生成模型的研究嘗試,尤其是在解釋生成、歸因自然語言生成與故事結局生成等方面的應用。
以下是演講全文,AI科技評論進行了不改變原意的整理。文章已經經過宋睿華、萬小軍、黃民烈三位老師的修改及確認。
1
宋睿華:人工智慧真的在創作嗎?
人工智慧真的可以創作嗎?這可能是許多人心中的問號。用更學術的語言表達,人工智慧創作又叫作「自然語言生成」。但,生成等於創作嗎?
在這裡,我想將這個問題分成兩個層次進行探討:
層次一:如果語言模型生成了一段詩、一篇文章或一條新聞,我們能將其稱為「創作」嗎?
層次二:一說到自然語言生成,大家很容易想到類似GPT-3的語言模型,即基於深度計算的一些生成模型。此「生成」與彼「生成」的含義相同嗎?是否一定是生成模型才能叫作「生成」?
在這次演講中,我想圍繞「人工智慧創作」的主題,給大家介紹三方面的內容:(1)如何評價人工智慧創作?(2)人工智慧可以創作比喻嗎?(3)人工智慧可以創造劇本嗎?
1、如何評價人工智慧創作?
我們在NLPCC 2019上發表了一篇論文「Evaluating Image-Inspired Poetry Generation」。
上圖是我們為評價由圖像生成詩歌的質量所設計的一個界面。我們在屏幕中間放了一張圖。在寫詩的時候,我們通常以圖片作為視覺輸入,從圖中抓取或擴展一些關鍵字,然後將這些關鍵字梳理成一首詩。在圖片關鍵字已經確定的情況下,我們要如何生成不同的詩歌並比較?
在上圖中,這4首詩由4種算法生成。我們將這4首詩從1分到5分進行打分。比如打3分的標準是文字的順暢,那麼,如果文字有錯或晦澀難懂,則酌情減分;如果有一兩句文字比較驚豔,則酌情加分。
如圖所示,算法從圖片中抽取了「城市」、「美好」以及一些擴展的關鍵字,然後寫成了一首詩。在這個過程中,我們發現:遇到「城市」這個詞時,AI最常用的形容詞是「美好」。如果一位人類作家寫的詩歌裡出現類似的句子,大家可能就會覺得這不是創作,而是「複製、粘貼」,
所以,我們在評價詩歌創作時,一般是從生成的角度去評價詩歌是否通暢連貫、是否有想像力,卻往往忽略了另一個要素:即這首詩歌有沒有創新性?
經過調查,我們發現,人們很早之前便討論過這個問題。他們把「創新性」分成兩個類型:一,與過去的詩集或訓練集相比是否有創新性(Novelty);二,與自己所寫的詩歌相比是否有創新性(Diversity)。
我們提出從Novelty(新穎性)與Diversity(多樣性)兩方面來考量詩歌的創新性:
1)Novelty
Novelty是被廣泛採用的一種標準,主要內容是:與訓練數據作比較。有了訓練集後,我們對照N-gram來查看有多少詞語時曾在以前的訓練集上出現過,又有多少詞語是新的搭配。
2)Diversity
Diversity是自己與自己比。比方說,如果給出的關鍵字是「城市」,你能生成多少不一樣的詞語。
在實驗中,我們發現,這兩個指標與Human Rating(人為評級)的結果很不一樣。藍色線為Human Rating的結果,橘色線為Diversity的結果,綠色線為Novelty的結果。
Novelty、Diversity與Human Rating的相關性居然為負值,這是為什麼呢?原因可能是:在人類眼裡,有些詩寫得很好,但不夠創新,有可能是背誦,而有些詩很新,又可能不通順,所以在Human Rating中得分不高。我們希望能夠找到一個平衡點,同時保證詩歌的通順性和創新性。
我在做小冰寫詩項目時遇到一個問題:用戶可能會反覆上傳一張圖片,只是想看看AI能寫出什麼不一樣的詩歌來。也就是說,生成系統是一個不確定的系統:輸入不變,但輸出的期望是不同的。這時,我們發現:以往模型在做評判時,往往會選擇評價最好(One-Best)的輸出,評價最好往往不能代表系統實際應用的效果。
Average-Random:如果有足夠多的資源,我們可以讓系統隨機生成多首詩,給所有詩歌打分之後再算平均分,相當於多次採樣,效果比較接近實際應用的效果。
One-Random:如果在不同的系統上隨機選擇,One-Random與比較理想的Average-Random之間有超過0.9的相關性。
也就是說,大家在做一個不能確定的系統時,不要去比它的best,取一個random的結果和另外一個random結果比更接近實際效果。
2、人工智慧可以創作比喻嗎?
想到探索人工智慧是否可以創作比喻,是之前有一位實習生跟我說:「老師您知道嗎?在網上有一種說法,不管是什麼話,後面加一個「愛情也是這樣的」,都是成立的。」她給我舉了個例子:「人有兩條腿,愛情也是這樣的。」
我的同事A便說:「你的意思是說:愛情總會走的嗎?」這時候同事B便說:「為什麼不是愛情總會來的呢?」再結合他們的背景,一個有男朋友,一個沒有男朋友,我就覺得這個對話很有趣。
當時我就發現:在做比喻的時候,人無非是找到了一個本體,一個喻體,然後同時找到了一個自圓其說的解釋。這個解釋未必要非常有邏輯,只要有點聯繫、能自圓其說就可以。就像她們的對話中,可以說是「來」,也可以說是「走」。
後來我們發表了一篇論文《"Love Is as Complex as Math": Metaphor Generation System for Social Chatbot》(CLSW 2019 Outstanding Paper Award)。
在用AI創作比喻時,我們並沒有採用生成模型,而是想了一個新的模式。
首先,我們確定本體(「愛情」)和喻體(「中國足球」),然後用一個很普通的Word Embedding(詞嵌入)把它們投在二維平面上。大家可以看到,在愛情旁邊有非常多相關的詞語,如「長久」、「忠貞」、「婚姻」等,而中國足球旁邊也有非常多相關的詞語,比如「開場」之類的詞。但這些詞都不適合用作「愛情」與「中國足球」之間的連接詞,因為它們跟其中一個詞太接近,卻跟另外一個詞特別遠。
最後,我們發現,最管用的是中間這些詞,比如「未來」。我們可以說:「愛情像中國足球一樣沒有未來」。如果能輸出這樣的比喻,那就非常妙。
然後我們就進行了一些嘗試,發現效果還不錯。比如說,在下面這張表裡,愛情可以跟數學相比,兩者都非常複雜;愛情可以跟股票比,都會貶值,等等。
後來我們真的生成了這樣一句比喻:愛情就像葡萄酒一樣,對程式設計師來說都是奢侈品。
除此之外,我們還有很多很好的例子。比如說,愛情就像脂肪,是點點滴滴的積累;孤獨像是空無一人的車站。當然,也有很多不好的例子,比如戀人像是可靠的報表,或者金錢就像垃圾,使人腐敗。
我們發現,在對話中,人們也很喜歡這樣的比喻,並通過兩段式來詢問,比如說:愛情就像脂肪,你知道為什麼嗎?這會引起人們的興趣,經過一個解釋,人們的Follow-Up Rate會比陳述句漲一倍。
3、人工智慧可以創作劇本嗎?
我們今年的一個工作是:人工智慧可以創作劇本。
故事是非常難生成的。但,我們有沒有辦法讓人去寫大的情節,然後讓機器去寫小的臺詞呢?
上圖展示的是我們從《阿甘正傳》中抽取的一段訓練數據。情節是:珍妮不喜歡回家,為了陪珍妮,阿甘也決定晚點回家。
右邊打對號的句子是我們根據這個情節檢索出來的對話:
阿甘:「媽會擔心我的。」
珍妮:「再坐一會!」
阿甘:「好,珍妮,我留下來。」
再比如,我輸入一個情節:我不喜歡你,請你不要再糾纏我。那麼,如果給出第一句「走開」,那麼接著會生成什麼呢?如下圖所示:
生成的結果加了很多戲,大家可以從臺詞裡頭看到一些有意思的東西。
現在,我們回到最初的問題:生成是創作嗎?針對這個問題,我給出三個觀點:
創意性的度量很重要;
新穎的組合(比如比喻句)會給用戶帶來耳目一新的感覺;
最後,我們希望人工智慧不要拘泥於用生成模型,最重要的是給大家帶來新意和樂趣。
2
萬小軍:多樣化文本生成
文本的生成任務有很多類型,可以分為文本縮寫、文本改寫、文本擴寫。
縮寫裡面最典型的是「摘要」,改寫裡面最典型的是「文本複述」,擴寫中最典型的則是數據到文本的生成,例如從一個報表中生成一個文本段落去描述報表中的數據。每一個任務都有很多不同的應用。
下圖所示是一些神經網絡模型,用於文本生成,也是現在大家做研究用的最多的模型。
總體而言,文本生成離不開這幾個模型:序列到序列模型,VAE模型,Transformer模型,以及GAN等。這一系列模型都可以用在任何一個文本生成任務上。我們也可以對這些模型進行改造,做一些調整。這些模型基本上是萬金油。
但是,雖然這些模型在一些指標上已經取得了不錯的結果,但在分析這些模型最終生成的文本時,我們會發現幾個主要的問題:
多樣性(Diversity)差:最後生成的文本有很多類似的。
連貫性(Coherence)差:生成多句子文本時沒有很好的篇章連貫關係。
保真性(Faithfulness)差:最終生成的文本總會出現一些信息錯誤,與所輸入的數據或素材不相符。比如我們輸入的數據中寫的是「張三的年齡為18歲」,但生成的結果可能是「李四的年齡為18歲」。
這些問題阻礙了神經文本生成模型的應用。
當然,我們也有很多方法去研究如何提高多樣性、連貫性與保真性。比如,現在相當多比例的文檔摘要論文都在研究如何提高生成的摘要的保真性。
不同的文本生成任務對多樣性的需求是不一樣的。比如文本複述、對話生成、故事生成、Data2Text,對多樣性的要求就比較高,而機器翻譯、自動文摘、ARM2Text對多樣性的要求就比較低。
下圖顯示了一個從數據到文本生成的例子。我們希望:雖然你輸入了同樣的數據,但可以生成如右邊所示的具有不同表達的簡訊,這樣就可以將兩篇簡訊都發布到網上,讓不同的人看到不同的版本,增加目標受眾。
什麼是文本複述的多樣性?文本複述對多樣性的定義表現為:
定義1:輸出與輸入不相似
例子:梅西獲得了六次金球獎 => 金球獎六次頒給了梅西
定義2:同一輸入的多個輸出不相似
例子:梅西獲得了六次金球獎 => 1)金球獎六次頒給了梅西;2)小跳蚤獲頒六次足壇最高個人獎項
定義3:不同輸入的輸出不相似
例子:梅西獲得了六次金球獎 => 金球獎六次頒給了梅西
C羅獲頒五次金球獎 => C羅獲得了五次足壇最高個人獎項
總而言之,就是把一個句子改寫成另外一個句子,然後保持語義不變。
針對三種不同的定義,評測指標也會不同。比如定義1可能是用Self-BLEU來評價,定義2是用P-BLEU來評價,定義3是用BLEU來評價。
文本複述的多樣性對寫廣告推文非常有幫助:發一個範文過來,寫成1000篇不一樣的推廣文,然後發到網上,這樣受眾範圍也會提高。
在文本複述中,要如何提升文本的多樣性呢?方法主要如下:
Stochastic Decoding:在解碼一個詞時,不是選擇概率最大的那個詞,而是選擇Top K個,或概率之和加起來不超過P的Top詞彙,然後從Top的詞中再隨機選一個詞作為輸出。
如果每次都選概率最大的,會導致多樣性變差。如果你增加一定的隨機性,多樣性可能會提升。
Unlikelihood Training:在訓練過程中,要求要解碼的詞不要與某些已出現過的詞重複,即讓已出現過的詞的解碼概率儘量降低。
CVAE(條件變分自動編碼器):通過採樣符合特定分布的不同向量得到不同的輸出。
Syntax Exemplar-based:給一個句子加上另外一個特定的句式,並要求最後生成的文本滿足特定的句式。通過指定不同的句式能夠生成多樣化的文本。
我們自己的一個方法是基於C-GAN(條件生成式對抗網絡)框架的DivGAN模型。
這個模型包括一個生成器和一個鑑別器。鑑別器是要鑑別生成的文本是不是一個真實的文本;而生成器是根據輸入去做一個編碼,然後從正態分布中採樣z,將z與編碼拼起來,最後做解碼器的輸入。我們希望通過不同的z來獲得不同的最終解碼結果。
但如果只用這個模型的話,我們會發現z對最後生成的結果影響有限。雖然z有變化,但最後生成的結果比較一致,並沒有實現生成文本的多樣性目標。
因此,我們引入了Diversity Loss,使得模型生成結果的變化相對採樣向量的變化更大。也就是說,z的變化能夠引起最終生成結果的變化。
引入Diversity Loss之後,我們的實驗結果如下:
我們知道,所有模型最終都會為每一個輸入去生成三個如上圖所示的結果,這三個結果會算一個Pairwise BLEU,即中間的P-BLEU是最重要的結果。如果P-BLEU比較小,則代表最後生成的三個文本之間的相似性比較低。
比如在Transformer+sampling中,P-BLEU比較低,但BERT Score也比較低。這說明它確實生成了三個不同的結果,但這三個結果與原始文本之間的語義關聯性比較差。所以綜合來看,這個方法雖然簡單,但也不夠好。
而我們的DivGAN方法,既能夠保證最終生成的文本與原始輸入的語義保持一致,又能夠讓它生成的不同結果之間差異性比較大。下圖的人工評價也表明了這一點。
文本多樣性可控的程度是怎樣的呢?比如將一個句子給模型修改,模型最大能修改到什麼程度?有些句子只能修改一點點,而有些句子的改動可能會非常大。每個句子的可修改程度是不一樣的。
此外,我們要控制多樣性的粒度,以及針對不同的複述方法進行多樣性的控制(比如有監督、無監督)。
除了文字的表達多樣性以外,還有內容的多樣性(例如Data2Text) 。
如下圖所示,右邊是兩個人工寫作的結果。我們發現,人在寫的時候並不是把所有的數據都寫進去,而是在其中挑選不同的數據,最後生成一個不同的結果。相當於選擇不同內容,最後再去對不同內容生成不同的文字表達。
最後,總結一下:我認為多樣化文本生成是滿足人類個性化、差異化信息獲取與閱讀需求,以及滿足人類「喜新厭舊」心理需求的關鍵技術手段。
3
黃民烈: 基於預訓練模型的語言生成
大家都知道,現在預訓練模型很火。我想與大家交流的第一個問題是:預訓練模型學到了什麼、沒學到什麼?
BERT模型不是用於語言生成,而是用於編碼與語言理解。有些論文介紹到,現在的預訓練模型能夠較好地編碼一些詞性、實體信息、句子裡詞語之間的修飾關係。
此外,預訓練模型在語言填空上做得也不錯。
但是,在處理否定詞、頻度副詞、句子中存在誤導性token等語言時,預訓練模型的表現就不是很好。比如既說Birds can fly,又說Birds cannot fly。或者加一些誤導性的詞,比如「Talk?」時,模型的回答是「Birds can talk.」但這個回答明顯是不符合事實的。
再看看BERT對數字的處理。BERT對於數字的處理只能基於數字,而非真正地理解語言本身所表達的含義。如下圖所示,每句話的語義是差不多的,只是句式不大一樣。當要求預訓練模型在Mask空上填寫「older」或「younger」時,我們可以看到,第一句話的準確率高達96%,但最後一句話的準確率只有12%。這說明,BERT並沒有真正理解這個句子所表達的意思。
再看看GPT-3的表現。GPT-3在問答(Q&A)與常識知識方面的表現很不錯。
如下圖所示,如果你問一些類似的問題,它能給出很好的答案。如下圖右邊的標綠文字所示,當詢問「為什麼動物不是擁有三條腿」時,它能回答出來:「因為如果是三條腿的話它們會摔倒。」而藍色部分的問題,其實比較少人討論誰比誰重,而關於這類問題,GPT-3的答案準確率能達到80%左右。
GPT-3會做一些常識推理的任務,但還會「胡扯」。如下圖所示,當詢問GPT-3說長頸鹿有幾隻眼睛時,它會回答「兩隻眼睛」。但問腳、蜘蛛、太陽等有幾隻眼睛時,它還是「一本正經」地回答,答案不對,但還蠻有意思的。然後右邊的答案也都是不對的,因為美國直到1776年才成立,在此之前並沒有美國這個概念。此外,GPT-3關於未來的預測,也頂多是預測,不能確定對錯。所以容易看到,GPT-3其實不知道什麼該說不知道。
至於語言生成,下圖左邊是論文「The Curious Case of Neural Text Degeneration」裡面的結果,右邊是我們論文裡的結果,即用GPT-2生成故事。
故事生成涉及到常識,即給定第一句話,希望去生成後面的內容。你會發現,如果用預訓練的GPT-2,就相當於是zero shot,不在數據上微調的話,會生成很多重複的內容,同時邏輯也不是很對。而如果在任務數據上做一些微調,結果依然會重複。我們把這個叫作「重複的陷阱」。
現在大家都在討論AI的bias(偏見)、fairness(公平)與security(安全)。如下圖所示,GPT3所生成的結果中,也會包括種族歧視、性別歧視等內容。
如果要讓一個GPT的模型或一個BERT模型生成更好的話,我們要怎麼做呢?
有幾種可能的途徑:
途徑一:想辦法讓模型擁有更多的知識。比如在預訓練模型上,我們可以更大概率去Mask實體而不是一般詞,再讓模型預測出來。
途徑二:在做預訓練任務時,想辦法讓實體align(對齊)到知識庫上。然後將BERT的表示與知識庫實體的表示對齊,讓它們互相預測。比如劉知遠老師團隊的工作基本上就是這個思路:一方面是增加實體的Mask的概率,另一方面則是實現實體和文字的描述對齊,然後用這種對齊信息去做預測。
途徑三:設計領域相關的預訓練任務。我們今年發表在EMNLP的一個工作:「Sentiment-Aware Language Representation Learning with Linguistic Knowledge」。比如說,「It's not a good movie.」那麼我用一些無監督的方法就能大概預測出「good」是一個積極的詞。
然後,在做預訓練任務時,我對這種信息進行編碼。在預測的時候,不僅要讓它把「good」這個詞恢復,還要讓它判斷是形容詞還是動詞,是一個positive的詞還是一個negative的詞。通過這種方式,我們能夠改善它的情感分類性能,讓它有更強的情感表達能力。如下圖所示,我們在sentence-level與aspect-level的情感分析上都顯著地提高了結果,應該是目前的一個SOTA。
我們用的第二個技巧是knowledge-enhanced post training(知識增強後訓練),當運行的預訓練模型的知識不夠時,把知識庫裡的知識用一些模式(可能是人寫)將其變為自然語言的描述。
比如說,Bus is a car(公交車是一種車),然後說:cross street (穿過街道)會 causes accident(引發事故),類似的詞變成上述相似的句子之後,重新訓練GPT的模型,再看它的表現。上述的例子可以證明知識增強後訓練可以顯著改進文本生成的性能。我們今年發表在TACL的論文就是討論如何用知識庫的信息重新訓練預訓練模型,讓模型在故事生成上的表現更好。
那麼,如果是要生成帶常識的信息時,應該怎麼做呢?比如給出四句話,希望生成一個故事的結局,但結局的生成其實沒有那麼容易,因為結局要符合事件發展的因果關係。或者是給一個statement(陳述),陳述的內容是:The school was open for summer,希望生成這個陳述的解釋。
無論是生成解釋,還是講述一個故事(即給一個開頭,要去續寫這個故事),都要與認識世界中的常識圖譜對齊。如果要在GPT的基礎上做一個更符合知識和常識的生成,那麼一定要有更強的控制。
為了施加更強的控制,我們可以把文本 align到一個特定的圖譜上,然後在圖譜上動態地做多步推理(Multi-Hop Reasoning);推理完成後,再在每一個解碼步驟上選擇這個詞應該來自圖譜,還是來自一個正常的詞表。
這就是一個結合圖神經網絡去進行推理的過程。
我們做了幾個任務,包括解釋生成、歸因自然語言生成(abductive NLG)、故事結尾生成等。歸因自然語言生成指的就是:給出開頭與結尾,希望模型能夠生成中間的情節。
在做這些任務中,我們可以看到一些比較有趣的case,比如一個人去電影院買玉米和刀,但我們知道,刀肯定是不會在電影院賣的,所以我們會生成「Knives are not sold at the cinema.」 通過注意力機制,我們可以看到模型是怎麼推理的,怎麼一步一步地在圖上選擇節點來做歸因生成。
那麼,在自然語言生成上,我們面臨著什麼樣的問題呢?首先是重複,這也是現在的GPT模型面臨的一個重要問題;其次是信息量少,不夠多樣性與具體性;此外,數據的生成要忠實於輸入的數據;最後,在對話的過程中,我們要怎麼樣去控制長文本生成的一致性,讓文本生成更加有連貫性、保持一致。這都是一些比較基本的問題。
我們希望能夠更好地使用 low-frequency knowledge (低頻知識)。現在的預訓練語言模型對高頻知識的掌握都非常好,比如你問歐巴馬是哪一屆的總統,或哪一屆的總統是誰,它都能很快答出來。但這些模型處理低頻知識就不是很好。
此外,我們想要對生成施加更明確的控制,即按照自己的方式去生成。比如現在GPT去做故事生成,很難改變它的邏輯。
另外,我們希望能夠引入 Planning 機制。事實上,當一個人在寫長篇小說或寫詩時,其實是分階段的,先有情節A,再有情節B、情節C等等,是一個分層級規劃的過程。
最後,我們希望是Grounding(落地)的,即生成的信息能夠對應到一個真實世界的場景上。比如生成的文本信息是說:我今天摔了一跤,摔了一跤可能意味著你流血了、要去醫院,等等,都是能夠聯繫到認知的現實世界場景上的。