了解 NLP 中的標記化:文字處理初學者指南
已發表: 2024-11-26標記化是自然語言處理 (NLP) 的關鍵但經常被忽略的組成部分。在本指南中,我們將解釋標記化、其用例、優點和缺點,以及為什麼它涉及幾乎所有大型語言模型 (LLM)。
目錄
- NLP 中的標記化是什麼?
- 標記化的類型
- 代幣化如何運作
- 代幣化應用
- 代幣化的好處
- 代幣化的挑戰
NLP 中的標記化是什麼?
標記化是一種 NLP 方法,可將文字轉換為機器學習 (ML) 模型可以使用的數位格式。當您將提示發送給法學碩士(例如 Anthropic 的 Claude、Google 的 Gemini 或 OpenAI 的 GPT 系列的成員)時,模型不會直接讀取您的文字。這些模型只能將數字作為輸入,因此必須先使用分詞器將文字轉換為數字序列。
分詞器對文字進行分詞的一種方法是將其分割成單獨的單詞,並為每個唯一的單字分配一個數字:
「Grammarly 熱愛文法、機器學習和寫作」可能會變成:
每個單字(及其關聯的數字)都是一個標記。 ML 模型可以使用標記序列 - [7,102]、[37]、[564]、[2]、[9,763]、[2]、[231] - 來運行其操作並產生其輸出。此輸出通常是一個數字,使用與此相同的標記化過程相反的過程將其轉換回文字。在實踐中,這種逐字標記化作為示例非常好,但在工業中很少使用,原因我們稍後會看到。
最後要注意的一點是標記器具有詞彙表——它們可以處理的完整標記集。知道基本英語單字但不知道公司名稱的分詞器可能在其詞彙表中沒有“Grammarly”作為標記,從而導致分詞失敗。
標記化的類型
一般來說,標記化是將一段文字轉換為一系列數字。雖然在單字層級考慮標記化是很自然的,但還有許多其他標記化方法,其中之一 - 子詞標記化 - 是行業標準。
單字標記化
單字標記化是我們之前看到的範例,其中文字按每個單字和標點符號進行分割。
單字標記化的主要好處是它易於理解和視覺化。然而,它有一些缺點:
- 如果存在標點符號,則將其附加到單字上,就像「寫作」一樣。
- 新穎或不常見的單字(例如“Grammarly”)佔據了整個標記。
因此,單字標記化可以創建包含數十萬個標記的詞彙表。大詞彙量的問題是它們使訓練和推理的效率大大降低——文本和數字之間轉換所需的矩陣需要很大。
此外,還會有許多不常用的單字,而且 NLP 模型沒有足夠的相關訓練資料來傳回這些不常用單字的準確回應。如果明天發明了一個新單詞,那麼使用單字標記化的法學碩士將需要重新訓練以合併該單字。
子詞標記化
子詞標記化將文字分割成小於或等於單字的區塊。每個token沒有固定的大小;每個標記(及其長度)由訓練過程決定。子詞標記化是法學碩士的業界標準。下面是一個由 GPT-4o 標記器完成標記化的範例:
在這裡,不常見的單字「Grammarly」被分解為三個標記:「Gr」、「amm」和「arly」。同時,其他單字在文本中足夠常見,可以形成自己的標記。
子詞標記化允許使用較小的詞彙表,這意味著更有效率、更便宜的訓練和推理。子詞標記器還可以將罕見或新穎的單字分解為較小的現有標記的組合。由於這些原因,許多 NLP 模型使用子字標記化。
字元標記化
字元標記化將文字分割成單獨的字元。我們的範例如下所示:
每個獨特的角色都成為自己的標記。這實際上需要最少的詞彙量,因為字母表中只有 52 個字母(大小寫不同)和幾個標點符號。由於任何英語單字都必須由這些字元組成,因此字元標記化可以適用於任何新的或罕見的單字。
然而,根據標準的 LLM 基準,字元標記化在實務上的表現不如子字標記化。子詞標記“car”比字符標記“c”包含更多的信息,因此 Transformer 中的注意力機制有更多的信息可以運行。
句子標記化
句子標記化將文本中的每個句子轉換為自己的標記。我們的例子看起來像:
好處是每個令牌都包含大量資訊。然而,也有幾個缺點。組合單字來寫句子的方法有無數種。因此,詞彙量也需要是無限的。
此外,每個句子本身都非常罕見,因為即使具有相同的含義,即使是微小的差異(例如“as well”而不是“and”)也會意味著不同的標記。訓練和推理將是一場噩夢。句子標記化用於專門的用例,例如句子情緒分析,但除此之外,這種情況很少見。
代幣化權衡:效率與性能
為模型選擇正確的標記化粒度實際上是效率和性能之間的複雜關係。對於非常大的標記(例如,在句子層級),詞彙量會變得很大。由於保存所有這些標記的矩陣龐大,模型的訓練效率會下降。由於沒有足夠的訓練資料來讓所有獨特的標記有效地學習關係,因此表現直線下降。
另一方面,使用小標記,詞彙量就會變小。訓練變得高效,但性能可能會直線下降,因為每個令牌沒有包含足夠的資訊供模型學習令牌之間的關係。
子詞標記化就在中間。每個 token 都有足夠的資訊供模型學習關係,但詞彙量並沒有太大而導致訓練效率低下。
代幣化如何運作
標記化圍繞標記器的訓練和使用。分詞器將文字轉換為標記,然後將標記轉換回文字。我們將在這裡討論子詞分詞器,因為它們是最受歡迎的類型。
子詞分詞器必須經過訓練才能有效分割文字。
為什麼「Grammarly」被分成「Gr」、「amm」和「arly」?難道「Gram」、「mar」和「ly」也可以嗎?對於人眼來說,它絕對可以,但是分詞器可能已經學會了最有效的表示,但它的想法不同。用於學習這種表示的常見訓練演算法(儘管在 GPT-4o 中未使用)是位元組對編碼 (BPE)。我們將在下一節中解釋 BPE。
分詞器訓練
要訓練一個好的分詞器,您需要大量的文本語料庫來訓練。在此語料庫上執行 BPE 的工作原理如下:
- 將語料庫中的所有文字拆分為單一字元。將它們設定為詞彙表中的起始標記。
- 將文本中兩個最頻繁相鄰的標記合併為一個新標記,並將其添加到詞彙表中(不刪除舊標記 - 這很重要)。
- 重複此過程,直到沒有剩餘的頻繁出現的相鄰標記對,或已達到最大詞彙量。
舉個例子,假設我們的整個訓練語料庫由文字「abc abcd」組成:
- 文本將被拆分為 [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]。請注意,該清單中的第四個條目是空格字元。我們的詞彙表將是[“a”,“b”,“c”,“ ”,“d”]。
- 「a」和「b」在文本中最常相鄰出現(與「b」和「c」並列,但「a」和「b」按字母順序獲勝)。因此,我們將它們組合成一個標記“ab”。詞彙表現在看起來像[“a”、“b”、“c”、“ ”、“d”、“ab”],更新後的文本(應用了“ab”標記合併)看起來像[“ab 」 、「c」、「 」、「ab」、「c」、「d」]。
- 現在,「ab」和「c」在文本中最常一起出現。我們將它們合併到令牌“abc”中。詞彙表看起來像[“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”],更新後的文字看起來像[“abc”, “ ”, “ abc” ”,“d”]。
- 我們在這裡結束該過程,因為每個相鄰的令牌對現在只出現一次。進一步合併標記會使產生的模型在其他文字上表現更差。在實踐中,詞彙量限制是限制因素。
透過我們的新詞彙集,我們可以在文本和標記之間進行映射。即使我們以前從未見過的文本,例如“cab”,也可以被標記化,因為我們沒有丟棄單字元標記。我們也可以透過簡單地查看詞彙表中標記的位置來傳回標記編號。
良好的分詞器訓練需要極大量的數據和大量的計算——這超出了大多數公司的承受能力。公司透過跳過自己的標記器的培訓來解決這個問題。相反,他們只是使用預先訓練的分詞器(例如上面鏈接的 GPT-4o 分詞器)來節省時間和金錢,同時將模型性能的損失降至最低(如果有的話)。
使用分詞器
因此,我們使用 BPE 在海量語料庫上訓練了這個子詞分詞器。現在,我們如何在新的文本中使用它?
我們應用在分詞器訓練過程中所確定的合併規則。我們首先將輸入文字拆分為字元。然後,我們按照與訓練中相同的順序進行令牌合併。
為了說明這一點,我們將使用稍微不同的輸入文字「dc abc」:
- 我們將其拆分為字元 [“d”, “c”, “ ”, “a”, “b”, “c”]。
- 我們在訓練中進行的第一次合併是“ab”,所以我們在這裡這樣做:[“d”,“c”,“ ”,“ab”,“c”]。
- 我們做的第二次合併是“abc”,所以我們這樣做:[“d”,“c”,“ ”,“abc”]。
- 這些是我們擁有的唯一合併規則,因此我們完成了標記化,並且可以傳回標記 ID。
如果我們有一堆令牌 ID,並且想要將其轉換為文本,我們可以簡單地查找列表中的每個令牌 ID 並返回其關聯的文本。法學碩士這樣做是為了將他們使用的嵌入(透過查看周圍標記來捕獲標記含義的數字向量)轉回人類可讀的文本。
代幣化應用
標記化始終是所有 NLP 的第一步。將文字轉換為機器學習模型(和電腦)可以使用的形式需要標記化。
LLM 中的代幣化
標記化通常是每個 LLM 調用的第一個和最後一個部分。首先將文字轉換為標記,然後將標記轉換為嵌入以捕獲每個標記的含義並傳遞到模型的主要部分(轉換器區塊)。變壓器塊運行後,嵌入將轉換回令牌。最後,剛剛返回的令牌被添加到輸入中並傳回模型,再次重複該過程。法學碩士使用子詞標記化來平衡性能和效率。
搜尋引擎中的標記化
搜尋引擎對使用者查詢進行標記以使其標準化並更好地理解使用者意圖。搜尋引擎標記化可能涉及將文字拆分為單字、刪除填充詞(例如“the”或“and”)、將大寫字母轉換為小寫字母以及處理連字符等字元。這裡通常不需要子詞標記化,因為表現和效率不太依賴詞彙量。
機器翻譯中的標記化
機器翻譯標記化很有趣,因為輸入和輸出語言不同。因此,將有兩個分詞器,每種語言一個。子詞標記化通常效果最好,因為它平衡了模型效率和模型性能之間的權衡。但有些語言,例如中文,沒有比單字更小的語言成分。在那裡,需要單字標記化。
代幣化的好處
標記化是任何 NLP 模型的必備條件。良好的標記化可以讓 ML 模型有效地處理文字並很好地處理新單字。
標記化讓模型可以處理文本
在內部,機器學習模型僅適用於數字。機器學習模型背後的演算法完全依賴計算,而計算本身也需要數字來進行計算。因此,必須先將文字轉換為數字,然後機器學習模型才能使用它們。標記化後,可以在數字上運行注意力或嵌入等技術。
標記化推廣到新的和稀有的文本
或者更準確地說,良好的標記化可以推廣到新的和稀有的文本。透過子字和字元標記化,新文字可以分解為現有標記的序列。因此,將一篇包含亂碼的文章貼到 ChatGPT 中不會導致它崩潰(儘管它也可能不會給出非常連貫的回應)。良好的泛化也允許模型根據子標記中的關係來學習稀有單字之間的關係。
代幣化的挑戰
標記化取決於訓練語料庫和演算法,因此結果可能會有所不同。這會影響法學碩士的推理能力及其輸入和輸出長度。
標記化影響法學碩士的推理能力
經常困擾法學碩士的一個簡單問題是計算“草莓”一詞中字母“r”的出現次數。該模型會錯誤地表示有兩個,但實際上答案是三個。此錯誤可能部分是由於標記化造成的。子詞分詞器將「草莓」拆分為「st」、「raw」和「berry」。因此,模型可能無法將中間標記中的一個「r」連接到最後一個標記中的兩個「r」。選擇的標記化演算法直接影響單字的標記化方式以及每個標記與其他標記的關係。
標記化影響 LLM 輸入和輸出長度
LLM 大多建立在 Transformer 架構之上,該架構依賴注意力機制來將每個 token 置於上下文中。然而,隨著代幣數量的增加,注意力所需的時間呈現二次方增加。因此,具有 4 個標記的文字將需要 16 個時間單位,而具有 8 個標記的文字將需要 64 個時間單位。這將法學碩士的輸入和輸出限制為數十萬個代幣。使用較小的標記,這確實會限制您可以輸入模型的文字量,從而減少您可以使用它執行的任務數量。