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

AI說書 - 從0開始 - 307 | Token ID 映射品質管控

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


想要控管 Token ID 映射的品質,有鑑於此,先定義,先定義 Tokenizer:

model_name = 'bert-base-uncased' 
tokenizer = BertTokenizer.from_pretrained(model_name)


接著定義一個函數,依據輸出來判斷是否為 Subword:

def tokenize_word(word):
tokens = tokenizer.tokenize(word)
if len(tokens) == 1 and tokens[0] == word:
process = "Direct"
else:
process = "Subword"

print("Word:", word)
print("Tokenized Tokens:", tokens)
print("Tokenization Process:", process)


接著定義一個小部件來輸入 Word:

word_input = widgets.Text(description = 'Enter a Word:')
display(word_input)


再定義一個 Event Handler:

def on_button_click(b):
word = word_input.value
tokenize_word(word)


最後再配置一個開關:

button = widgets.Button(description = "Tokenize")
button.on_click(on_button_click)
display(button)


測試結果為:


詞元 "am" 在 "amoeboid" 中帶來了多義性問題 (即相同序列具有多種含義),"am" 可以是前綴,也可以是像 "I am" 這樣的單詞,或是像 "am + bush" 中的子詞,注意力層可能會將一個詞元中的 "am" 與另一個 "am" 相關聯,從而創造出不存在的關係,複雜單詞中的多義性是一個具有挑戰性的問題。


我們可以看到,即使是 Subword Tokenizer 也可能在處理罕見和複雜詞彙時遇到問題,這些詞可能在訓練數據集中不常見,導致它們被低估,然而,這些詞在醫學或法律文件中可能至關重要。

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