token 已經有編號,為什麼還要變成一串數字?
前一章說過,文字會切成 token。在模型 (Model) 裡,每個 token 都對應一個嵌入向量 (Embedding Vector),也就是一串按順序排列、供模型運算的數值。
token 編號 (Token ID) 用來查找這個向量;向量裡的數值才是後續計算的材料。 編號的大小本身不代表文字的意義:42 比 17 大,不表示它對應的文字「更多」或「更重要」。
接下來用一張小表,看「用編號找向量」與「用向量算分數」各在做什麼。
先看查表:17 找到的是哪一筆?
模型把各個 token 的向量存成一張嵌入表 (Embedding Table)。編號就是表的索引 (Index),用來找到對應的那一列。本章先讓每個向量只有兩個數字,方便逐個追蹤。
| 文字 | token 編號 | 查到的兩個數值 |
|---|---|---|
| 各 | 17 | [1, 0] |
| 獨 | 42 | [0, 1] |
「各」對應的向量是 [1, 0],存放在編號 17 那一列。程式拿到 17,就去取出這一列的數值:
「各」
↓ 文字對應編號
ID 17
↓ 用編號查嵌入表
[1, 0]
↓ 把這兩個數值交給後續計算
候選分數
拿到 [1, 0] 之後,能怎麼算?
沿用「各」後面可能接「位」或「自」的例子。我們暫時只比較這兩個候選,並刻意把中間運算縮成兩條規則:
| 要算誰的分數? | 固定計分規則 | 放入 [1, 0] |
|---|---|---|
| 位 | 第一個數值 × 2 + 第二個數值 × 0 | 1 × 2 + 0 × 0 = 2 |
| 自 | 第一個數值 × 0 + 第二個數值 × 2 | 1 × 0 + 0 × 2 = 0 |
這裡每個乘數叫做權重 (Weight):它決定某個輸入數值在這次乘加中如何影響結果。本例的 2 和 0 是為了容易驗算而選的,不是「位」或「自」的固定語言規則。
現在可以看出分工了:17 只用在查表;2 分和 0 分,是用 [1, 0] 與權重算出來的。
這裡先停在分數。分數還不是機率 (Probability),可以小於零,也不用加起來等於 1。真實生成流程還要把分數轉成機率,並依設定選取下一個 token;本章只拆開查表與計分這一小段。
只改一個數值,結果會怎麼變?
先猜:如果「各」的編號仍是 17,但把它那一列的第一個數值從 1 改成 −1,「位」的分數還會是 2 嗎? 第二個數值與兩條計分規則都保持不變。
先選「各」,到「改值」面板把第一個數值從 1 調成 −1,看同一張表中的原始與目前分數。再回「查表」,按「交換編號與對照」,觀察向量與分數是否跟著變。練習只屬於本章,所有計算都在本機完成。
改完後,程式用同一個 17 查到的變成 [-1, 0]:
| 候選 | 原本 [1, 0] | 改成 [-1, 0] |
|---|---|---|
| 位 | 2 | −1 × 2 + 0 × 0 = −2 |
| 自 | 0 | −1 × 0 + 0 × 2 = 0 |
「自」現在分數較高。不是因為文字或編號換了,而是查到的數值改變,後面的運算結果就跟著改變。
也可以改選「獨」:它原本查到 [0, 1],用完全相同的規則算,「位」是 0 分,「自」是 2 分。兩個 token 使用同一組計分規則,仍能因為查到不同數值而得到不同結果。
換了編號,向量也會變嗎?
編號只是查找用的索引,可以用另一套編號來指向相同資料。
在練習中按「交換編號與對照」:讓「各」改用 42,同時把它的向量搬到 42 那一列。程式仍取到同一個向量,分數就不變。這就像資料換了座號,內容仍相同。
如果只把輸入 17 改成 42,卻沒有搬動表裡的資料,就會查到另一個 token 的向量。因此,已訓練模型的文字切分器 (Tokenizer) 與嵌入表必須保持對應,不能任意換一套編號。
編號決定去哪裡取資料;向量的數值決定取出後怎麼參與計算。 這就是兩者的分工。
表裡的數字,是誰決定的?
在本章,是我們為教學直接填入的。在可訓練的模型裡,嵌入表的數值也可以是參數 (Parameter),由訓練 (Training) 調整;計分時使用的權重也可以是參數。
這就接上第一章所說的「改模型內部的數值」:編號仍指向同一個 token,但那一列用來運算的數值可以逐漸改變。本章的手動改值,只展示改了以後會發生什麼;它沒有評分預測錯得多嚴重、再計算調整方向,所以不是一次訓練。 後面的訓練章再拆開如何決定調整方向。
也別把每個欄位理解成一個人類替它命名的特徵。真實模型學到的表示不必有「第一欄代表禮貌、第二欄代表人數」這種簡單對照。
最後還要留一條邊界:本例刻意省略了處理前文的中間層。真實聊天模型通常還會把初始向量連同位置、上下文 (Context) 經過多層處理,才算下一個 token 的分數。查表取得的向量,是計算的起點,不是已經理解完整句子的答案。
參考:PyTorch 嵌入表:用編號取得可學習的向量、PyTorch 線性層:以權重做乘加、Hugging Face:模型如何處理上下文(2026-09-27 查核)。本章的兩維、兩候選與固定權重僅服務查表和運算示範,不代表完整語言模型架構。