C006|如何編寫一個完整的Python符元化類 Tokenizer Class?

更新於 2024/06/17閱讀時間約 4 分鐘

在Python中,


要寫一個完整的「符元化類 Tokenizer Class」,


這個Class需要的功能有:


1.「編碼 Encode」:將「文本 Text」分割成「符元 Token」。

2.「詞彙 Vocabulary」:將「符元 Token」映射到「符元ID TokenID」的「文本對整數映射 String-to-Integer Mapping」

3.「解碼 Decode」:將「符元ID TokenID」轉換為「文本 Text」的「整數對文本映射 Integer-to-String Mapping」


如此,


就完成了「文本 Text」--> 「符元 Token」--> 「符元ID TokenID」--> 「文本 Text」的循環,


這就是為什麼訓練資料中的文本,


可以透過GPT的結構,轉回AI生成的文本的整個循環。


具體的Python code如:

```python

class SimpleTokenizerV1:

def __init__(self, vocab):

self.str_to_int = vocab

self.int_to_str = {i:s for s,i in vocab.items()}

def encode(self, text):

preprocessed = re.split(r'([,.?_!"()\']|--|\s)', text)

preprocessed = [

item.strip() for item in preprocessed if item.strip()

]

ids = [self.str_to_int[s] for s in preprocessed]

return ids

def decode(self, ids):

text = " ".join([self.int_to_str[i] for i in ids])

# Replace spaces before the specified punctuations

text = re.sub(r'\s+([,.?!"()\'])', r'\1', text)

return text

```


可以看到,在`SimpleTokenizerV1`這個類的「構建子 Constructor」,


設置了「文本到整數」的映射,是輸入的「詞彙 Vocabulary」,


也設置了「整數到文本」的映射,是透過查詢「詞彙 Vocabulary」來轉回文本。


而「編碼函數 def encode」將輸入的文本先切成一個一個的「符元 Token」,


接著透過詞彙來查這些Token的ID。


而「解碼函數 def decode」將給定的一串「符元 ID Token ID」,


也是透過詞彙來轉回文本。


實際使用的例子,看起來會像是


```python

tokenizer = SimpleTokenizerV1(vocab)

text = """"It's the last he painted, you know,"

Mrs. Gisburn said with pardonable pride."""

ids = tokenizer.encode(text)

print(ids)

```

則會得到一串Token ID

```

[1, 56, 2, 850, 988, 602, 533, 746, 5, 1126, 596, 5, 1, 67, 7, 38, 851, 1108, 754, 793, 7]

```

而這串Token ID 可以透過Decoder再轉回文本

```

tokenizer.decode(ids)

```

得到結果

```

'" It\' s the last he painted, you know," Mrs. Gisburn said with pardonable pride.'

```


如此,有足夠豐富的Vocabulary,就能各種文本都能學習與產生。

avatar-img
528會員
1.8K內容數
Outline as Content
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
王啟樺的沙龍 的其他內容
2024年6月9日星期日, 這個週末我調整了一個GPTs, 幫助我將500-1000字的英文文章, 逐句翻譯, 並根據內文結構標記副標題。 這大大的改變我閱讀原文書的方式。 雖然來美國已經要滿七年, 但對於那種300頁, 美國作者寫的nonfictio
在洛杉磯這座繁忙的城市裡,通勤往往需要花費不少時間。即便是從家裡到UCLA這短短的40-50分鐘,也可以充分利用起來,提高一天的效率。以下是一些具體的方法,幫助你充分利用這段時間。 ▋利用零碎時間 在等待公車的3-10分鐘,我會用Day One Journal App錄音,記錄當下的想法
到了美國這個多元文化的社會後, 我深深的感覺到1990-2000出生的, 我這一代的台灣人, 其文化累積非常日本。 我這一代的台灣男生成長的過程裡, 國小看的是日本動畫, 如海賊王,神奇寶貝,數碼寶貝, 玩的是神奇寶貝紅寶石藍寶石版。 國中看的還是日本
對於像我這樣在職涯過程中沒花太多時間找工作的人來說, 這篇文章可能會讓你受益。 你將學到如何在每個職涯轉折點上, 利用正確的心態, 實現順利過渡和成功。 以下是我在職涯中不斷重生的3個關鍵心態。 ▋心態1 - 接受挑戰並勇於歸零 回顧我的學習和工作經歷,
為了將輸入文本轉換成深度學習模型可以使用的嵌入向量, 我們需要先將「輸入文本 Input Text」轉為「符元化文本 Tokenized Text」。 而實際上「符元化文本 Tokenized Text」與「嵌入向量 Embedding Vector」之間, 還有一個步驟稱為「符元
記得我在碩二的時候看Paper, 都會想說這些Paper好強, 怎麼都有這麼「新穎的點子」! 後來我發現,點子是不是真的新, 你需要去問一個很關鍵的問題: 「這個點子,是對你的知識面很新, 還是說對整個領域來說很新?」 如果是對你的知識面很新, 那你要
2024年6月9日星期日, 這個週末我調整了一個GPTs, 幫助我將500-1000字的英文文章, 逐句翻譯, 並根據內文結構標記副標題。 這大大的改變我閱讀原文書的方式。 雖然來美國已經要滿七年, 但對於那種300頁, 美國作者寫的nonfictio
在洛杉磯這座繁忙的城市裡,通勤往往需要花費不少時間。即便是從家裡到UCLA這短短的40-50分鐘,也可以充分利用起來,提高一天的效率。以下是一些具體的方法,幫助你充分利用這段時間。 ▋利用零碎時間 在等待公車的3-10分鐘,我會用Day One Journal App錄音,記錄當下的想法
到了美國這個多元文化的社會後, 我深深的感覺到1990-2000出生的, 我這一代的台灣人, 其文化累積非常日本。 我這一代的台灣男生成長的過程裡, 國小看的是日本動畫, 如海賊王,神奇寶貝,數碼寶貝, 玩的是神奇寶貝紅寶石藍寶石版。 國中看的還是日本
對於像我這樣在職涯過程中沒花太多時間找工作的人來說, 這篇文章可能會讓你受益。 你將學到如何在每個職涯轉折點上, 利用正確的心態, 實現順利過渡和成功。 以下是我在職涯中不斷重生的3個關鍵心態。 ▋心態1 - 接受挑戰並勇於歸零 回顧我的學習和工作經歷,
為了將輸入文本轉換成深度學習模型可以使用的嵌入向量, 我們需要先將「輸入文本 Input Text」轉為「符元化文本 Tokenized Text」。 而實際上「符元化文本 Tokenized Text」與「嵌入向量 Embedding Vector」之間, 還有一個步驟稱為「符元
記得我在碩二的時候看Paper, 都會想說這些Paper好強, 怎麼都有這麼「新穎的點子」! 後來我發現,點子是不是真的新, 你需要去問一個很關鍵的問題: 「這個點子,是對你的知識面很新, 還是說對整個領域來說很新?」 如果是對你的知識面很新, 那你要
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
ITS python認證內容含蓋六大主題
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
ITS python認證內容含蓋六大主題
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。