萬物背後的同一個遊戲
你已經認識了這些零件:文本被切成詞元,每個詞元又能藉助word2vec或GloVe變成向量,讓意義變成幾何。現在我們讓這些零件去做一件幾乎像孩子遊戲的事——語言建模:給定到目前為止的詞,猜下一個是什麼。「貓坐在___上。」還沒讀完,你腦中就浮現了「墊子」或「地板」。把這種條件反射機械化,就是整個領域。
更確切地說,語言模型在給定上文的情況下,為每一個可能的下一個詞元賦予一個機率,再把這些機率串起來,得到整句話的機率。它輸出的不是一個詞,而是涵蓋整個詞表的一個分佈——也許是 5 萬個加起來等於 1 的數字。「墊子」可能得 0.4,「地板」0.2,「冰箱」0.0001。其餘一切,都從「為下一個詞打分」這個習慣裡流淌出來。
靠數數:n-gram 時代
最古老也最老實的辦法就是數數。n-gram 模型根據前面 n−1 個詞來估計下一個詞:在一大堆文本裡數這種組合出現了多少次。二元模型往回看一個詞,三元模型往回看兩個詞。想要 P(「墊子」|「在」,「上」)?數「在……上墊子」出現了幾次,除以「在……上」出現了幾次。就這麼簡單——沒有神經元,只有記帳。這就是最樸素形式的極大似然估計。
P(w | context) = count(context + w) / count(context)
# trigram example
P("mat" | "on","the") = count("on the mat") / count("on the")在短範圍內,這套辦法好用得驚人,幾十年來一直驅動著手機鍵盤和早期語音辨識。但很快就撞上兩堵牆。第一是稀疏性:大多數合理的四詞組合在你的資料裡壓根沒出現過,於是計數為零,模型便宣稱它們不可能(巧妙的「平滑」技巧能打補丁,但也只是打補丁)。第二是固定且很短的窗口:三元模型無法把「我今早落在廚房裡的鑰匙」與它真正的主語「鑰匙」聯繫起來——它永遠只看得到最後一兩個詞。橫跨整句的意義,對它是隱形的。
從數數到理解:神經語言模型
神經網路的轉向,靠的是拒絕把詞當作不透明的符號,從而解決稀疏性。它不再把「狗」和「小狗」當成毫不相干的字串,而是把它們的嵌入——那些稠密的意義向量——餵進網路。如今「小狗」可以借用模型關於「狗」學到的一切,因為它們在向量空間裡彼此相鄰。模型不去背誦短語,而是從特徵裡組合出一個預測。一個它從沒見過的短語,照樣能得到合理的機率。
為了按順序讀完整句話,早期的神經語言模型使用循環網路,從左到右地走,攜帶一份不斷更新的摘要——隱藏狀態——並在每個詞處更新它。理論上這個狀態能記住十二個詞以前的主語;實踐中樸素的 RNN 忘得很快,這正是 LSTM 加入「門」來更長久地留住資訊的原因。最後一層用 softmax 把網路的輸出變成涵蓋詞表的機率——所以整套東西回答的仍是同一個問題:下一個是什麼?
我們怎麼知道它在變好?我們衡量「驚訝」。一個能自信地給真正出現的詞賦予高機率的模型,對真實文本「更不驚訝」。標準的分數是困惑度——粗略地說,就是模型在每一步實際上要在多少個詞之間猶豫。困惑度為 20,意味著它的迷惑程度相當於在 20 個等可能選項裡挑一個;越低越好。訓練透過梯度下降推動網路,讓這份驚訝在數十億個詞上持續下降。
一個猜詞遊戲如何變成一種能力
下面這個驚喜重塑了整個領域:要把下一個詞預測得足夠好,模型幾乎被悄悄逼著去學會其他一切。要補全「法國的首都是___」,你需要一個事實。要補全「她不停倒水,直到杯子___」,你需要一點物理直覺。要收尾一段引號、配平一個括號,你需要句法。這些都沒有被直接教過——它們是「擅長猜詞遊戲」的副產品,自己掉了出來。
一旦模型能為下一個詞元打分,你也就能讓它寫作。給它一段提示,從它的分佈裡取樣一個詞元,接上去,再問一次——這個循環叫自迴歸解碼。跑上幾百次,你就得到一段話。關鍵在於:模型從沒被訓練去「寫文章」;它被訓練去預測,而寫作不過是把預測向前跑。這個單一的目標,配上你先前認識的Transformer並加以放大,正是把語言模型變成今天聊天助手背後那些大語言模型的原因。
預測不是什麼
現在是老實話的部分,因為炒作往往堆積在這裡。語言模型預測的是「哪種文本更可能」,它並不核查那段文本是否為真。「澳洲的首都是雪梨」是一句流暢、高機率的句子——卻是錯的。當模型自信地說出假話時,它並不是在撒謊;它恰恰是在做本職工作——生成看似合理的續寫。這就是幻覺的根源,再流暢也消除不了它。
再補幾句溫和的糾正。預測下一個詞並不等於人類意義上的理解——模型學到的是詞與詞共現的統計規律,這很強大,卻不同於有切身經驗的理解。更低的困惑度並不保證模型更真實或更有用,只保證它對文本更不驚訝。而那些著名的「湧現」能力是真實存在的,但部分是我們衡量方式造成的假象;能力確實隨規模增長,但不是靠魔法,也並非沒有上限。把流暢只當作流暢的證據,僅此而已。
所以請同時握住兩個真相。下一個詞元的預測,是那個安靜、簡單到幾乎令人難為情的目標;當它被放大到全世界的文本上,便催生出能翻譯、能摘要、能對話的系統。而在底層,它依然是一台預測機器——自信、流暢、偶爾出錯,並且對真相漠不關心,除非我們費很大力氣讓它在乎。下一篇我們將認識 BERT 及其同類,看遮罩預測如何被導向深度理解,而非生成。