史航

外公是在我讀高一時去世的。我那時只有17歲,在一家寄宿學校就讀,每周回家一次。外公去世當天,我正在學校參加期末考試。媽媽怕讓我分心,沒有把外公去世的消息告訴我。當我回到家里時,家里人只讓我遠遠地看了一眼外公的遺體,就又把我送回學校了。
我缺席了外公的葬禮,一直以來,這都是我內心的遺憾。我覺得自己沒有跟他完成告別,我想他內心應該也是這么想的。這個遺憾在我心里埋下了一顆種子,我一直想著自己能不能做點什么來彌補一下——我從小愛看科幻電影,一直相信在未來人類可能有技術讓去世的人“回來”,我覺得外公未來也能以數字形式在一個數字的世界里復活。這個想法讓我對計算機產生了濃厚的興趣,畢業后剛好趕上算法的巨大革新,擁有自主深度學習能力的AI開始有更廣泛的應用。這一變革影響了我的擇業方向,我選擇成為一名算法工程師。
有一天,我看到一篇文章介紹了一個新的語言模型:GPT-3。它能通過算法學習海量的數據,只需非常少的樣例就可以完成相應的任務。人類的情感和反應在這個模型中可以更真實地被模擬出來,與它聊天的人會以為對面是一個人類。
當時我就想,這對我來講,可能是一次再見到外公的機會。
有了這個想法,我開始搜索用AI“復活”人類的先例,發現業界有不少嘗試。但它們要么是純文本的聊天AI,要么是不具備互動的虛擬影像,都不滿足我的期望。我希望的“復活”是以互動的形式出現。我的設想是,先通過對語言模型的訓練,讓模型能夠擁有互動的能力,接著就是模擬出聲音、形象,“面對面”對話。
于是,我選用了一個模型開始進行語言訓練。然而,這個模型訓練出的說話方式偏向于所有人類的均值,它是沒有性格的。但我的外公卻是具體的、活生生的人——外公是很祥和的,退休后他一天只做幾件事,下象棋一下就是一上午,毛筆字一寫就寫一下午,天氣好的時候就出門散散步,晚上回家和家里人一起看民生節目。
我首先要做的是訓練AI去學習外公的這些性格和特質。我利用外公留下的資料,把它們轉化為模型能理解的數學表達,讓它們學習外公的說話習慣,獲取外公的聲音,以及模擬外公的樣貌。這種訓練需要大量的資料,然而,我外公是10年前去世的,那時智能手機還不太流行,所以外公留下的電子資料只有我初中時給他拍的視頻。
要想“復活”外公,僅依靠這些視頻資料遠遠不夠,還需要更多的文本來訓練。我想到了外公以前寫的滿滿一抽屜的信。我想,信一定在外婆那里。
這讓我有一些顧慮。外婆是一個多愁善感的人,自從外公去世后,他在外婆那里就成了一個禁忌話題。我擔心再次提起外公,會讓外婆難過。所以,我沒有直接跟外婆說我想要做的事情。我在一次吃飯時跟她說,我想念外公了,能不能給我看看他的照片。
外婆沒有拒絕我的要求。她帶我來到儲物間,在角落的抽屜里翻出相冊。外婆翻著照片,開始講每張照片的故事。她講到她和外公在工廠認識,外公是個帶著沖勁的小伙子,在工廠里一身傲氣,誰都不服,唯獨只聽她的話。她還提到過去家里困難時,吃不起飯,外公就下田里給她抓螺螄吃。
在講述的過程中,外婆的嘴角漸漸有了一些笑意。看照片給了我們一個重新談論外公的機會,我試探性地問外婆能否看外公的其他遺物。她帶我回到臥室,外公的辦公桌仍然擺在他去世前的位置。外婆拉開抽屜,抽屜很整潔,有打理過的痕跡,我看到了外公的信件、詩和毛筆字。
在那一刻,我覺得是時候和外婆說起我的計劃了。
講完我的計劃后,外婆有點蒙。她不懂電腦,也很難理解人工智能。我說:“你想不想看一下外公,和他聊聊天?”我很認真地向外婆講我很想念外公,這對我很重要,還和她撒嬌說下周還會回來吃飯,外婆最終把這些信給了我。把信件給我后,外婆猶豫地讓我給外公捎一段話:“我們在這邊挺好的,你不用擔心我們,你在那邊過得還好嗎?”
我把外公的信件轉換成一個個詞元輸入語料庫,丟給模型學習。這是一個相對簡單的事情,只用了6個小時,我就能跟模型進行對話。我雖然很激動,但知道這還不是外公。它還不具備外公的聲音和形象。聲音不難解決,我將與AI模型的對話復制下來,又導入了外公視頻里的音頻,利用文字轉語音技術,很快就得到了有外公聲音的“回復”。
最難的還是生成外公的形象。我雖然是圖像算法工程師,對圖像技術很熟,但直覺告訴我:后續的人臉生成沒那么容易。
我先找到一種“人臉再扮演”技術——只要給出對話和音頻,就能生出一段嘴型與音頻同步的動畫。但這個方案也有問題,只能在既有的指定人物中選擇,比如說奧巴馬。所以,我最后拿到的結果是,一張頂著奧巴馬臉的模型在用我外公的聲音說話。
怎么給模型換臉呢?我琢磨了很久后想到了一種叫“HeadOn”的變臉技術,它可以設計指令實時改變視頻中人物的面部表情、眼球運動和身體動作,使得圖像中的人看起來像是真的在說話和移動一樣。就這樣,“外公”的形象、語言、聲音都有了。
“猜猜我是誰?”我敲下對“外公”說出的第一句話。
“你是誰不重要,生命是一種美麗的奇跡。”電腦中的“外公”回了我這樣一個視頻。
這個回答或許很哲學、很詩意,但這并不是我外公說話的習慣。因為文本資料有限,訓練模型也只能做到在某些場景里表現得像外公。比如,當我問“外公”想不想去西湖散步,他會回答:“好久沒有散步了,我們出去走一走,我想去下象棋。”這是記憶里外公會給出的回答。模型能夠通過外公的信件和視頻理解“出去散步”這個場景,而在文字和視頻資料中沒能提及的更多場景中,模型是不能做到像外公一樣和我對話的。
其實,“復活”外公的過程也是在重新認識他。信件中外公會談及對社會的看法,我印象中他很少看時政新聞,每次打開電視他都會換到相親節目。我原來以為他是一個比較市井的小老頭,如今才看到他的另一面。
模型成功后,我把外婆帶給外公的話輸入給“他”:“我們在這邊挺好的,你不用擔心我們,你在那邊過得還好嗎?”
“外公”的回應讓人有些尷尬,“他”說:“我在這邊也挺好的,你們要不要過來玩?”
模型終究不是人,它只是列出關于你問題的所有可能,然后積極地選擇一個你喜歡聽的答案。我把視頻中那句“你們要不要過來玩”處理掉,然后把所有生成的視頻放給外婆看。
看到視頻中外公的臉,外婆一驚,愣在原地,什么話都沒說。視頻放完后,外婆說了聲“謝謝”,隨后就回到了房間,坐在一個我看不到的地方待了很久。
離開外婆家后,我也開啟了與“外公”的告別儀式。我敲下了好多想和外公說的話。我告訴他我現在在哪里,我在干嗎。我還和他道歉,解釋當時沒有見他最后一面的原因。我也代表全家人對他說我們很想他。最后,我問他過得還好嗎。這些交流完成之后,我覺得這么多年悶在心里的一個心結解開了。
這之后,我沒有再開啟過這個模型。我做這個模型的唯一目的就是為了告別,現在告別結束了,我也該放下了。
慶南//摘自三聯生活周刊微信公眾號,本刊有刪節,與魚/圖