基於大數據的語言模型與程序化敘事生成(上)


3樓貓 發佈時間:2022-12-26 07:33:42 作者:低多邊形厭氧菌 Language

前言

2018年,我寫了一篇關於使用AI來自動生成敘事的文章:如何不費腦子地寫出一個好故事?或許AI能幫你辦到!
。這篇文章整理了“過程式敘事生成(Procedural Narrative Generation)”這個領域的各種自動生成故事的方法。
當時的文章雖然使用的是AI這個詞,其具體涵蓋的技術卻跟今天大行其道的GPT,BERT等完全不是一回事。那時的人們還在精心定義可能的故事情節所組成的空間(故事域; story domain),研究如何隨機在這個空間中採樣的同時,保證採樣得到的情節符合邏輯情理和人物設定、能夠表達作者想要表達的內容、甚至還能促成一些連開發者都預料不到的精彩情節的產生。
而隨著像GPT這樣的大規模預訓練語言模型的流行,像AI Dungeon和Chat GPT這樣對公眾開放的服務的出現,人們也看到了故事生成的全新的可能性——我們可以完全不去定義故事域、不去費勁地告訴計算機怎樣算是符合邏輯清理和人物設定,而直接跟計算機用含糊而模稜兩可的自然語言對話,告訴它我們想要什麼樣的故事,然後期待在幾千億單詞的語料庫上訓練過的擁有幾千億參數的神經網絡,能給出什麼樣的驚喜。
今天,我就想來聊聊出現在2018年之後的這些基於深度神經網絡預訓練語言模型的故事生成技術。在感嘆於這些技術之神奇的同時,也來談談在前一篇文章中所介紹的那些2018年以前的技術,為什麼也還遠遠不能被取代。由於內容篇幅較長,會分成上、下兩個部分,下面的第一部分會先跟大家介紹語言模型的基本原理和在寫作上的表現。

深度學習和語言模型

2018年,谷歌首次提出了神經網絡架構Transformer [3],在深度神經網絡中大規模使用自注意力(Self-attention)機制,飛躍性地提升了語言模型考慮上下文的能力,從此將基於深度神經網絡的語言模型推向了一個全新的高度。
語言模型的本質是數學統計模型,就像大多數機器學習方法中使用的模型,它有數量龐大的參數,來擬合給定的訓練數據中的輸入-輸出關係。為了訓練出對人類語言有基本認知的語言模型,需要有龐大的語料庫(Corpus)。比如GPT-3的訓練數據包含多達4990億的單詞,其中包括網站原始文本數據、維基百科、書本、論壇問答等等。
被訓練的模型通過玩一些基本的文字遊戲來逐步掌握語言的用法。比如GPT在訓練中就要玩文字接龍的遊戲:每次從語料庫中隨機抽取一段話,從某個位置截斷分為前半部分和後半部分。把前半部分輸入到模型中,就能得到一個條件概率分佈——給定輸入的前半部分,所有可能的後續的概率是多少——再從這個概率分佈中取樣,就得到一個模型生成的後半部分。將這個機器生成的後半部分和語料庫中的後半部分比較,根據比較結果來調整模型的參數,使得模型更傾向於生成語料庫中的後半部分。
基於大數據的語言模型原理示意

基於大數據的語言模型原理示意

實際操作中模型並不是一下就輸出整個後半部分,而是每次輸出一個字/單詞,再將輸出的字/單詞追加到輸入中,再次輸入得到下一個字/單詞,如此反覆直到全部的後半部分都輸出完畢。由於這個過程向模型輸入了一個字或單詞組成的序列,輸出也是一個字或單詞組成的序列,我們將這種模型稱為“Sequence-to-sequence model(從序列到序列的模型)”。
Sequence-to-sequence model(從序列到序列的模型)

Sequence-to-sequence model(從序列到序列的模型)

