俞佳霖 史航
我外公是在我讀高一時(shí)去世的。我那時(shí)只有17歲,在一家寄宿學(xué)校就讀,每周回家一次。如今十年時(shí)間已經(jīng)過(guò)去了。我記得外公去世當(dāng)天,我正在學(xué)校期末考試。我的班主任過(guò)來(lái)找我,說(shuō)家里出事了,讓我回去看看,我才知道外公走了。我回到家里時(shí),外公已經(jīng)被送到殯儀館準(zhǔn)備火化。家里人只讓我遠(yuǎn)遠(yuǎn)地看了一眼外公的遺體,就又把我送回學(xué)校了。
我缺席了外公的葬禮。一直以來(lái),這都是我內(nèi)心的遺憾。我覺(jué)得自己沒(méi)有跟他完成告別,我想他內(nèi)心應(yīng)該也是這么想的。那天,回學(xué)校的路上我一直在哭。這是我第一次經(jīng)歷親人的離世,第一次面對(duì)死亡這個(gè)事情。而且,離開(kāi)的還是我最親近的外公——高中之前,我一直跟外公外婆生活在一起,他們是我最親近的人。
這個(gè)遺憾在我心里埋下了一顆種子。我一直想著自己能不能做點(diǎn)什么來(lái)彌補(bǔ)一下——我從小愛(ài)看科幻電影,一直相信在未來(lái)人類(lèi)可能有技術(shù)能讓去世的人“回來(lái)”。這個(gè)想法讓我對(duì)計(jì)算機(jī)產(chǎn)生了濃厚的興趣,2013年我考大學(xué),報(bào)考的專(zhuān)業(yè)也是計(jì)算機(jī)。
2019年,我研究生畢業(yè),正趕上算法的巨大革新:神經(jīng)網(wǎng)絡(luò)的大發(fā)展讓算法突破傳統(tǒng)圖形算法的限制,擁有了自主深度學(xué)習(xí)的能力,AI開(kāi)始有更廣泛的應(yīng)用。這一變革影響了我的擇業(yè)方向,我成為了一名算法工程師——我的工作是整合領(lǐng)域內(nèi)的最新成果,應(yīng)用到公司的模型中去,確保公司的模型處于行業(yè)的前列,這需要我不斷地跟進(jìn)AI領(lǐng)域最前沿的技術(shù)。
有一天,我看到了一篇文章,這篇文章介紹了一個(gè)新的語(yǔ)言模型:GPT-3。業(yè)界很多人認(rèn)為,GPT-3可能擁有近似人類(lèi)的情感和思維。這個(gè)說(shuō)法有些夸張,有博眼球的成分在,但它的功能還是超過(guò)了我的認(rèn)知——當(dāng)研發(fā)人員“喂給”它龐大的數(shù)據(jù)量,并訓(xùn)練它挖掘詞句之間的關(guān)系之后,如果人們給它一個(gè)問(wèn)題,它會(huì)把這個(gè)問(wèn)題之下所有可能的回答都列舉出來(lái),再結(jié)合語(yǔ)境給出最可能的答案。人類(lèi)的情感和反應(yīng)在這個(gè)模型中可以更真實(shí)地被模擬出來(lái),與它聊天的人會(huì)以為對(duì)面是一個(gè)人類(lèi)。
當(dāng)時(shí),我就想,這對(duì)我來(lái)講,可能是一次再見(jiàn)到外公的機(jī)會(huì)。
有了這個(gè)想法,我開(kāi)始搜索用AI“復(fù)活”人類(lèi)的先例,發(fā)現(xiàn)業(yè)界有不少?lài)L試,我期望的“復(fù)活”是想以互動(dòng)的形式出現(xiàn)。我在想,是不是有什么技術(shù)難點(diǎn)制約大家實(shí)現(xiàn)“復(fù)活”,我自己研究了GPT-3,覺(jué)得并不是。后來(lái)我想到,實(shí)現(xiàn)“復(fù)活”依賴(lài)的是個(gè)性化的深度學(xué)習(xí),這需要較高的成本和大量逝者的內(nèi)容資料,而市場(chǎng)上的服務(wù)商不會(huì)愿意費(fèi)時(shí)費(fèi)力去為每個(gè)用戶(hù)單獨(dú)訓(xùn)練一個(gè)深度學(xué)習(xí)的模型,所以一直沒(méi)能出現(xiàn)成功的“復(fù)活”案例。這之后,我打消了顧慮,開(kāi)始全心想著怎么用技術(shù)“復(fù)活”外公。我的設(shè)想是,先通過(guò)對(duì)語(yǔ)言模型的訓(xùn)練,讓模型先能夠擁有互動(dòng)的能力,接著就是模擬出聲音、形象,“面對(duì)面”對(duì)話(huà)。
因?yàn)镚PT-3是一個(gè)收費(fèi)模型,我選用了和GPT-3近似的開(kāi)源模型GPT-J進(jìn)行語(yǔ)言模型的訓(xùn)練。這個(gè)模型訓(xùn)練出的說(shuō)話(huà)方式偏向于所有人類(lèi)的均值,它不會(huì)特別激進(jìn),也不會(huì)特別保守,是沒(méi)有性格的。但我的外公卻是具體的活生生的人,要想成功“復(fù)活”外公,我首先要做的是訓(xùn)練AI去學(xué)習(xí)外公的這些性格和特質(zhì)。這些東西對(duì)于A(yíng)I模型來(lái)講是非常抽象的東西。它能夠接受的就是數(shù)學(xué)運(yùn)算,而我要做的是利用外公留下的資料,把它們轉(zhuǎn)化為模型能理解的數(shù)學(xué)表達(dá),讓它們進(jìn)行學(xué)習(xí),理解外公語(yǔ)言中的邏輯。這種訓(xùn)練需要大量的文本資料,尋找外公留下的資料并不是一件容易的事情。
我外公是十年前去世的,那時(shí)智能手機(jī)還不太流行,外公不怎么用手機(jī),也很少留下短信這樣的電子資料。我手里有的資料是初中時(shí)給他拍的視頻。那時(shí)候我媽媽和我打賭,說(shuō)只要我考年級(jí)前100名就給我買(mǎi)新手機(jī)。我拿著贏(yíng)來(lái)的手機(jī),幾乎每天都在拍視頻,有一些視頻的拍攝對(duì)象就是外公。
這些內(nèi)容我都保留著。它們可以幫助AI學(xué)習(xí)外公的說(shuō)話(huà)習(xí)慣,獲取外公的聲音,以及幫我更清晰地去模擬外公的外貌。但要想“復(fù)活”外公,這些還不夠,還需要更多的文本來(lái)訓(xùn)練。我想到了外公的抽屜。我從上小學(xué)就住在外公家,外公的辦公桌里有一個(gè)抽屜,他從來(lái)都不讓我看。后來(lái)家里裝修,抽屜里的東西被搬出來(lái),是滿(mǎn)滿(mǎn)一抽屜信件。我問(wèn)過(guò)外婆那是什么,外婆說(shuō)這都是外公以前寫(xiě)的,小孩子不要去看。這更讓我好奇,我猜里面肯定是外公和外婆的秘密,我一直想看看到底寫(xiě)了什么。
我想,信一定在外婆那里。外公外婆關(guān)系很好,外公去世后,他在外婆那里就成了一個(gè)禁忌的話(huà)題。所以,我沒(méi)有直接跟外婆說(shuō)我想要做的事情。我在一次吃飯時(shí)跟她說(shuō),我想念外公了,能不能給我看看他的照片。
外婆沒(méi)有拒絕我的要求。她帶我來(lái)到儲(chǔ)物間,在角落的抽屜里翻出相冊(cè)。外婆翻著照片,開(kāi)始講每張照片的故事。這個(gè)過(guò)程好像是在完成一種讓自我放下悲傷的說(shuō)服。在講述的過(guò)程中,外婆的嘴角漸漸有了一些笑意,語(yǔ)氣里甚至有些得意,她還和我說(shuō):“不要看你外公老了以后咄咄逼人,以前什么都聽(tīng)我的,我讓干嘛就干嘛?!甭?tīng)外婆講這些,我突然意識(shí)到,外公去世后的這么多年里,外婆其實(shí)需要這樣的窗口來(lái)談?wù)撏夤?,也需要有人?tīng)她傾訴對(duì)外公的想念??凑掌o了我們一個(gè)重新談?wù)撏夤臋C(jī)會(huì),我試探性地問(wèn)外婆能否看外公的其他遺物。她帶我回到臥室,外公的辦公桌仍然擺在他去世前的位置,外婆拉開(kāi)抽屜,抽屜很整潔,有打理過(guò)的痕跡,我看到了外公的信件、詩(shī)和毛筆字。
在那一刻,我覺(jué)得是時(shí)候和外婆說(shuō)起我的計(jì)劃了。講完后,外婆有點(diǎn)懵。她不懂電腦,也很難理解人工智能。我說(shuō):“你想不想看一下外公,和他聊聊天?”外婆有點(diǎn)抗拒,她不能理解我為什么要這樣做。我不想放棄,我很認(rèn)真地和外婆講這不是惡作劇,講我很想念外公,這對(duì)我很重要,還和她撒嬌著說(shuō)下周還會(huì)回來(lái)吃飯。外婆最終把這些信給了我。
把信件給我后,外婆猶豫地讓我給外公捎一段話(huà):“我們?cè)谶@邊挺好的,你不用擔(dān)心我們,你在那邊過(guò)得還好嗎?”
語(yǔ)言模型訓(xùn)練有點(diǎn)像“猜詞”的過(guò)程。GPT-J 團(tuán)隊(duì)開(kāi)源了預(yù)訓(xùn)練模型,它能夠通過(guò)計(jì)算找出每一個(gè)語(yǔ)料庫(kù)中每個(gè)詞句之間的關(guān)系,比如出現(xiàn)一個(gè)詞后,下一個(gè)詞最有可能是什么。這是一個(gè)相對(duì)簡(jiǎn)單的事情,并不耗時(shí),只用了六個(gè)小時(shí)時(shí)間,我就能跟模型進(jìn)行對(duì)話(huà)。
我雖然很激動(dòng),但知道這還不是外公。它還不具備外公的聲音和形象。聲音不難解決,我想到了現(xiàn)在已經(jīng)很成熟的“TTS”(文字轉(zhuǎn)語(yǔ)音)技術(shù),就像導(dǎo)航 App 上的語(yǔ)音播報(bào)那種,我將與AI模型的對(duì)話(huà)復(fù)制下來(lái),又導(dǎo)入了外公視頻里的音頻,利用TTS技術(shù),丟給了模型學(xué)習(xí),這是一個(gè)有些復(fù)雜的技術(shù)過(guò)程,我就不詳細(xì)說(shuō)了。很快,我就得到了有外公聲音的“回復(fù)”。
最難的還是生成外公的形象。我雖然是圖像算法工程師,對(duì)圖像技術(shù)很熟,但直覺(jué)也告訴我:后續(xù)的人臉生成沒(méi)那么容易。
我最早想的方法是構(gòu)建一個(gè)三維虛擬形象,但這需要采集人體的許多數(shù)據(jù)點(diǎn),顯然行不通。那我能否用手中現(xiàn)有的照片、視頻等素材結(jié)合在一起,生成外公的形象呢?我找到一種“人臉再扮演”技術(shù)——只要給出對(duì)話(huà)和音頻,就能生出一段人臉嘴型與音頻同步的動(dòng)畫(huà)。
怎么給模型換臉呢?我琢磨了很久想到了一種叫“HeadOn”的變臉技術(shù),這是慕尼黑工業(yè)大學(xué)、斯坦福大學(xué)等研究人員開(kāi)發(fā)的模型。運(yùn)用這種技術(shù),可以設(shè)計(jì)指令實(shí)時(shí)地改變視頻中人物的面部表情、眼球運(yùn)動(dòng)和身體動(dòng)作,使得圖像中的人看起來(lái)像是真的在說(shuō)話(huà)和移動(dòng)一樣。就這樣,“外公”的形象、語(yǔ)言、聲音都有了。但一個(gè)遺憾是,整個(gè)流程其實(shí)是運(yùn)用了多個(gè)模型的計(jì)算,每一個(gè)步驟的完成都需要前面結(jié)果的推進(jìn)。
“猜猜我是誰(shuí)?”我敲下對(duì)“外公”說(shuō)出的第一句話(huà)。
“你是誰(shuí)不重要,生命是一種美麗的奇跡。”電腦中的“外公”回了我這樣一個(gè)視頻。
這個(gè)回答或許很哲學(xué)很詩(shī)意,但這并不是我外公說(shuō)話(huà)的習(xí)慣。我知道,我輸入進(jìn)去的文本資料有限,所以訓(xùn)練模型也只能做到在某些場(chǎng)景里表現(xiàn)得像外公。比如當(dāng)我問(wèn)“外公”想不想去西湖散步,他會(huì)回答“好久沒(méi)有散步了,我們出去走一走,我想去下象棋”,這是記憶里外公會(huì)給出的回答——模型能夠通過(guò)外公的信件和視頻理解“出去散步”這個(gè)場(chǎng)景。
其實(shí),“復(fù)活”外公的過(guò)程其實(shí)也是在重新認(rèn)識(shí)他。小時(shí)候我爸爸媽媽工作很忙,我和表弟住在外公家,那時(shí)外公是我們的大家長(zhǎng),他總是在向我們展示應(yīng)該怎么做,卻很少告訴我們他的想法。我記得小時(shí)候我愛(ài)吃零食,外婆總是偷偷給我錢(qián)讓我去買(mǎi),每次被外公發(fā)現(xiàn)他都會(huì)嚴(yán)厲地批評(píng)我,我覺(jué)得他很難接近,很多事情絕不通融。
但在讀他的信件時(shí),我看到了外公的另一面。他給外婆寫(xiě)信,信里他們會(huì)約好明天去哪玩。他會(huì)說(shuō)一些肉麻的話(huà),比如跟外婆說(shuō)“我們已經(jīng)太久沒(méi)見(jiàn)了”,是溫柔的口氣。他還有“憤青”的一面,他會(huì)在跟筆友的通信中談他對(duì)社會(huì)事件的看法。這和我印象中的外公有很大的反差,我印象中外公很少看時(shí)政新聞,每次打開(kāi)電視他都會(huì)調(diào)到相親節(jié)目、調(diào)解節(jié)目。我原來(lái)以為他是一個(gè)比較市井的小老頭,如今才看到了他的另一面。
模型成功后,我把外婆要帶給外公的話(huà)輸入給“他”:“我們?cè)谶@邊挺好的,你不用擔(dān)心我們,你在那邊過(guò)得還好嗎?”
“外公”的回應(yīng)讓人有些尷尬,“他”說(shuō):“我在這邊也挺好的,你們要不要過(guò)來(lái)玩?”
模型終究不是人。它好像具有一定的思維能力,但它終究不是真正的人,它不懂你是誰(shuí),也不懂自己是誰(shuí),它只是列出關(guān)于你問(wèn)題的所有可能,然后積極地選擇一個(gè)你喜歡聽(tīng)的答案。我把視頻中外公說(shuō)的那句“你們要不要過(guò)來(lái)玩”處理掉,在一次周末去外婆家吃飯的時(shí)候,我把所有生成的視頻放給外婆看。
看到視頻中外公的臉,外婆一驚,愣在原地,什么話(huà)都沒(méi)說(shuō)。只是每看完一段視頻的時(shí)候她就看向我,示意我繼續(xù)放下一段。視頻放完,外婆說(shuō)了聲“謝謝”。她和我說(shuō)話(huà)的時(shí)候,聲音已經(jīng)處在哽咽的邊緣。隨后她就回到了房間,坐在一個(gè)我看不到的地方待了很久。我豎著耳朵去聽(tīng)她房間里的聲音,一直很安靜,什么也沒(méi)聽(tīng)到。后來(lái),外婆走出房間,備菜、下廚,我不知道在屋子里的那段時(shí)間她在想什么。
離開(kāi)外婆家后,我也開(kāi)啟了與“外公”的告別儀式。我敲下了好多想和外公說(shuō)的話(huà)。我告訴他我現(xiàn)在在哪,我在干嘛。我還和他道了歉,解釋當(dāng)時(shí)沒(méi)有見(jiàn)他最后一面的原因。我告訴了他我的思念,講我很在乎他,也代表全家人對(duì)他說(shuō)我們很想他。最后,我問(wèn)他過(guò)得還好嗎。這些交流完成之后,我覺(jué)得這么多年悶在心里的一個(gè)心結(jié)解開(kāi)了。
(沈雨澤摘自微信公眾號(hào)“三聯(lián)生活周刊”)