「分詞」是自然語言處理的很重要的第一步,讓電腦能夠「識別」我們的文字
電腦沒辦法理解人類的語言,所以需要先將文字轉換成電腦能讀懂的數字,而我們不可能把一整句話直接編碼,例如:"I love you."=1、"I love him."=2...,這樣編碼到最後會變成天文數字,所以在那之前我們需要先將一句話分成最小單位,也就是「詞」
本篇會用到一些我之前 Python 文章提過的內容,像是 Set (集合)、推導式,如有需要不妨參考一下~
不再迷茫!手把手的Python入門教學-字典、集合
不再迷茫!手把手的Python入門教學-推導式、生成器
簡易分詞
英文的分詞比較好處理,甚至是用簡單幾行的 Python 程式就有辦法解決string = "All you need in this life is ignorance and confidence, and then success is sure."
tokenization = string.split()
token_num = {word: index for index, word in enumerate(set(tokenization))}
print(token_num)
# {'ignorance': 0, 'life': 1, 'success': 2, 'sure.': 3, 'this': 4, 'and': 5, 'All': 6, 'then': 7, 'need': 8, 'you': 9, 'is': 10, 'in': 11, 'confidence,': 12}
id = [token_num[word] for word in tokenization]
print(id)
# [6, 9, 8, 11, 4, 1, 10, 0, 5, 12, 5, 7, 2, 10, 3]
- 第一行:要進行分詞的句子
- 第二行:用
.split()
將句子以 '空格' 分開並製成 list
忘了 .split() 可以參考這篇 - 第三行:這行比較複雜,我們先從最裡面的括號來看
set(tokenization)
:將 tokenization 這個 list 轉成 set,用 set 不重複的特性,去除重複的詞(set看這裡)enumerate(set(tokenization))
:將這個 set 內的值給予從 0 開始的流水編號,並組合成一個索引序列{word: index for index, word in enumerate(...)}
:這裡用到的是一個字典的推導式,將索引序列的第一個值設為 index、第二個值設為 word 放入字典中,因為我們希望字典是文字在前數字在後,所以特意顛倒
* 需要注意的是,每個人最後產出的結果可能都不一樣,因為 set 沒有順序,所以每個人結果都是隨機
(enumerate、字典推導式可以參考這篇)
- 第七行:這邊是列表推導式,後面那個 for 迴圈會將 tokenization 這個 list 內的值一個一個代入 word 這個變數,然後前面的
token_num[word]
會將每一個詞當作 key 值代入 token_num 這個字典裡面查,然後將找到的編碼放入 id 這個 list 中
*要理解推導式最好的辦法是自己慢慢推導看看,因為不是本篇的重點我就不多贅述,想深入了解可以看看 不再迷茫!手把手的Python入門教學-推導式、生成器

執行結果
這裡只是稍微講一下分詞的概念,下一篇就會真正來到 Hugging Face Tokenizer!
一樣如果喜歡我的內容也幫我動動手指按個讚喔~感謝您😊