這個訓練過程,乍一看只是在盲目地模仿訓練語料庫。事實上,這種說法並不完全準確。語言模型是一種深度神經網絡(deep neural network),是由多層的“神經元”計算模塊組成的複雜數學計算函數,包含了數量龐大的參數用於擬合數據。與傳統的機器學習不同,深度學習不僅要用統計模型去“學習”輸入中的特徵和輸出中的特徵之間的關係,還要“學習”這些特徵本身。也就是說,深度學習的輸入往往是原始對象的數據表示(比如一段文字),一個深度神經網絡要首先從原始對象中提取出對計算任務有用的特徵,才能去完成計算任務。
這些特徵往往是比原始的輸入數據本身抽象層次更高的信息。比如,看到下面這句話
“我們看完這部電影的結局仍然意猶未盡,一直呆呆坐著等到工作人員名單播完都沒有離開電影院”
僅憑字面意思,很難得出結論說這是對電影的積極評價。只有先在腦海中想象出這句話所描述的事件,將這個事件聯繫到一個典型的電影入迷者的形象,才能進一步得出這樣的結論。
深度神經網路有別於傳統的機器學習模型的一個很重要的地方,就在於它有能力去進行這樣的抽象。基於Transformer的語言模型具有一種“編碼器-解碼器(Encoder-decoder)”結構,首先用編碼器將高維空間中的原始數據用低維的特徵向量來表示(也就是AI從業者們常說的“Embedding”),再通過用解碼器根據這些特徵向量還原(reconstruct)出原始數據的方式來驗證這些低維的特徵向量有足夠的信息來代表對應的原始數據。這些低維的特徵向量大多數情況下並不會直接對應於人腦中的那些抽象概念(比如”電影入迷者“),但它們用更簡潔更一般的方式概括了原始數據,在這種意義上可以被理解為是一種機器形成的抽象概念。
編碼器-解碼器(Encoder-Decoder)結構

編碼器-解碼器(Encoder-Decoder)結構

因此語言模型在完成了足夠大量的這種文字接龍訓練之後,某種意義上它也形成了一整套建基於語言之上的抽象概念——也就是說,某種意義上,它也形成了它自己的對語言的理解。
這樣訓練出來的語言模型具有基本的語言能力,也就是說出來的話看起來都像人話的能力。但對於具體的任務來說,這樣的能力還遠遠不夠。一個段落概述AI需要知道什麼樣的句子才是好的概述,一個聊天機器人AI需要知道什麼樣的回答對對方來說才是好的回答,一個故事生成AI得知道什麼樣的文本才代表一個好故事,等等等等。
為了能夠使得語言模型在基本的語言能力基礎上還能勝任具體的任務,就要進行下一階段的訓練,也就是微調(Fine-tuning)。這個階段的訓練往往需要藉助具體任務相關的有標記的數據集(labeled data),其中包含一系列具體任務相關的輸出,以及每個輸出對應的好壞評估。
最近大火的Chat GPT,則進一步採用了強化學習(Reinforcement Learning)的方式來進行這一階段的訓練。OpenAI採用大量人力來審查一個GPT-3模型的輸出,就這個輸出針對給定的輸入對話是否有用來打分。這些打分數據又被用來訓練一個同樣基於神經網絡的自動評分模型。有了這個自動評分模型之後,就能在人工打分沒有覆蓋到的更大的範圍內給模型輸出提供反饋,利用這些反饋來對模型參數進行微調,使得模型在具備基本的語言能力的基礎上,還能輸出作為聊天機器人更希望被看到說出的話,讓語言模型從“盲目地模仿人類說話”到“有目的地說話”走出第一步。
嘗試使用Chat GPT生成跑團故事

嘗試使用Chat GPT生成跑團故事

語言模型的寫作能力

回到我們的主題,這樣訓練出來的語言模型,實際的寫作能力如何呢?
在今年發表的一篇論文《對Transformer深度神經網絡的創意寫作能力的系統性評估(A Systematic Evaluation of the Creative Writing Skills of Transformer Deep Neural Networks)》[1] 中,作者Marco等人就這個問題進行了一次實驗。
實驗中,論文作者們隨機選取了幾十個電影標題(這些電影被要求足夠冷門,從而確保大多數人都沒看過),讓一個經過微調(fine-tuning)的Transformer語言模型根據這些標題生成故事梗概。比如,如果給定標題是“The Roommates (室友)”,語言模型可能會生成下面的虛構的劇情梗概:
The Roommates tells the story of a group of college roommates who live together in a small apartment in Los Angeles, California. The film follows the lives of the roommates as they struggle to cope with the pressures of college life and the changes that come with it. 電影《室友》講了關於一群大學室友的故事。這群大學室友一起住在加州洛杉磯的一個小公寓裡。電影追蹤了這些室友們在大學生活的壓力面前隨之而來的人生轉變。
收集到這些生成的電影劇情梗概之後,作者們請到了六十多名英語流利的碩士生作為調查受試者。每個受試者會被分配到一個電影標題和這個標題的兩段劇情梗概——一段是電影原來的真實劇情梗概(由人類作家完成),另一段則是語言模型生成的劇情梗概,受試者打分時並不知道文本段落的作者是誰。受試者要在文法通順性(Readability)、可理解性(Understandability)、標題相關性(Relevance)、信息豐富性(Informativity)、吸引力(Attractiveness)和創意性(Creativity)六個方面給這些劇情梗概打分。結果可以說很出人意料:Transformer所生成的劇情故事梗概,除了在創意性上略低於人類(-3%),在所有其他方面的打分都要高於人類寫作的版本。
分別由機器和人類寫成的文本在六個方面的得分

