Articles in Turing Academy cover three major themes: ESG Net Zero Laboratory, AI Laboratory and Lean Management Laboratory. We will share articles on related topics from time to time. We also welcome students who are interested in the above topics to submit articles and share them with you. Insights (I want to contribute)

黃仁勳在台大演講中提到的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]