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

閱讀時間約 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,就能各種文本都能學習與產生。

357會員
869內容數
Outline as Content
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
C計算(一)高中數學主題練習—C計算(一)
Thumbnail
avatar
WilliamP
2024-04-07
《C.A.G.E》照夜白/圖 貓落/文 一場廢盡千辛萬苦的圖文集 --《漠視錄》 《C.A.G.E》 別看了 是嗎.. 像是牢籠嗎? 如何向內擁抱都有個極限 最後會停在 自身 一個 單位 太多了已經
Thumbnail
avatar
照夜白
2024-03-28
C 台灣的新創團隊 如果想要使用以太坊技術 來營利同時做公益慈善 可以發展那些專案C 台灣的新創團隊 如果想要使用以太坊技術 來營利同時做公益慈善 可以發展那些專案 #VitalikButerin #ETHTaipei2024 #ETHTaipeiHackathon2024 ... (好的顧問導師教練 協助妳提早得到幸福 更快實現夢想 幸福課程
avatar
leader
2024-03-24
C如何找到和確認誰是真正該被幫助的善良弱勢? 如何找到和確認真正在做對的事的公益慈善? 如何查核公益慈善的正職和志工 避C如何找到和確認誰是真正該被幫助的善良弱勢? 如何找到和確認真正在做對的事的公益慈善? 如何查核公益慈善的正職和志工 避免有用善心的人做的很累 混水摸魚的卻可以領到薪水拿到時數證明? 幸福教練黃老師 潮資訊媒體 找到和確認真正需要幫助的善良弱勢 以及評估公益慈善的正確性和透明
avatar
leader
2024-03-16
c女生在高中 高職 大學 如果想參加各種科技新創 社會創新 永續設計等等相關比賽 應該主動學習和培養 哪些知識和技能c女生在高中 高職 大學 如果想參加各種科技新創 社會創新 永續設計等等相關比賽 應該主動學習和培養 哪些知識和技能 幸福教練黃老師 潮資訊媒體 參加科技新創、社會創新以及永續設計等相關比賽, 女生在高中或高職階段 可以主動學習和培養以下知識和技能: 程式設計和編程
Thumbnail
avatar
leader
2024-03-08
C型肝炎:症狀、治療、預防、中醫觀點C型肝炎是由C型肝炎病毒感染引起的疾病,常見症狀包括疲倦、食慾不振、噁心、腹部不適等。文章介紹了C型肝炎的傳染方式、感染風險族群以及預防方法。此外,也提供了西醫和中醫對C型肝炎的治療方法和常用中藥的介紹。
Thumbnail
avatar
林沛勳中醫師
2024-03-05
C怎麼填詞 才能夠 更有畫面感 更有故事性 更能夠引起共鳴 更能朗朗上口 更有機會得金曲獎 更有機會得金馬獎 更有機會得C怎麼填詞 才能夠 更有畫面感 更有故事性 更能夠引起共鳴 更能朗朗上口 更有機會得金曲獎 更有機會得金馬獎 更有機會得葛萊美獎 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 填詞是一門藝術, 需要結合文學、音樂感和表達力。 以下是一些建議, 讓妳的歌詞作更有
Thumbnail
avatar
leader
2024-03-02
C當我的自營工作室客源開始穩定時,C就這樣悄悄走進我的生命裡,至今為止,我和C從來沒有吵架過,連一點點的不愉快、疙瘩甚至懷疑都沒有,對我而言,C的意義只有美好。她總是希望我過得好,我也祝福她永遠快樂。     我的租屋處是一棟由五樓透天隔間的大套房,而我就住在頂樓,旁邊還有一間空房一直沒人承租
Thumbnail
avatar
小倖
2024-01-12
C發洩完情緒之後,內心裡,總會有一種抒坦。是那種放下的感覺,是那種,什麼都好,都可以不重要,只有自己的那種,唯我獨尊的快感。可以不必再在意些什麼,不必再掙扎著去要求些什麼。唯有放寛心了,才能更真實去體驗自己正在經歷的過程。放下些什麼,才能獲得些什麼。 昨晚,C因為工作無法前來陪伴休假的我。經前症候群嚴
Thumbnail
avatar
霍普
2022-11-17