0

0

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

碧海醫心

碧海醫心

发布时间:2025-01-06 20:11:59

|

1268人浏览过

|

来源于php中文网

原创

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

自然语言处理 (NLP) 中的核心概念之一是标记化,尤其在处理语言模型时尤为重要。本文将深入探讨分词器的功能、工作机制,并演示如何借助 Hugging Face 的 Transformers 库 (https://www.php.cn/link/6d1be3a2fee8021297abde7f310a2fab) 实现各种应用。

分词器详解

分词器的核心任务是将原始文本分解成更小的单元,即标记。这些标记可以是单词、子词或字符,具体取决于所用分词器的类型。标记化的目标是将人类可读的文本转换为更易于机器学习模型理解的形式。

大多数模型无法直接理解文本,它们需要数字输入才能进行预测,而分词器正是扮演着这个桥梁的角色。它接收文本,进行处理,并输出模型可用的数学表示。

本文将介绍如何利用 Hugging Face 的预训练模型理解标记化的工作原理,探索 Transformers 库中提供的各种方法,并了解标记化如何影响情感分析等下游任务。

模型和分词器的配置

首先,从 Transformers 包导入必要的库并加载预训练模型。我们将使用经过微调的“distilbert”模型进行情感分析。

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载预训练模型和分词器
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 创建分类器管道
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

文本标记化

配置好模型和分词器后,我们可以开始对一个简单的句子进行分词。示例句子如下:

sentence = "i love you! i love you! i love you!"

让我们逐步分析标记化过程:

1. 分词器输出:输入 ID 和注意力掩码

直接调用分词器时,它会处理文本并输出几个关键组件:

  • input_ids: 表示标记的整数 ID 列表。每个标记对应于模型词汇表中的一个条目。
  • attention_mask: 由 1 和 0 组成的列表,指示模型应关注哪些标记。在处理填充时特别有用。
res = tokenizer(sentence)
print(res)

输出类似:

{
    '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]
}

input_ids 中的整数代表标记。例如,1045 对应 "i",2293 对应 "love",2017 对应 "you",999 对应 "!"。attention_mask 表示应关注所有标记。如果存在填充标记,则列表中会出现 0,指示模型忽略它们。

2. 标记化

如果想知道分词器如何将句子分割成单独的标记,可以使用 tokenize() 方法。这将返回不包含底层 ID 的标记列表:

tokens = tokenizer.tokenize(sentence)
print(tokens)

输出:

['i', 'love', 'you', '!', 'i', 'love', 'you', '!', 'i', 'love', 'you', '!']

注意,标记化会将句子分解成更小的有意义的单元。由于我们使用的是 distilbert-base-uncased 模型(不区分大小写),分词器会将所有字符转换为小写。

Mintlify
Mintlify

帮助开发者创建和维护文档

下载

3. 将标记转换为 ID

获得标记后,下一步是使用 convert_tokens_to_ids() 方法将它们转换为相应的整数 ID:

ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids)

输出:

[1045, 2293, 2017, 999, 1045, 2293, 2017, 999, 1045, 2293, 2017, 999]

每个标记都有一个唯一的整数 ID,在模型的词汇表中表示它。这些 ID 是模型处理的实际输入。

4. 将 ID 解码回文本

最后,可以使用 decode() 方法将标记 ID 解码回人类可读的字符串:

decoded_string = tokenizer.decode(ids)
print(decoded_string)

输出:

i love you! i love you! i love you!

解码后的字符串与原始输入非常接近,只是去除了大写字母,这是“无大小写”模型的标准行为。

5. 特殊标记

input_ids 输出中,可以看到两个特殊标记:101 和 102。许多模型使用这些特殊标记来表示句子的开头和结尾。

  • 101: 标记句子的开头。
  • 102: 标记句子的结尾。

这些特殊标记帮助模型理解输入文本的边界。

6. 注意力掩码

如前所述,attention_mask 帮助模型区分真实标记和填充标记。在本例中,attention_mask 表示应关注所有标记。

分词器总结

总而言之,标记化是将文本转换为机器学习模型可处理形式的关键步骤。Hugging Face 的分词器可以处理各种任务,例如:

  • 将文本转换为标记。
  • 将标记映射到唯一的整数 ID。
  • 为模型生成注意力掩码以指示哪些标记很重要。

结论

理解分词器的运行机制对于有效利用预训练模型至关重要。通过将文本分解成更小的标记,使模型能够以结构化、高效的方式处理输入。无论您使用模型进行情感分析、文本生成还是任何其他 NLP 任务,分词器都是流程中的重要工具。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1491

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

622

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

551

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

166

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

82

2025.08.07

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 14.5万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号