【2025 夏日精選-4.5】解析文字的分詞器-Tokenizer (補)

更新 發佈閱讀 5 分鐘
上一篇只講了 Tokenizer 最快的用法,但仔細想想還是寫得再詳細一點好了

昨天的 tokenizer() 可以將一串句子變成電腦看得懂的編碼,但他其實包含三個動作

  1. 將句子拆分成一個一個字詞
  2. 將字詞轉換成編碼
  3. 添加 Special Token

這篇就一步一步慢慢走,解釋一下 tokenizer 底下的一些方法,也來試試上一篇底下提過的中文模型 bert-base-chinese

from transformers import AutoTokenizer

string = "臣本布衣,躬耕於南陽,苟全性命於亂世,不求聞達于諸侯。"
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

將句子拆分成字詞:.tokenize()

word = tokenizer.tokenize(string)
print(word)
# ['臣', '本', '布', '衣', ',', '躬', '耕', '於', '南', '陽', ',', '苟', '全', '性', '命', '於', '亂', '世', ',', '不', '求', '聞', '達', '于', '諸', '侯', '。']

插播一下,如果用的是英文,會發現模型的分詞器不是單純靠 空格 去區分每個詞,像transformer就會分為 transform##er,這個分詞法稱為 Subword Tokenization有興趣的朋友可以看這一篇,我覺得解釋得很詳細

將字詞轉換成編碼:.convert_tokens_to_ids()

id = tokenizer.convert_tokens_to_ids(word)
print(id)
# [5628, 3315, 2357, 6132, 8024, 6717, 5449, 3176, 1298, 7382, 8024, 5732, 1059, 2595, 1462, 3176, 748, 686, 8024, 679, 3724, 5472, 6888, 754, 6328, 908, 511]

會發現他只是很單純的把每個字轉成對應的編碼,並沒有標示句子開頭的 [CLS] 跟結尾的 [SEP],所以要用另外一個方法把這些 Special Token 加進去

添加 Special Token:.prepare_for_model()

token = tokenizer.prepare_for_model(id)
print(token)
# {'input_ids': [101, 5628, 3315, 2357, 6132, 8024, 6717, 5449, 3176, 1298, 7382, 8024, 5732, 1059, 2595, 1462, 3176, 748, 686, 8024, 679, 3724, 5472, 6888, 754, 6328, 908, 511, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}​

你會發現跟昨天的輸出結果一模一樣,因為他就是將編碼串轉換成適合輸入到模型的樣子

解碼還原:.decode()

orignal = tokenizer.decode(token['input_ids'])
print(orignal)
# [CLS] 臣 本 布 衣 , 躬 耕 於 南 陽 , 苟 全 性 命 於 亂 世 , 不 求 聞 達 于 諸 侯 。 [SEP]

其實只要做到上一步就好了,畢竟沒有必要好不容易編碼完,又再解碼回去

這邊要注意的是,因為上一步輸出的是字典,所以要指定 input_ids 這個 key 的 value

總整理

  • .tokenize():將句子拆分成字詞
  • .convert_tokens_to_ids():將字詞轉換成編碼
  • .prepare_for_model():添加 Special Token
  • 上一篇用到的 tokenizer() 就是以上三個方法的集合體
  • .decode():解碼還原

喜歡我的內容也請幫我按個讚喔~非常感謝🥹

留言
avatar-img
留言分享你的想法!
avatar-img
の倉的程式小天地
6會員
32內容數
熱愛做志工的大學生 誤打誤撞跑去讀資管系 既然來到了資管系,那就學習新技能來幫助他人
2025/07/13
今天要講的是 Hugging Face 貼心準備的工具包,歸屬在 Transformers 中的 Tokenizer (分詞器)
Thumbnail
2025/07/13
今天要講的是 Hugging Face 貼心準備的工具包,歸屬在 Transformers 中的 Tokenizer (分詞器)
Thumbnail
2025/07/13
電腦沒辦法理解人類的語言,所以需要先將文字轉換成電腦能讀懂的數字,而我們不可能把一整句話直接編碼,例如:"I love you."=1、"I love him."=2...,這樣編碼到最後會變成天文數字,所以在那之前我們需要先將一句話分成最小單位,也就是「詞」
Thumbnail
2025/07/13
電腦沒辦法理解人類的語言,所以需要先將文字轉換成電腦能讀懂的數字,而我們不可能把一整句話直接編碼,例如:"I love you."=1、"I love him."=2...,這樣編碼到最後會變成天文數字,所以在那之前我們需要先將一句話分成最小單位,也就是「詞」
Thumbnail
2025/07/09
上一篇有提到過「寫一行就能使用模型的封裝工具包 pipeline」,至於為什麼他可以寫一行就解決呢?真的有那麼神嗎?
Thumbnail
2025/07/09
上一篇有提到過「寫一行就能使用模型的封裝工具包 pipeline」,至於為什麼他可以寫一行就解決呢?真的有那麼神嗎?
Thumbnail
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們在AI說書 - 從0開始 - 42中,見識了 Tokenizer 做的事情了,以下來羅列幾個要點: 它將原始文字轉成小寫 有可能將原始文字再進行切割 通常 T
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們在AI說書 - 從0開始 - 42中,見識了 Tokenizer 做的事情了,以下來羅列幾個要點: 它將原始文字轉成小寫 有可能將原始文字再進行切割 通常 T
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 中的 Attention 機制是 'Word-to-Word' 操作,抑或是 'Token-to-Token' 操作,白話來講就是:「對於句子中
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 中的 Attention 機制是 'Word-to-Word' 操作,抑或是 'Token-to-Token' 操作,白話來講就是:「對於句子中
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
透過適當的語言和文字表達,人們可以溝通訊息和態度。轉折詞的運用和標點符號的使用會影響溝通的準確性和情緒表達。
Thumbnail
透過適當的語言和文字表達,人們可以溝通訊息和態度。轉折詞的運用和標點符號的使用會影響溝通的準確性和情緒表達。
Thumbnail
這個系列的文章希望讓大家能夠學習一些語言學的概念,並且利用它們更有效率地學習各種語言。在文法篇的部分,希望大家瞭解有關語言使用的規則,讓大家能夠更輕鬆地去學習一個語言。前面已經介紹語言的基本語序、修飾語序,瞭解每個語言都又不同的排列規則後,我們就可以開始學習一個語言要如何表達一個完整句子。
Thumbnail
這個系列的文章希望讓大家能夠學習一些語言學的概念,並且利用它們更有效率地學習各種語言。在文法篇的部分,希望大家瞭解有關語言使用的規則,讓大家能夠更輕鬆地去學習一個語言。前面已經介紹語言的基本語序、修飾語序,瞭解每個語言都又不同的排列規則後,我們就可以開始學習一個語言要如何表達一個完整句子。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News