標記化是自然語言處理 (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!"
讓我們逐步分解標記化過程:
當您直接呼叫分詞器時,它會處理文字並輸出幾個關鍵元件:
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)
如果您對分詞器如何將句子分割成單獨的分詞感到好奇,您可以使用 tokenize() 方法。這將為您提供沒有底層 ID 的代幣清單:
sentence = "I love you! I love you! I love you!"
輸出:
res = tokenizer(sentence) print(res)
請注意,標記化涉及將句子分解為更小的有意義的單元。分詞器也會將所有字元轉換為小寫,因為我們使用的是 distilbert-base-uncased 模型,該模型不區分大小寫。
一旦我們有了令牌,下一步就是使用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 是模型用於處理的實際輸入。
最後,您可以使用decode() 方法將令牌 ID 解碼回人類可讀的字串:
['i', 'love', 'you', '!', 'i', 'love', 'you', '!', 'i', 'love', 'you', '!']
輸出:
ids = tokenizer.convert_tokens_to_ids(tokens) print(ids)
請注意,解碼後的字串非常接近原始輸入,除了刪除大寫字母,這是「無大小寫」模型的標準行為。
在 input_ids 的輸出中,您可能已經注意到兩個特殊標記:101 和 102。這些標記是許多模型用來表示句子開頭和結尾的特殊標記。具體來說:
這些特殊標記幫助模型理解輸入文字的邊界。
如前所述,attention_mask 幫助模型區分真實標記和填充標記。在這種情況下,attention_mask 是一個列表,表示應注意所有標記。如果有填充標記,您會在遮罩中看到零,以指示模型忽略它們。
總而言之,標記化是將文字轉換為機器學習模型可以處理的形式的關鍵步驟。 Hugging Face 的標記器可處理各種任務,例如:
了解分詞器的工作原理是有效利用預訓練模型的關鍵。透過將文字分解為更小的標記,我們使模型能夠以結構化、高效的方式處理輸入。無論您使用模型進行情緒分析、文字生成或任何其他 NLP 任務,分詞器都是管道中的重要工具。
以上是理解分詞器:深入研究有擁抱臉孔的分詞器的詳細內容。更多資訊請關注PHP中文網其他相關文章!