從文字到向量:NLP 向量化與 Token 的演進
從 Bag-of-Words 一路談到 Transformer,理解「文字向量化」這條關鍵演化之路。
從文字到向量:NLP 向量化與 Token 的演進
這篇是「LLM 核心原理」系列的第一篇。
在這個系列裡,我們從最基礎的問題開始:文字是怎麼變成模型可以計算的東西?
再走到注意力機制、Transformer 架構,最後理解大語言模型如何生成回應。
這條路上有幾個關鍵節點:詞嵌入、位置編碼、注意力、多頭注意力、前饋神經網路、自回歸生成。
但在拆解這些節點之前,我們需要先回答一個更根本的問題:
為什麼文字不能直接丟給模型?
一、為什麼文字不能直接丟給模型?
電腦擅長的是數字運算,不是文字本身。
對模型來說,「蘋果」這兩個字沒有直接意義,它必須先被轉換成一個或多個數值向量,才能進行數學運算。
但這裡有個核心難題:
- 文字是離散符號:每個詞看起來彼此獨立。
- 語言是有順序的:「我愛你」和「你愛我」順序相反,意思卻完全不同。
- 語意是依賴上下文的:「蘋果」在「我喜歡吃蘋果」和「我買了蘋果手機」中,指的不是同一件事。
因此,文字向量化的目標不只是「把字變成數字」,而是要把語意、順序與上下文盡可能保留下來。
這條演化路線,大致可以分成三個階段:
- 基於統計的表示法:詞袋法、TF-IDF
- 神經網路與語意嵌入:Word2Vec
- 動態上下文與深度學習:Transformer、BERT、GPT
接下來,我們先從第一階段開始。
二、第一階段:基於統計的表示法
1. 詞袋法(Bag-of-Words, BoW)
最早的作法很直覺:把一段文字看成一個「袋子」,裡面裝了哪些詞。
模型只記錄每個詞是否出現,或出現幾次,完全不考慮詞的順序。
例如:
- 句子 A:我 愛 你
- 句子 B:你 愛 我
在詞袋法眼中,這兩句可能一模一樣,因為它們都包含「我、愛、你」三個詞,只是順序不同。
這種方法簡單,但缺點非常明顯:
- 忽略詞序
- 向量非常稀疏
- 無法理解語意相似性
- 詞彙表一大,維度就爆炸
2. TF-IDF
接下來出現了 TF-IDF(Term Frequency-Inverse Document Frequency)。
它不只統計詞在單篇文件中出現的頻率,還加入「這個詞有多稀有」的權重。
常見公式可以寫成:
其中:
- :詞 在文件 中出現的頻率
- :文件總數
- :包含詞 的文件數量
這樣一來,像「的」、「是」、「在」這類高頻但沒什麼辨識度的停用詞,權重會降低;而「量子」、「通膨」、「演算法」這種具有代表性的詞,權重會提高。
TF-IDF 比詞袋法更能抓到關鍵詞,但它仍然有一個根本限制:
它只知道詞出現得多不多,卻不知道詞與詞之間的語意關係。
三、第二階段:從統計走向語意(簡介)
統計方法解決了「把文字變成數字」的問題,但沒有解決「語意」的問題。
後來的 Word2Vec 帶來了關鍵突破:它把詞彙映射到一個稠密、低維的向量空間中。
在這個空間裡,語意相近的詞會靠得比較近。
最經典的例子是:
這代表模型學到的不只是共現統計,而是某種語意結構。
不過,Word2Vec 有一個根本限制:它產生的詞向量是靜態的,同一個詞永遠對應同一個向量。
這無法處理「一詞多義」,也無法根據上下文動態調整語意。
這些細節,我們會留到下一篇深入拆解。
四、Token:文字進入模型前的最小單位
在文字變成向量之前,還有一個重要步驟:Tokenization(分詞)。
模型並不是直接處理「一個詞」或「一個字」,而是處理 Token。
Token 可以是:
- 一個完整的詞,例如
apple - 一個子詞,例如
Ap+ple - 一個標點符號
- 甚至一個單獨的字元
為什麼要用子詞?
因為如果完全以「詞」為單位,詞彙表會爆炸,而且遇到沒看過的新詞就無法處理。
子詞切分可以在「詞彙表大小」與「未知詞處理」之間取得平衡。
常見的分詞方法包括:
- BPE(Byte Pair Encoding)
- WordPiece
- SentencePiece
分詞完成後,每個 Token 會得到一個整數 ID。
但整數 ID 本身沒有語意,所以還要進一步轉成向量。
流程大致如下:
原始文字:我喜歡蘋果
↓
分詞:我、喜歡、蘋、果 或類似切分
↓
Token ID:例如 [102, 345, 678, 910]
↓
One-Hot 編碼:每個 ID 變成一個只有對應位置為 1 的稀疏向量
↓
乘上嵌入矩陣:得到稠密的詞元向量
這個過程本質上像是「查表」,但在實作中是以可導的矩陣相乘完成,因此可以透過反向傳播持續優化。
至於嵌入矩陣怎麼運作、為什麼能捕捉語意,我們會在下一篇詳細解釋。
五、下一步:語意與順序
到這裡,我們已經把文字變成了 Token,也知道 Token 會進一步轉成向量。
但還有兩個關鍵問題沒回答:
- 語意:模型怎麼知道「蘋果」和「香蕉」比較近?
- 順序:模型怎麼知道「我愛你」不等於「你愛我」?
這兩個問題,分別對應到兩個關鍵技術:
- 詞嵌入(Word Embedding)
- 位置編碼(Positional Encoding)
下一篇,我們就會把這兩個部分補齊。
六、總結:從離散文字到連續向量的第一步
這一篇我們走了文字向量化的前半段路:
- 詞袋法:只看詞有沒有出現
- TF-IDF:加入詞的稀有性與代表性
- Tokenization:把文字切成模型能處理的最小單位
- Token ID → One-Hot → 嵌入矩陣:文字進入模型前的標準流程
這條路的本質,是從「字面統計」走向「語意理解」的第一步。
而下一步,就是讓模型真正理解「詞的意思」與「詞的順序」。
下一篇預告
《詞嵌入與位置編碼:模型如何理解語意與順序》
我們會解釋:
- 嵌入矩陣如何把 Token ID 變成稠密向量
- Word2Vec 如何讓語意變成空間中的距離
- 為什麼靜態詞向量不夠,需要動態上下文嵌入
- 位置編碼如何讓模型理解詞序
- 從絕對位置到相對位置(RoPE、ALiBi)的技術演進