Token and Pattern | 模 與 樣
應該是從大型語言模型(LLM)出來之後,我才開始一直在思考Token這件事。
我最一開始誤解了,我以為Token是意義的最小單位。
而當我慢慢再多了解一點之後,才發現Token只不過是一個代號,將內容切分成可以分別辨識的顆粒度。
隨手打開Apple的字典,裡面寫著
token
| noun
- symbolA small thing that you use to show something else
而其切分的方式,並不像是ASCII定義著每個字符的代號,讓每一台認得ASCII的電腦可以查表辨識,而是根據每個LLM各有的方式切分。
例如OpenAI有提供Tokenizer讓你嘗試,或者你可以找到類似這種工具比較不同模型切Token的方式
例如:
Hello World! → [Hello][ World][!]
你好嗎 → [你好][嗎]
而如果你想再深入一些,非常推薦Andrej Karpathy的介紹影片。
最開始我誤解的是,以為每個Token是根據意義去切分的,例如說 [你好] 在這個情境裡,不是被切成 [你] [好],會讓我覺得有趣。但其實,讓我訝異的是,工程師們只想找到一個有效率可以代表內容的方法。
這讓我開始用一個新的角度去想,原來:
Token本身沒有意義
或者說:
Token的意義來自於處在的Context之間的關係
這一個思考角度的轉變有點像是海德格(Heidegger)在思考「存在」的角度轉變。
相對於站在一個完全客觀的角度去思考某個獨立存在的個體(Entity),海德格在思考的是關於那個「存在」(Being)的意義。這個存在是在形容那個關係本身,也像是在敘說那個Token存在某個Context的時候湧現的意義,就是那個存在。
寫到這邊,我發現這段有點難以解釋,希望之後有篇幅在慢慢深入,在我一邊學習的過程中。
來舉個例子吧
請試著念出以下兩行字👇
Coren S, Porac C, Ward LM 1979 Sensation and Perception. Harcourt Brace and Company (p368)
我相信可以很輕易地唸出 A,B,C,D,E,F 以及 10,11,12,13,14。
而當我們在仔細看一下,在圖片中的B以及13是完全一樣的圖片。
在這個範例之中,B/13就是Token,而它本身的意思是由Context決定的。
在無意識的便是過程當中。我們的腦迅速的將
上行的形狀辨識成B
下行的形狀辨識成13
完全不需要耗費額外的思考力氣,彷彿那個Token有著自己的意義一樣。
但是,意義真的被固定了嗎,還是應該說,只是我們的腦自動的選擇了最高機率的意義呢?(簡直就像是大型語言模型一樣)
如果一個Token有固定意義,那在下面的圖片中,到底他是什麼呢?
當我嘗試看著這個圖片的時候,中間的形狀的意義不斷地在 B/13 之間切換著,
就像是腦子一定要指定一個最高機率的意義一樣。
到這裡可以看到這一個Token可以有多個意義,而這個意義存在於與上下/前後文(Context)的關係之中,而這個關係就讓我想到了海德格的「ready-to-hand」的概念,或者如果你是設計背景,可能更了解吉布森(James J. Gibson)的Affordance的概念。
Token → Entity - 那個客觀存在的
Meaning → Being - 那個從處在的Context裡湧現的
而我們在閱讀的時候,為什麼會自動有辦法感受到意義,是因為我們隨時都在這個世界裡,像是海德格的「Being-in-the-world」,我們隨時都帶著自己的背景知識,自己的視角去看待這個世界,而這些就是你在觀看的時候的Context。
再次回到這個Just Grip的系列文章的主題,我想要找到一個可以具體溝通抽象概念的方式,而討論Token是其中一個不可排除的第一步。
文章過了一半,我們還沒有討論到標題上的第二個字,Pattern。
我一直在想中文用什麼字去形容Token和Pattern最恰當,也許可以使用:
Token → 模
Pattern → 樣
Token就像是每個單元基礎的零組件,像是樂高一樣,而拼湊出來的車子就是Pattern。
從「模」建構有了「樣」
但Pattern不只是視覺上的,不同的聲音節奏就是由音符Token組成的Pattern,
在頻率變化之間;在不斷重複之間。
而LLM的Multi-modal就需要能夠將各種不同的Input拆解成能夠一起被理解的Token,讓它們能自由在彼此的Context之間找到意義。對於LLM來說,他的Context就是在於那個高維空間裡。
重新回到B/13,其實對我們的視覺來說,他已經是個Pattern,在圖像上,他就是個左邊有一條細長垂直長方形,而右邊有兩個向左開口的半圓弧線。我們學習過可能是B或者是1和3。
對於語言模型來說,Token很好定義,但對於我們人來說,卻是更細微並且沒有直接定義的。
最有趣的是當我們看著天空中的雲朵,各種想像會自然地浮現。
圖片的Token應該怎麼去理解,對於我來說好難想像。
但在與OpenAI與Google的圖像生成的模型互動的過程中,
我感覺到現在的大型模型已經可以很好的支援不同Input的轉換。
就像是人類一樣,我們認識這個世界的方式,就是混合了各種不同的Input一起理解的。
咖啡的顏色以及味道,家人朋友的樣子和聲音,金屬的冰冷觸感以及聲響。
在學習大型語言模型相關知識的過程中,
我也更理解自己作為人認識這個世界的方式。
關於模(Token)與樣(Pattern)的主題,還有很多可以深入的部分,
但我想在這篇文章中大概觸及了一部分。
最後,我想分享最近用Claude Code製作的一個互動故事網頁:
You can also find the English ver. if you prefer.
持續學習💪