分別由機器和人類寫成的文本在六個方面的得分

需要說明的是,上面的結果是針對平均評分來說的。而相較於人類作品水平的參差不齊,Transformer輸出的文本質量較為穩定。在不少指標上,人類作品得分是被那些質量非常差的作品拉低了。
上面的打分是在受試者並不知道讀到的兩段文本作者分別是誰的情況下得到的。在第二組實驗中,受試者打分前就知道兩段文本分別是機器還是人類寫的。結果在這組實驗最後得到的得分中,機器生成的文本在所有評分指標上的得分都比第一組實驗降低了。第一組實驗中,機器文本平均比人類文本得分高0.257,而在第二組實驗中,機器文本平均只比人類文本得分高0.107。而人類文本的得分,在第一組實驗和第二組實驗中則沒有明顯差別。
這似乎意味著對人類文本質量的認知是受試者評分的基準,而當受試者知道文本是機器生成時,它們的評估變得更加嚴格了。這個現象可以由一個日常經驗中得到解釋:當我們看到一段文本中出現了似乎不太對勁的內容,如果我們知道作者是人類,通常的反應會是去思考作者的意思,幫作者去解釋看似不對勁的內容為什麼其實是合理的;而如果我們知道作者是機器,通常的反應則會是認為這是機器出錯了。
除此之外,作者們也指出機器生成的故事梗概的一些其他共同特徵,比如它們通常比較套路化,使用諸如“這個電影講了這樣一個故事(The film tells the story…)”這樣的模板式句子,而且平均長度比較一致,都是4-5個句子。語言模型生成的故事梗概有時會犯事實性的錯誤,比如下面這個例子:
English: An Autumn in London tells the story of a group of English students who are invited to spend a weekend at a country house in the English countryside. The film is set in the late 1920s and early 1930s, during the English Civil War. The main character is a young Englishman who has been sent to London to complete his education. He meets a young woman who is also studying in London and falls in love with her. However, she is engaged to be married to the son of a local aristocrat. 電影《英國:在倫敦的一個秋天》講述了一群受邀在英國鄉下一間別墅度過一個週末的英國學生的故事。故事發生在20世紀20年代晚期到30年代早期,也就是英國內戰期間。主人公是一個到倫敦完成教育的年輕的英國人。他遇到了一個同樣在倫敦學習的年輕女人並與對方墜入愛河。然後,對方其實已經跟一個當地的貴族兒子訂婚了。
文中提到的英國內戰實際上發生在17世紀,遠遠早於20世紀。
機器生成的文本有時會因為出乎意料的展開而帶來戲劇性效果:
The film Beware Of Pickpockets tells the story of a group of pickpockets who are on the run from the police. The film is set in a small town in the south of France during the early 1970s. The main character is a pickpocket named Jean-Claude, who lives with his widowed mother, who works as a waitress in a restaurant, and his younger brother, Jean-Michel, who is a student at the local high school. The two brothers are in love with the same girl, Marie, but she is engaged to the son of a wealthy family, and the father does not approve of their relationship because he fears that he will lose his job if he marries her. Jean and Michel’s relationship is further complicated by the fact that Marie’s father is a member of the pickpocket gang, and he is also the leader of the gang. 電影《小心扒手》講了一群正在警察追蹤下逃亡的扒手的故事。故事發生在20世紀70年代法國南部的一個小鎮。主人公是一個名叫簡-克勞德的扒手。他跟他的在飯店當服務員的寡婦母親住在一起。他的弟弟簡-邁克爾是當地的一個高中生。兩兄弟愛上了同一個女孩瑪麗。但是瑪麗已經與一個有錢人家的兒子訂婚了。而且父親並不同意他們的婚事,因為他害怕他會因為他們的婚姻而失去工作。簡和邁克爾的關係還更復雜:因為瑪麗的父親其實也是扒手幫的成員和領導。
機器生成的文本有時也會自相矛盾,比如下面的例子:
Abby Sen is a young woman who lives with her widowed mother in a small town in the American Southwest. Abby’s father died when she was very young, and her mother has since remarried and has a daughter named Abby. 艾比·森是一個年輕女人,跟她的母親一起住在美州西南部的一個小鎮。艾比的父親在她很小的時候就去世了。之後艾比的母親再次結婚,並生下一個女兒叫做艾比。
這段文本在艾比的父親究竟是誰上自相矛盾了。
這裡介紹的論文專注於為影片標題生成故事梗概的任務。影片的故事梗概通常比較短小。而在需要更長的文本的任務中,內容的前後一致就變成了更加嚴重的問題。
比如,在同樣基於Transformer模型的AI Dungeon遊戲中,語言模型要對玩家輸入的用自然語言描述的任何動作指令給出反饋,塑造出一種彷彿在玩傳統文字冒險遊戲的感覺。下面是一個例子(玩家輸入為粗斜體):
> You're walking down the dark city streets while neon lights flash brightly above you. As you pass an alley you see a strange man hunched over something on the ground. He jumps up and down and points frantically, saying something you can't understand. His eyes are wild and they are locked right on you. 你沿著昏暗的城市街道一路走下去,霓虹燈在你頭頂明亮地閃爍。正當你穿過一條小巷時,你看到一個奇怪的男人在地上的什麼東西面前彎腰俯身。他像發神經一樣上躥下跳,指指點點地說著一些你聽不懂的東西。他狂野的視線緊緊鎖在你身上。 > You greeted him with Donald duck voice. 你用唐老鴨的聲音跟他打了招呼 > You duck down and wave your hand in a "friendly" manner. The man stares at you and begins to laugh. He then hits your arm with the stick he is holding. 你躲開並“友好地”招手。這個男人盯著你看並開始大笑起來。然後他用他的手杖擊打了一下你的手臂。
在傳統的文字冒險遊戲中,玩家同樣輸入文字指令與遊戲系統互動 ,但這些指令必須來自遊戲開發者預先定義好的指令集,否則就只會得到諸如“您輸入的指令無效”這樣的回答。因此玩家在玩的過程中多少要去猜測遊戲開發者的意圖,而且雖然面對的是一個能輸入任何文本的界面,實際還是被遊戲開發者所限制,有時候的體驗會非常令人沮喪。
使用語言模型來代替這種預定義的指令系統,終於讓玩家真正意義上地能夠在文本框中輸入任何文本。而且就像是在跟一個人類遊戲主持人對話一樣,不論你對對方說什麼,對方總能回答幾句,不會只給出一句冰冷的“指令無效”,甚至有時候通過刁鑽的輸入還能引導對方說出相當精彩的回答。
但是反過來,在傳統的文字冒險遊戲中,是存在一個虛擬的遊戲世界實實在在地以數據和程序的形式運作著的。玩家儘管通過文本指令與系統交流,最後實際上是在與這個虛擬世界互動。這個虛擬世界中存在著前後一致的地圖、物品和NPC,玩家在這個虛擬世界中所克服的也是實實在在的挑戰,解決的是實實在在的謎題。
而到了AI Dungeon這裡,一切都只存在於語言層面。AI所說出來的話背後沒有任何數據和程序層面的對應物,只是空洞的文本。如果這些文本有任何語義上的內容,大概只存在於玩家自己的腦補中。
比如,在一次AI Dungeon中我與DM有這樣的對話記錄(我輸入的文本為斜體):
> (The elves) point down the street and tell you the name of the inn. You thank them and enter. When you walk in, you see that it is a small inn, but they serve good food and you can see a few elves enjoying a drink at a nearby table. 精靈們沿著這條街指過去並告訴了你旅館的名字。你感謝了她們並進入了旅館。當你進入的時候,你看到這是一個很小的旅館,但是他們提供很棒的食物,你看到不少精靈在附近的桌子上享受飲品。> I step out of the inn. 我走出了旅館 > Outside you notice a group of elves playing a game. They look like they are enjoying themselves. You wonder if you could join the game. 在外面你看到了一群精靈在玩一個遊戲。她們看起來很享受。你在想你是不也能加入她們一起玩。 > I step back into the inn. 我又走回了旅館裡 > You walk up to the front desk. A man is standing there looking bored. "I was wondering when you would get here," he tells you. 旅館的護衛舉起了武器。你用劍殺死了前兩個護衛。第三個護衛注意到了你的武器 > I step out of the inn. 我走出了旅館 > You are now outside. You notice several guards in the courtyard. They seem tense. They are all keeping an eye on some area behind you. 你現在在旅館外面。你注意到庭院裡有幾個守衛。他們看起來很緊張。他們都盯著你後面的某個位置看。 > I steped back into the inn. 我又走回了旅館裡 >You walk up to the front desk. A man is standing there looking bored. "I was wondering when you would get here," he tells you. 你走向前臺。一個男人看起來百無聊賴地站在那裡。“我正想著你什麼時候來呢。”
我發現我每一次走進旅館,這個旅館都好像變成了一個完全不一樣的地方,我找不到原來的NPC和物品,我之前在旅館做的事情到了再次進入旅館的時候也沒有後續。
作為遊戲文本的讀者,我在閱讀的過程中會形成一個關於這個遊戲世界是什麼樣的腦內模型(Mental Model)。人們對傳統意義上的“玩遊戲”這件事的理解是利用遊戲機制在一個遊戲世界內達成某個目標。正是通過這個腦內模型,我才能夠預測自己在遊戲世界內的行動會有什麼結果,從而為達成自己的目標指定一系列行動計劃。
然而在AI Dungeon中,我通過腦內模型做出的判斷不太可能在遊戲中得到應驗。甚至很多時候因為遊戲主持人前後不一致的說辭,這個腦內模型都很難建立起來。我也就很難獲得上面所說的這種傳統的“玩遊戲”體驗。
值得注意的是,當人在讀一段文本時,如果沒有對機器生成的文本有很強的偏見,就容易產生ELIZA效應,潛意識地去構想出文本背後存在著一個人格在述說這一切,從而解讀出許多文本中並不存在的內容。因此AI事實上並不需要做到100%的前後一致,就足以在這類遊戲中讓人產生沉浸感。
我的友人起司(Twitter:@sunyuqian1997 )在開放世界遊戲Delysium(Twitter:@The_Delysium )[6]的玩家社群中,運營過一個由chatbot驅動的文字冒險遊戲。玩家要跟一個由語言模型控制的AI人物David對話,並幫助他做出一些重要決策。在運營這個遊戲的過程中起司發現,儘管David經常會說一些前後不一致的話,玩家卻並沒有因此而出戏,反而將這種前後不一致解讀為“David還不完全信任我”。

