首页 > 后端开发 > Python教程 > 理解分词器:深入研究带有拥抱面孔的分词器

理解分词器:深入研究带有拥抱面孔的分词器

Patricia Arquette
发布: 2025-01-05 19:25:41
原创
947 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板