用白話講「語言建模」
把行銷話術剝掉,大型語言模型其實在做一件數學工作,叫做語言建模(language modeling):給定一段文字,估計每一個「可能的下一個字」各有多大機率。「天空是__」會讓「藍的」機率很高、「掉下來的」機率中等,而「冰箱」幾乎不可能。一個能對任何文字、把這些可能性評分評得好的模型,就是一個語言模型(language model)。
這個想法很古老。早期的語言模型只是簡單的 n 連詞(n-gram)計數器,純粹統計「哪些字常接在哪些字後面」。它們對短語還行,但碰到較長或細膩的內容就崩潰了。大型語言模型改變的是預測的「品質」:規模一夠大,要把下一個字預測得好,模型就被迫去掌握意義、文法、事實、語氣與脈絡——而不只是表面的字詞配對。
语言建模把整段文本拆解为一连串“下一个词”的概率。
逐步看「下一個詞元預測」
大型語言模型在寫東西時,並不是一口氣寫出整個答案。它一遍又一遍地做下一個詞元預測(next-token prediction):看完目前為止的所有文字,預測「最貼切的下一小段」,把它接上去,然後再看一次——這次連同它剛剛寫出的那一小段一起看。(「詞元」(token)大致是一個字或字的一小片,我們稍後會正式認識它;現在你就讀成「下一小段文字」即可。)
- 讀取提示,以及目前為止已生成的全部內容。
- 替每一個候選的下一個詞元評分,看它有多合適。
- 挑出一個(通常是高分的),把它接到文字後面。
- 從步驟 1 重複,直到答案完成為止。
自回归循环示意图:上下文输入模型,采样出下一个词元并追加到上下文,然后循环重复。
它是一台文字完成引擎
正因為有這個循環,描述底層機器最乾淨的說法,就是一台文字完成引擎(text-completion engine):給它任何文字,它就把它延伸下去。這把每一項任務都重新框成「完成」。「翻成法文:Hello」被完成為「Bonjour」;「替這篇文章寫摘要:……」被完成為一段摘要。一個問題,不過就是「最自然的接續恰好是答案」的一段文字。就是這個把戲——完成——撐起了一切。
示意图:一句话被切分成词元,每个词元映射到一个数字编号,每个编号再对应一个嵌入向量。
這樣看來,從自動完成到大型語言模型故事裡與手機鍵盤的親緣關係,是精確相符的,而不只是個比喻。鍵盤完成你的句子;大型語言模型完成你的文件、你的問題,或你的整段對話。形狀相同,規模天差地遠。
為什麼「猜字」就能換來這麼多
接下來這部分會讓人意外。要在「各種」人類文字裡都把下一個字預測好,模型就不得不暗中學會驚人多的東西。要把一段數學推導寫完,它得追蹤那些數字;要完成一份法律文件裡的句子,它得遵守那種語域;要正確回答一道冷知識,它得早已把那個事實存起來。把「預測」逼到夠高的標準、橫跨夠多的文字,就悄悄迫使模型習得了沒人手動寫進去的種種技能。
這就是大型語言模型、以及每一個生成式文字模型背後那個安靜的奇蹟:一個看似乏味的目標——預測下一個詞元——一旦你把這個預測器做得夠大、餵進夠多世上的文字,竟然成了通往寫作、推理與對話的一道門。把這點放在口袋裡隨身帶著;其餘幾乎所有東西,都只是它的精細展開。
词向量的排布让类比变成向量运算,图示“国王减男人加女人”落在“女王”附近。