JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

為什麼模型看到的是數字,不是文字

神經網路只會做乘法和加法,它需要數字。所以任何語言模型的第一件工作,就是把你的句子變成一串整數。本篇講清楚為什麼,以及那些整數到底是什麼。

電腦會算數,不會閱讀

當你在聊天機器人裡輸入 「the cat sat」,感覺上模型在閱讀英文。其實不是。在底層,一個大型語言模型(large language model)就是一大堆數字——數十億個參數(parameters)——它唯一會做的事就是把數字相乘、相加、比大小。它沒有字母、空格或「cat」這個詞的概念。所以在任何「思考」發生之前,文字必須先被轉換成數字。這個轉換步驟叫做分詞(tokenization),它是其他一切賴以站立、卻不起眼的地基。

詞彙表:模型固定的一份「零件清單」

訣竅是事先講好一份固定清單,列出模型「被允許認識」的文字片段。這份清單就是詞彙表(vocabulary),裡面每一個片段叫做一個token(詞元)。一個 token 通常不是一整個字、也不是單一字母,而是介於兩者之間,常常是像 `cat`、` sat`、`ing` 這樣的常見片段。現代模型的詞彙表大小(vocabulary size)通常落在三萬到二十萬個 token 之間。詞彙表裡的每個 token 都被指定一個號碼,也就是它在清單中的位置。模型認得的是 token 第 1842 號,而不是它拼出來的那個字。

因為清單是固定的,把文字變成數字就只是「查表」。把每個片段在詞彙表裡找出來,記下它的號碼,你就得到一串token 編號(token IDs)——一串普通的整數。那串整數才是模型真正的輸入,原本的字串被留在門外。

分词把句子变成一串词元 ID,再由查找表把每个 ID 映射成嵌入向量——这就是模型最前面的两道门。

示意图:句子先切成词元,每个词元变成一个整数 ID,每个 ID 再指向嵌入矩阵的一行,显示为一个数值向量。

用手動方式分詞「the cat sat」

  1. 拿到原始字串:「the cat sat」。
  2. 把它切成詞彙表裡的片段。真實的分詞器會保留空格,所以可能切成:["the", " cat", " sat"]——注意前導空格是屬於 token 的一部分。
  3. 在詞彙表裡查出每個片段的號碼:"the" → 1820、" cat" → 5169、" sat" → 7493。
  4. 把整數串 [1820, 5169, 7493] 交給模型。文字已經消失,只剩下數字。
text   :  "the cat sat"
tokens :  ["the", " cat", " sat"]
ids    :  [1820, 5169, 7493]      <- this is what the model receives
同一份輸入的三種樣貌。模型永遠只看得到最底下那一列。

數字進,一個數字出,重複

一旦模型拿到 token 編號,它就做完運算、產生對下一個 token 的猜測——這就是下一個 token 預測(next-token prediction),每個聊天模型都圍繞這唯一的任務打造。它輸出一個數字(一個 token 編號),那個編號被查回成文字、接到句子後面,然後整套流程再跑一次,預測再下一個 token。一段長答案,就只是這個迴圈跑了好幾百次。所以 token 不只是輸入——它也是模型思考與計費的單位。

\hat{p}(x_{t+1}\mid x_1,\dots,x_t)=\operatorname{softmax}(W h_t)

下一个词元预测:模型根据已有的词元 ID 上下文,为词表中的每个词元输出一个概率。

数字进、一个数字出、再重复:每个预测出的词元都接到序列末尾,再喂回去预测下一个。

循环示意图:词元 ID 进入模型,模型输出下一个词元 ID,新 ID 被接到序列末尾,然后循环重复。

這個主題接下來要走的路

你現在握有整張地圖了。第 2 篇講如何把文字切成詞彙表片段——那些聰明的子詞(subword)方法,讓一份有限的清單能涵蓋任何句子。第 3 篇說明每個 token 編號如何變成一串模型真正能拿來運算的數字向量(vector)。第 4 篇揭曉為什麼那些向量能捕捉語意。第 5 篇把這一切變成實戰直覺:數 token、估費用,以及那些有名的分詞陷阱。一路都是數字——我們去認識它們吧。