更新於 2025/01/23閱讀時間約 3 分鐘

AI說書 - 從0開始 - 303 | WordPiece Tokenization 介紹與偵測

我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。


WordPiece 和 Byte Pair Encoding (BPE) 一樣,以單個字符的詞彙表開始,這樣可以確保任何詞都能被 Tokenization,接著,訓練過程會構建 Subword,並使用優化過程來最小化 Subword 的數量。


當訓練過程完成後,Tokenizer 會將序列分解為其詞彙表中最長的單詞序列,那些不在原始單詞開頭的 Subword 會帶有前綴 "##",例如,“undo” 會被表示為 ["un", "##do"],請記住這一點,因為它有助於我們識別 WordPiece Tokenizer。


Tokenizer 對於訓練 Transformer 模型會有強烈的影響,選擇正確的 Tokenizer 往往會從一開始就決定模型的結果。


以下撰寫程式來分辨,Tokenizer 究竟是 WordPiece 還是 BPE:

import requests

!curl -L https://raw.githubusercontent.com/Denis2054/Transformers-for-NLP-and-Computer-Vision-3rd-Edition/main/Chapter10/merges.txt --output "merges.txt"
!curl -L https://raw.githubusercontent.com/Denis2054/Transformers-for-NLP-and-Computer-Vision-3rd-Edition/main/Chapter10/vocab.txt --output "vocab.json"

from transformers import RobertaTokenizer
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
vocab = tokenizer.get_vocab()
is_wordpiece = any(token.startswith('##') for token in vocab)

if is_wordpiece:
print("Tokenizer type: WordPiece")
else:
print("Tokenizer type: BPE")


結果為:


分享至
成為作者繼續創作的動力吧!
© 2025 vocus All rights reserved.