###### tags: `大語言模型` `AI` `Agent` `核心概念大串聯` # 第一篇:語言模型的基石 — LLM 與 Token > **系列**:AI 核心概念大串聯 | [返回總覽](https://hackmd.io/@TommyHuang/ByDQ96dcZx) | 下一篇:[Context 與 Context Window →](https://hackmd.io/@TommyHuang/SkiIsT_qbe) --- ## 一、LLM 是什麼? **LLM(Large Language Model,大型語言模型)** 是一種以海量文字資料訓練而成的 AI 模型,核心能力是「預測下一個詞」。 聽起來很簡單,但這個能力在足夠規模之後,會湧現出令人驚訝的能力:推理、寫程式、翻譯、摘要、對話…… ### LLM 的本質:機率預測機器 ``` 輸入:「今天天氣很好,我想去」 輸出:「公園」(機率最高的下一個詞) ``` LLM 不是查資料庫,也不是執行規則。它是透過學習數十億個句子後,建立起對語言模式的「直覺」,每次輸出都是一個機率分佈的採樣。 ### 常見的 LLM | 模型 | 開發者 | |------|--------| | GPT-4o | OpenAI | | Claude 3.5 / Claude 4 | Anthropic | | Gemini | Google | | Llama 3 | Meta(開源) | --- ## 二、Token 是什麼? LLM 不是以「字」或「詞」為單位來處理文字,而是以 **Token(詞元)** 為單位。 ### 電腦看得懂文字(中文/英文/日文/…)? 電腦內有不同編碼:ASCII、Big5、Unicode、Base64 把文字轉換成數字給電腦看得懂。 例如: 編碼: ASCII ![image](https://hackmd.io/_uploads/r1nu6tQhZe.png) 所有的文字對於電腦來說就是一個符號而已。 所以在LLM中他有自己獨特的方法來對所有的文字進行編碼,這個過程根據你訓練的資料庫有關,所以當我資料庫只有100個字,我的編碼可能就只有100個,如下圖, ![image](https://hackmd.io/_uploads/rkTX0Y7hZl.png) 我們也許可以學出一個字典 ``` 「A」這個符號在電腦在看就是數字2 「你」這個符號在電腦在看就是數字101 「好」這個符號在電腦在看就是數字102 ``` |符號|字典|Tokenization ID| |:-|:-|:-| |A|A|2| |B|B|3| |...|...|...| |你|你|101| |好|好|102| |?|?|103| 電腦在說你好的概念就是「101」、「102」 電腦說「101」「102」要翻成人類可以看得懂的情形就是要找到上面那個表格當翻譯蒟蒻,也就是decode解碼 ``` 「101」「102」→翻譯蒟蒻(表格)→你好 ``` 所以在用大量數據訓練的過程就是要產出Tokenization的方法,所以熟一點的人都知道在Token部分不同方法用的Tokenization都不一樣,後面有範例。 ### Token ≠ 字,也 ≠ 詞 Token 是模型處理文字的最小單位,由訓練時的**分詞演算法(Tokenizer)** 決定。 ``` 英文範例: "Hello, world!" → ["Hello", ",", " world", "!"] → 4 tokens 中文範例: "你好世界" → ["你好", "世界"] → 2 tokens(視模型而定) 程式碼範例: "def hello():" → ["def", " hello", "():"] → 3 tokens ``` 大家在看上面覺得不就英文分詞,中文分字或是詞來切就好了嗎? ``` 「我是黃志勝」 這句話可以切成 → “我”、“是”、“黃”、“志”、“勝” → “我是”、“黃志勝” → “我”、“是”、“黃”、“志勝” 這三個哪個比較好????? How are you? → “H ”、“o”、“w”、“a “、“r”、“e”、“y”、“o”、“u”、“?” → “How ”、“are”、“you”、“?” 哪個比較好????? ``` 我們有提到要是"視模型而定",原因是切token的方法很吃你收集來訓練的資料庫 大家可以去https://platform.openai.com/tokenizer 看ChatGPT不同代的切詞結果,切詞演算法就不在今天討論的範疇內。 我分別用GPT-5和GPT-3進行Token給大家看, ``` 範例是 你好我是黃志勝 GPT-5產出是5個Tokens,分別是「你好」「我是」「黃」「志」「勝」 GPT3產出是14個Tokens,分別是「?」「?」「?」「?」「?」「?」「是」「?」「?」「?」「?」「?」「?」「?」。 請自行到上面網頁測試看看 ``` 為什麼出現麼多? - 原因訓練資料並沒有編碼中文,也就是GPT3的字典沒有這麼多中文字影響的。 - 拚字打錯還有辦法在電腦找到編碼嗎 |符號|GPT3 token|GPT3 Tokenization ID| |:-|:-|:-| |Book|Book|10482| |is|is|271| |good|good|11274| |recognition|"recogn","ition"|[26243, 653]| |11737|"117", "37"|[17657, 2718]| |ggyy|"ggy","y"|[19970, 88]| |boook|"bo","ook"|[2127, 566]| recognition會被拆成"recogn"和"ition"兩個token,是因為訓練資料類似的字ition很多,在Subword的拆詞方法(例如Byte Pair Encoding (BPE)),會被拆出來。 大家有發現ggyy和boook會被拆成兩個token,因為這兩個不是真的英文單字,所以也是依據Subword的拆詞方法拆成兩個token。 下面有放上簡單的單字teacher,在GPT3和GPT-4的tokenizer結果就不太一樣 ![image](https://hackmd.io/_uploads/H1PdKqQnZx.png) 所以訓練資料越來越大,tokenizer就會跟著改變。 ### 為什麼 Token 很重要? 1. **成本計算**:API 費用以 token 數量計費(輸入 token + 輸出 token) 2. **速度影響**:token 數越多,生成越慢 3. **容量限制**:模型能處理的最大 token 數有上限(這就是 Context Window,後篇詳述) ### Token 的直覺估算 | 語言 | 估算規則 | |------|----------| | 英文 | 1 個單字 ≈ 1.3 tokens | | 中文 | 1 個漢字 ≈ 1–2 tokens | | 程式碼 | 比自然語言用更多 token | --- ## 三、LLM 與 Token 的關係 ``` 你輸入的文字 ↓ Tokenizer(分詞) ↓ [Token][Token][Token]...(數字 ID 序列) ↓ LLM 處理(向量運算) ↓ [Token][Token][Token]...(預測輸出) ↓ Detokenizer(反分詞) ↓ 你看到的輸出文字 ``` LLM 從頭到尾只看到「數字序列」,而非你眼中的文字。Token 就是人類語言與模型數學世界之間的橋樑。 --- ## 四、重點整理 - **LLM** = 以預測下一個 token 為核心訓練的大型語言模型 - **Token** = 模型處理文字的最小單位,非字非詞 - Token 影響:**費用、速度、容量上限** - LLM 的「理解」本質上是對 token 序列的機率運算 --- > 下一篇:[第二篇 — 模型的記憶與視野:Context 與 Context Window →](https://hackmd.io/@TommyHuang/SkiIsT_qbe)