「斷詞 (Tokenization)」是文本前處理 (Text Preprocessing) 中的一個關鍵步驟,指的是將一段文本(例如一個句子、一個段落或一篇文章)分割成更小的單元,這些單元通常被稱為「詞語 (tokens)」。這些 tokens 是後續 NLP 模型進行分析和處理的基本單位。
你可以將 tokenization 看作是將連續的文本流分解成離散的、有意義的塊。對於後續的 NLP 任務,例如詞性標註、命名實體識別、文本分類等,通常都需要先將文本進行斷詞處理。
為什麼需要斷詞?- 模型輸入: 大多數 NLP 模型(尤其是基於詞語的模型)需要將文本分解成單個詞語才能進行處理。
- 語義理解: 將文本分解成詞語是理解文本語義的第一步。模型需要識別出句子中的每個詞語及其含義。
- 特徵提取: 許多 NLP 特徵(例如詞頻、TF-IDF)都是基於詞語進行計算的。
不同語言的斷詞方法:
斷詞的方法會因語言而異:
- 英文等空格分隔的語言: 對於英文等語言,最簡單的斷詞方法是基於空格進行分割。例如,句子 "Hello, how are you?" 可以被分割成 tokens:["Hello,", "how", "are", "you", "?"]. 但需要注意的是,標點符號的處理方式可能有所不同,有時會將標點符號作為單獨的 token,有時會將其與詞語合併。
- 中文、日文、韓文等無明顯空格分隔的語言: 這些語言的詞語之間沒有明顯的空格分隔,因此需要使用更複雜的分詞算法。這些算法通常基於詞典和語法規則,或者使用機器學習模型來判斷文本中哪些字符應該被劃分為一個詞語。例如,中文句子 "我今天很高興。" 可能會被分詞為:["我", "今天", "很", "高興", "。"]. 中文分詞的準確性對後續的 NLP 任務至關重要。
常見的斷詞工具和技術:
- 基於空格的分割 (Whitespace Tokenization): 簡單地根據空格分割文本。
- 基於標點符號的分割 (Punctuation-based Tokenization): 將標點符號也視為分隔符或單獨的 token。
- WordNet Lemmatizer/NLTK 和 spaCy 等工具庫中的分詞器: 這些工具庫提供了更複雜的分詞方法,可以處理標點符號、特殊字符,並針對特定語言進行了優化。
- 基於子詞 (Subword) 的分詞 (例如 Byte-Pair Encoding - BPE, WordPiece, SentencePiece): 這種方法將詞語分割成更小的子單元(例如詞根、詞綴),可以有效處理未登錄詞 (out-of-vocabulary words) 並減少詞彙表的大小。BERT、GPT 等現代 Transformer 模型廣泛使用子詞分詞技術。
斷詞的粒度:
斷詞的粒度可以不同:
- 詞語級別 (Word-level Tokenization): 將文本分割成單個詞語。這是最常見的粒度。
- 字符級別 (Character-level Tokenization): 將文本分割成單個字符。這種方法可以處理任意文本,但可能會丟失詞語的語義信息。
- 子詞級別 (Subword-level Tokenization): 如前所述,將詞語分割成更小的有意義的單元。
選擇哪種斷詞方法和粒度取決於具體的 NLP 任務和所使用的模型。正確地進行斷詞是後續 NLP 流程的基礎。