總結

至此,我們討論了語言模型的基本原理,瞭解到它的本質仍是基於大數據的複雜統計模型,通過擬合訓練數據來起作用。但深度神經網絡的架構和Transformer的自注意力機制,讓它並不單純是模仿訓練數據最原始的樣子,而具有一定的抽象和概念重組的能力。
語言模型生成文本的原理是在這個統計模型所定義的文本序列概率分佈中依序採樣。在經過最基礎的模型訓練後,語言模型只能輸出看起來像人話的文本。但在經過後續的微調(Fine-tuning)之後,能夠有一定“目的性”地說話。
有關Transformer的調查展示,Transformer生成的短故事文本似乎已經能夠在文法通順性(Readability)、可理解性(Understandability)、標題相關性(Relevance)、信息豐富性(Informativity)、吸引力(Attractiveness)這幾個方面都至少達到人類的平均水平。但它所生成的文本仍然會存在事實性錯誤和前後不一致。
而讀到這裡,很多疑問會順理成章地冒出來。比如,如果真的使用這樣的AI生成故事,該怎樣控制故事內容的走向?又有沒有可能用一種巧妙的方式來使用這些AI來改善它前後不一致的問題?基於語言模型的故事生成,與較為傳統的故事生成方法之間又是什麼樣的關係?
我們會在下篇中討論這些問題。

