圖靈學院內的文章包含三大主題:ESG浄零實驗室、AI實驗室及精實管理實驗室,我們會不定期分享相關主題之文章,也歡迎並對前述主題有興趣的學員投稿分享您的見解  (我要投稿)

黃仁勳在台大演講中提到的Token:意義與操作

圖靈學院編輯部/2024年6月12日

 

 

    在2024年台北Computex期間,NVIDIA執行長黃仁勳在台大演講中提到了「token」這個概念,引起了廣泛的關注與討論。本文將深入探討token在不同背景下的意義,並介紹其在自然語言處理中的實際操作與數學模型。


Token的不同意義


1. 生成式AI中的token:
在黃仁勳的演講中,「token」是指文本、語音等資料分解成的最小單位,例如單詞或字符。這些token是生成式AI(Generative AI)用來理解和生成新內容的基礎。生成式AI的核心技術包括tokenization,即將文本分解成更小的單位以便進行分析和處理。
2. OpenAI API中的token:
在OpenAI的API中,「token」是一種計量單位,用於計算使用API所需的資源和費用。在這個情境下,每個token代表一小段文本,通常是幾個字符。API根據處理的token數量來計費,這強調的是API使用量的計量和計費機制。
Tokenization的操作過程與數學模型
Tokenization是自然語言處理(NLP)中將文本分割成更小單位的過程,這些單位被稱為token。這個過程對於文本分析和生成式AI非常重要。


操作過程


1. 文本輸入:輸入需要處理的文本。
2. 分詞:將文本按空格或標點符號分割成單詞或子詞。
例如:"The quick brown fox" 被分成 ["The", "quick", "brown", "fox"]。
3. 正規化:將文本轉換為統一格式,例如全部轉換為小寫,移除標點符號。
4. 子詞分割:對於複雜的詞語進一步分割成更小的子詞。
例如:"unhappiness" 被分成 ["un", "happiness"] 或 ["un", "happy", "ness"]。
5. 編碼:將token轉換為數字或其他機器可處理的格式,通常通過查找詞典或詞嵌入表來完成。
數學模型
Tokenization可以被描述為一個映射過程,將文本序列 T 轉換為token序列 {t1, t2, ..., tn}。
假設 T 是一段文本,ti 是第 i 個token,則tokenization過程可以形式化為:
T = {c1, c2, ..., cm} → {t1, t2, ..., tn}
其中 ci 代表文本中的字符或字符序列。
Byte Pair Encoding (BPE) 算法
Byte Pair Encoding (BPE) 是一種常見的子詞分割方法,基於詞頻統計,將常見的詞組合成新的token,減少詞典大小。以下是一個簡單的BPE算法示例:

from collections import Counter

def byte_pair_encoding(text, num_merges):
    # 初始化詞典

tokens = text.split()
    vocab = Counter(tokens)

    for _ in range(num_merges):
        # 找到最頻繁的字符對
        pairs = Counter()
        for word, freq in vocab.items():
            symbols = word.split()
            for i in range(len(symbols)-1):
                pairs[symbols[i], symbols[i+1]] += freq
        if not pairs:
            break
        best_pair = pairs.most_common(1)[0][0]
        # 合併最頻繁的字符對
        new_vocab = {}
        bigram = ' '.join(best_pair)
        for word in vocab:
            new_word = word.replace(bigram, ''.join(best_pair))
            new_vocab[new_word] = vocab[word]
        vocab = new_vocab
    return vocab

text = "low lower lowest low lower lowest low lower lowest"
num_merges = 5
vocab = byte_pair_encoding(text, num_merges)
print(vocab)

 

結論
在理解生成式AI和自然語言處理時,token和tokenization是關鍵概念。它們在不同的背景下有不同的應用意義和操作方法。通過對這些概念的深入了解,我們可以更好地把握AI技術的核心,並應用於實際的技術開發和研究中。
如果你對生成式AI或NLP的相關技術有興趣,推薦進一步了解Byte Pair Encoding (BPE)等具體算法,這將有助於你更深入地掌握這些技術的運作原理

 

參考資料
- [Understanding Tokenization in NLP]
- [Byte Pair Encoding Explained]