NLP 中的 token 是什么?对照字符、词和子词理解长度与截断

NLP 里的 token 是分词器交给模型的离散单位,既不必等于一个汉字,也不必等于一个空格隔开的词。先用一份极小的教学语料训练 WordPiece 分词器,再比较字符数、空格词数和实际 token 数,最后演示截断会丢掉什么。

NLP 里的 token 是分词器交给模型的离散单位,既不必等于一个汉字,也不必等于一个空格隔开的词。先用一份极小的教学语料训练 WordPiece 分词器,再比较字符数、空格词数和实际 token 数,最后演示截断会丢掉什么。

准备与运行

本文只使用人工构造的教学材料,没有把示例结果当作真实项目效果。以下代码在 Windows 的 Python 3.11 独立环境执行通过。先在空目录运行安装命令,再将完整代码保存为 demo.py,执行 python demo.py。

NLP 中的 token 是什么?对照字符、词和子词理解长度与截断

python -m pip install tokenizers==0.22.1

三种长度口径不能混用

“人工智能 NLP”有 7 个非空白字符,但按空格只会得到两个字段;真实 token 个数要由选定模型的分词器计算。不同模型的词表、规范化、特殊符号都可能改变结果,因此不能用“每个汉字一个 token”的经验值直接规划输入上限。

演示从四条教学文本训练一个 WordPiece 词表。它不是任何线上大模型的词表,只用来展示同一段文本如何被拆成带有 ID 的单位。做项目时必须替换为目标模型配套的分词器,并记录词表版本。

先看完整序列,再决定是否截断

代码先对完整输入编码,再把编码器上限设为 6。通过比较两组 token 和 ID,可以看到尾部内容是否被舍弃。真实模型可能还加入起止符、角色标记和输出预留,因此只统计用户文本的 token 数不足以保证请求一定不过长。

截断前应确定哪些材料可以舍弃:产品规则和待回答问题常比冗长背景更关键。若资料不能丢,可以按语义边界分段、分别保留来源编号,再逐段核对答案;不要静默截断后仍要求模型回答被截掉的事实。

完整代码

from tokenizers import Tokenizer, models, pre_tokenizers, trainers

corpus = ["人工智能 NLP 处理文本", "人工智能 可以处理中文", "NLP 需要词表", "处理文本需要核对长度"]
tokenizer = Tokenizer(models.WordPiece(unk_token="[UNK]"))
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.WordPieceTrainer(vocab_size=25, special_tokens=["[UNK]"])
tokenizer.train_from_iterator(corpus, trainer=trainer)
sample = "人工智能 NLP 处理文本 需要词表 人工智能 NLP 处理文本"
full = tokenizer.encode(sample)
print("non_space_chars", len(sample.replace(" ", "")))
print("space_fields", len(sample.split()))
print("full_tokens", full.tokens)
print("full_ids", full.ids)
tokenizer.enable_truncation(max_length=6)
short = tokenizer.encode(sample)
print("truncated_tokens", short.tokens)
print("truncated_ids", short.ids)
print("removed_count", len(full.ids)-len(short.ids))
assert len(short.ids) == min(6, len(full.ids))
assert len(full.ids) > len(short.ids)

运行结果与核对

下面是上述脚本在本地执行得到的输出;正式数据请按相同检查点复核。

non_space_chars 26
space_fields 7
full_tokens ['人', '##工', '##智', '##能', 'N', '##L', '##P', '处', '##理', '##文', '##本', '需', '##要', '##词', '##表', '人', '##工', '##智', '##能', 'N', '##L', '##P', '处', '##理', '##文', '##本']
full_ids [5, 23, 24, 25, 2, 38, 39, 8, 28, 30, 31, 22, 33, 40, 41, 5, 23, 24, 25, 2, 38, 39, 8, 28, 30, 31]
truncated_tokens ['人', '##工', '##智', '##能', 'N', '##L']
truncated_ids [5, 23, 24, 25, 2, 38]
removed_count 20

运行后先看 full_tokens 与 full_ids 是否逐项对应,再看 truncated_tokens 是否只保留前六个单位,removed_count 是否大于零。若换成目标模型,应以该模型分词器重新测量,并同时核对它的特殊 token 与可用上下文设置。

适用边界

这套词表由四条人为文本临时训练,切分结果不代表 ChatGPT、DeepSeek 或任意预训练模型,也不说明实际费用。上限 6 仅为让截断可见而设;代码未发送模型请求。

常见问题

空格词数能用于中文 token 预算吗?

不能。中文句子通常没有天然空格分词边界;即使有空格,子词分词器仍可能把一个字段拆成多个 token。用目标模型的分词器实测。

参考资料

以下官方资料已于 2026 年 10 月 1 日核对,分别用于确认文中接口或方法定义。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31715.html

赞 (0)
AI小管家的头像AI小管家
表格分析智能体先看什么?生成字段概况、空值率和唯一值检查表
上一篇 2026年10月1日 下午9:24
客服文本分类该用传统 NLP 还是大模型?用固定标签和复核成本做选择
下一篇 2026年10月1日 下午9:24

相关推荐

  • Claude数学建模如何从问题拆解到模型构建

    Claude数学建模的价值,不是直接生成一组看似完整的公式,而是帮助使用者把自然语言问题转换成可分析、可计算、可验证的结构。面对“如何提高效率”“如何合理分配资源”这类表述,第一步应先明确研究对象、决策目标、可用数据、限制条件和最终评价标准。

    12小时前
    200
  • claude教学:从提问到整理资料的AI使用步骤

    Claude更适合承担需要阅读、比较、归纳和改写的工作。面对一份较长的会议记录、调研材料、项目文档或多轮沟通内容,它可以帮助你提炼主题、识别章节结构、抽取关键事实,并将零散信息重新组织成摘要、提纲、表格或行动清单。它也适合用于邮件改写、报告初稿、问答整理和不同语气之间的转换。

    12小时前
    300
  • claude数学能解决哪些题型?从提问到验算的使用指南

    claude数学更适合被当作一个会解释、会追问、能协助检查的数学助手,而不是只负责吐出最终数字的计算器。它可以帮助用户读懂题意、整理已知条件、选择公式、展示推导步骤,也能根据用户提供的解答寻找计算或逻辑上的漏洞。

    12小时前
    200
  • claude教科书中的AI对话使用场景与操作步骤

    本文把“claude教科书”作为学习AI对话方法的主题表达,不把未提供的书籍章节、作者观点、官方功能或具体版本当作已知事实。真正值得掌握的,不是背下一句所谓万能提示词,而是建立一套可重复的对话流程:先明确目标,再补充背景,随后规定输出方式,最后检查结果。

    12小时前
    200
  • claude数学公式怎么用 从文字描述到规范公式的操作步骤

    使用Claude处理数学公式,关键不是直接输入“帮我写公式”,而是把题意中的变量、条件、运算关系和输出格式交代清楚。自然语言往往省略主语、范围或单位,如果这些信息没有说明,生成结果就可能在符号定义、括号范围或等号两侧的逻辑上出现偏差。

    12小时前
    200
联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部