首頁 > 後端開發 > Python教學 > 理解分詞器:深入研究有擁抱臉孔的分詞器

理解分詞器:深入研究有擁抱臉孔的分詞器

Patricia Arquette
發布: 2025-01-05 19:25:41
原創
917 人瀏覽過

Understanding Tokenization: A Deep Dive into Tokenizers with Hugging Face

標記化是自然語言處理 (NLP) 中的基本概念,尤其是在處理語言模型時。在本文中,我們將探討分詞器的作用、工作原理,以及如何使用 Hugging Face 的轉換器庫 [https://huggingface.co/docs/transformers/index] 將其用於各種應用程式。

什麼是分詞器?

分詞器的核心是將原始文字分解為更小的單元,稱為標記。這些標記可以表示單字、子字或字符,這取決於所使用的標記生成器的類型。標記化的目標是將人類可讀的文本轉換為更容易被機器學習模型解釋的形式。

標記化至關重要,因為大多數模型不能直接理解文字。相反,他們需要數字來進行預測,這就是分詞器的用武之地。它接收文本,對其進行處理,並輸出模型可以使用的數學表示。

在這篇文章中,我們將介紹如何使用 Hugging Face 中的預訓練模型來了解標記化的工作原理,探索 Transformer 庫中可用的不同方法,並了解標記化如何影響情緒分析等下游任務。

設定模型和分詞器

首先,讓我們從 Transformers 套件中導入必要的庫並載入預先訓練的模型。我們將使用經過微調的「DistilBERT」模型進行情緒分析。

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# Load the pre-trained model and tokenizer
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Create the classifier pipeline
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
登入後複製
登入後複製

標記文字

設定模型和分詞器後,我們可以開始對一個簡單的句子進行分詞。這是一個例句:

sentence = "I love you! I love you! I love you!"
登入後複製
登入後複製

讓我們逐步分解標記化過程:

1. Tokenizer 輸出:輸入 ID 和注意力掩碼

當您直接呼叫分詞器時,它會處理文字並輸出幾個關鍵元件:

  • input_ids:表示令牌的整數 ID 清單。每個標記對應於模型詞彙表中的一個條目。
  • attention_mask:由 1 和 0 組成的列表,指示模型應注意哪些標記。這在處理填充時特別有用。
res = tokenizer(sentence)
print(res)
登入後複製
登入後複製

輸出:

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# Load the pre-trained model and tokenizer
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Create the classifier pipeline
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
登入後複製
登入後複製
  • input_ids:整數代表標記。例如,1045對應“我”,2293對應“愛”,999對應“!”。
  • attention_mask:這些表示應該注意所有標記。如果有填充標記,您會在此列表中看到零,表明它們應該被忽略。

2. 代幣化

如果您對分詞器如何將句子分割成單獨的分詞感到好奇,您可以使用 tokenize() 方法。這將為您提供沒有底層 ID 的代幣清單:

sentence = "I love you! I love you! I love you!"
登入後複製
登入後複製

輸出:

res = tokenizer(sentence)
print(res)
登入後複製
登入後複製

請注意,標記化涉及將句子分解為更小的有意義的單元。分詞器也會將所有字元轉換為小寫,因為我們使用的是 distilbert-base-uncased 模型,該模型不區分大小寫。

3. 將Token轉換為ID

一旦我們有了令牌,下一步就是使用convert_tokens_to_ids()方法將它們轉換為對應的整數ID:

{
    'input_ids': [101, 1045, 2293, 2017, 999, 1045, 2293, 2017, 999, 1045, 2293, 2017, 999, 102],
    'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}
登入後複製

輸出:

tokens = tokenizer.tokenize(sentence)
print(tokens)
登入後複製

每個標記都有一個唯一的整數 ID,在模型的詞彙表中表示它。這些 ID 是模型用於處理的實際輸入。

4. 將 ID 解碼回文本

最後,您可以使用decode() 方法將令牌 ID 解碼回人類可讀的字串:

['i', 'love', 'you', '!', 'i', 'love', 'you', '!', 'i', 'love', 'you', '!']
登入後複製

輸出:

ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids)
登入後複製

請注意,解碼後的字串非常接近原始輸入,除了刪除大寫字母,這是「無大小寫」模型的標準行為。

了解特殊令牌

在 input_ids 的輸出中,您可能已經注意到兩個特殊標記:101 和 102。這些標記是許多模型用來表示句子開頭和結尾的特殊標記。具體來說:

  • 101:標記句子的開頭。
  • 102:標記句子的結尾。

這些特殊標記幫助模型理解輸入文字的邊界。

注意力面具

如前所述,attention_mask 幫助模型區分真實標記和填充標記。在這種情況下,attention_mask 是一個列表,表示應注意所有標記。如果有填充標記,您會在遮罩中看到零,以指示模型忽略它們。

分詞器摘要

總而言之,標記化是將文字轉換為機器學習模型可以處理的形式的關鍵步驟。 Hugging Face 的標記器可處理各種任務,例如:

  • 將文字轉換為標記。
  • 將令牌對應到唯一的整數 ID。
  • 為模型產生注意掩模以了解哪些標記很重要。

結論

了解分詞器的工作原理是有效利用預訓練模型的關鍵。透過將文字分解為更小的標記,我們使模型能夠以結構化、高效的方式處理輸入。無論您使用模型進行情緒分析、文字生成或任何其他 NLP 任務,分詞器都是管道中的重要工具。

以上是理解分詞器:深入研究有擁抱臉孔的分詞器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板