标记化是自然语言处理 (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中文网其他相关文章!