參考文獻

[1] Marco,  Guillermo and Gonzalo,  Julio and Rello,  Luz, A Systematic Evaluation of the Creative Writing Skills of Transformer Deep Neural Networks (February 24, 2022).  Available at SSRN: https://ssrn.com/abstract=4042578 or http://dx.doi.org/10.2139/ssrn.4042578
[2] Playing With Unicorns: AI Dungeon and Citizen NLP: http://digitalhumanities.org/dhq/vol/14/4/000533/000533.html
[3] Vaswani, Ashish, Noam, Shazeer, Niki, Parmar, Jakob, Uszkoreit, Llion, Jones, Aidan N., Gomez, Lukasz, Kaiser, and Illia, Polosukhin. "Attention Is All You Need." (2017).
[4] Brown T, Mann B, Ryder N, Subbiah M, Kaplan JD, Dhariwal P, Neelakantan A, Shyam P, Sastry G, Askell A, Agarwal S. Language models are few-shot learners. Advances in neural information processing systems. 2020;33:1877-901.
[5] Youtube視頻:Hung-yi Lee, Chat GPT (可能)是怎麼煉成的 - GPT 社會化的過程
[6] Delysium(Twitter:@The_Delysium ); Chatbot David(Twitter:@sunyuqian1997,status:1587056660496908288)
作者公眾號: junjunstorytelling | Blog: http://www.psyxel.com/

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com