什麼是詞元?
詞元(Token)是語言模型處理文本的基本單位。使用者輸入至語言模型的任何文本,在模型處理前,都會先由分詞器(Tokenizer)切分成多個詞元,再輸入至模型進行處理。例如:What're tokens?
會被分詞器切分成 ["What", "'re", " token", "s", "?"]
5 個 token。
為何選擇詞元而非字元或單字?
語言模型之所以採用詞元作為基本處理單位,而非單一字元或完整單字,主要基於以下考量:
- 語意豐富性: 相較於單一字元,詞元通常能承載更豐富的語意資訊,有助於模型更好地理解文本的上下文。
- 效率與彈性: 詞元比完整單字能提供更高的處理效率和彈性。模型的詞彙表(Vocabulary)中獨特的詞元數量通常少於獨特單字的數量。這是因為詞元可以組合起來形成新的單字。例如,
tokens
可以由token
和s
這兩個詞元組合而成,無需在詞彙表中同時包含token
和tokens
這兩個獨立的單字。 - 處理新創詞彙(OOV): 詞元機制使模型能夠處理新創或不常見的詞彙(Out-of-Vocabulary, OOV Words)。例如,像
gpting
這樣的詞彙,可以被拆分成模型已知的詞元gpt
和ing
,即使gpting
本身不在詞彙表中,模型也能透過其組成詞元來理解其結構或推斷意義。
從詞元到詞元 ID 再到語意張量
一個語言模型所能識別的所有詞元集合,稱為模型的詞彙表(Vocabulary)。詞彙表中的每個詞元都會被賦予一個獨特的數值識別碼(ID),如下表所示:
Token | ID |
---|---|
What |
1001 |
're |
1002 |
token |
1003 |
s |
1004 |
? |
1005 |
詞彙表包含 ID 的原因至關重要。當使用者輸入的文本被分詞器轉換後,實際輸入至模型的並非詞元本身,而是它們對應的 ID。例如,["What", "'re", " token", "s", "?"]
會被轉換成 [1001, 1002, 1003, 1004, 1005]
輸入模型。將詞元轉換為數值 ID 的主要原因在於,神經網路的底層運作基於大量的數學運算,而這些運算只能處理數字,無法直接處理符號或文字。
在詞元被轉換為詞元 ID 後,這些數值會進入語言模型的嵌入層(Embedding Layer)。嵌入層會將每一個詞元 ID 轉換成一個密集的、固定維度的數值表示,稱為嵌入向量(Embedding Vector)。這些嵌入向量旨在捕捉詞元之間的語意和關係。最終,輸入序列中所有詞元的嵌入向量會組合成一個張量(Tensor)。以 [1001, 1002, 1003, 1004, 1005]
為例,假設嵌入向量空間的維度是 64,它最終會形成一個形狀為 (5, 64)
的張量(Tensor),如下所示:
[
[0.6548761, 0.5097416, 0.6433363, 0.8687355, 0.0768908, ...],
[0.1873722, 0.0308064, 0.5898745, 0.8872957, 0.4930335, ...],
[0.3456789, 0.1234567, 0.9876543, 0.2345678, 0.8765432, ...],
[0.9123456, 0.7890123, 0.6543210, 0.5432109, 0.4321098, ...],
[0.1020304, 0.2030405, 0.3040506, 0.4050607, 0.5060708, ...]
]
總結
- 詞元(Token) 是語言模型處理文本的基本單位。使用者輸入的文本會先由分詞器(Tokenizer)切分成多個詞元,再輸入模型。
- 語言模型選擇詞元而非單一字元或完整單字,是為了提升語意豐富性、處理效率與彈性(詞彙表較小,可組合形成新單字),以及更好地處理新創詞彙(OOV)。
- 每個詞元在模型的詞彙表(Vocabulary)中都有一個獨特的 ID。這些 ID 會被轉換成嵌入向量(Embedding Vector),最終組合成張量(Tensor),作為神經網路的實際輸入,因為模型只能處理數字。