分词器详解

简介: 分词器将文本转为模型可处理的数字序列,主流算法如BPE、WordPiece和SentencePiece各有特点。BPE高效但中文支持弱,WordPiece适合英文,SentencePiece语言无关,尤适中文。实战中需根据语言特性选择,并关注词汇表大小、OOV问题等面试重点。

🎯 概述
分词器(Tokenizers)是将文本转换为模型可理解的数字序列的关键组件,直接影响模型的性能和效率。
🏗️ 主流分词算法
1️⃣ BPE (Byte Pair Encoding)
原理:通过合并高频字符对来构建词汇表
优点:

有效处理未登录词

词汇量可控

多语言支持好
缺点:

可能产生不完整的词

对中文支持有限
实现示例:
2️⃣ WordPiece
原理:基于最大似然估计逐步合并词片段
特点:

Google开发,用于BERT

在词前添加##标记子词

更适合英文
示例:
3️⃣ SentencePiece
原理:将文本视为Unicode序列,不依赖空格分词
优势:

语言无关性

支持中文、日文等无空格语言

可逆转换
配置示例:
📊 算法对比
特性
BPE
WordPiece
SentencePiece
分词粒度
子词
子词
子词/字符
语言支持
英文为主
英文为主
多语言
空格处理
依赖空格
依赖空格
不依赖空格
训练速度

中等

模型大小

中等

🎯 实战应用
中文分词最佳实践
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

使用SentencePiece处理中文

import sentencepiece as spm

训练中文分词器

spm.SentencePieceTrainer.train(
input='chinese_corpus.txt',
model_prefix='chinese_sp',
vocab_size=32000,
character_coverage=0.995, # 覆盖99.5%字符
model_type='bpe'
)

使用分词器

sp = spm.SentencePieceProcessor(model_file='chinese_sp.model')
tokens = sp.encode('大模型面试宝典', out_type=str)
print(tokens) # ['大', '模型', '面试', '宝典']
英文分词示例
1
2
3
4
5
6

使用Hugging Face Tokenizers

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.tokenize("transformer architecture")
print(tokens) # ['transform', '##er', 'arch', '##itecture']
🔍 技术细节
词汇表构建流程
1
预处理:清洗文本,标准化
2
训练:基于语料库学习分词规则
3
验证:检查分词质量
4
优化:调整超参数
特殊标记处理

[PAD]:填充标记

[UNK]:未知词标记

[CLS]:分类标记

[SEP]:分隔标记

[MASK]:掩码标记(用于MLM)
📚 深入阅读

注意力机制详解

主流大模型结构
🎯 面试重点
1
BPE和WordPiece的区别?
2
如何处理中文分词?
3
词汇表大小如何选择?
4
OOV(未登录词)问题如何解决?

相关文章
|
3月前
|
人工智能 自然语言处理 Apache
有哪些类似 Danswer 的开源问答系统?
本文介绍了五款开源问答系统:Apache Answer适合团队知识沉淀;QAnything可将杂乱文档变为可对话的知识库;Haystack适合作为企业级问答中台基础;KoalaQA聚焦售后与智能客服场景;Khoj则是个人AI知识助手。选择时需根据使用场景、技术投入与团队需求匹配,系统落地后更需持续运营才能真正发挥作用。
223 0
|
2月前
|
存储 人工智能 JSON
Agent系统
大模型Agent是具备自主规划、推理、工具调用与记忆能力的智能系统,能分解任务、反思调整并持续交互。核心架构含大脑(LLM)、感知、行动与记忆模块,支持函数调用与多Agent协作,广泛应用于复杂任务场景,区别于传统Chatbot,更具主动性与执行力。
129 0
|
2月前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化了Spring应用开发,核心功能包括:starter起步依赖简化配置、自动配置根据条件加载Bean、内嵌服务器支持jar包运行。通过@SpringBootApplication实现自动化配置,自定义starter可封装通用功能,配置优先级为:命令行参数 > 系统属性 > properties > yml/yaml文件。
307 0
|
2月前
|
缓存 算法 C++
模型推理加速
大模型推理加速关键技术包括KV-Cache优化、连续批处理、投机解码与模型并行等,涵盖算法、系统与硬件协同优化。vLLM等框架通过PagedAttention提升效率,助力高并发、低延迟场景落地。
154 0
|
2月前
|
自然语言处理
主流大模型结构
本文系统梳理主流大模型架构:Encoder-Decoder(如T5)、Decoder-Only(如GPT)、Encoder-Only(如BERT)和Prefix-Decoder(如GLM),详解GPT、LLaMA及中文模型发展,对比参数、上下文与特性,助力理解架构差异与选型策略,涵盖面试核心要点。
175 0
|
19天前
|
存储 人工智能 并行计算
别再搞混了!一文看懂“显存”与“内存”:从办公桌到实验室的硬核分工
本文以生动比喻与硬核解析,深入浅出地讲清内存(RAM)与显存(VRAM)的本质区别:内存是CPU的通用工作台,显存是GPU的专用高速实验室。二者分工明确,数据需通过PCIe传输,无法互相替代。尤其在AI训练中,显存容量与带宽直接决定模型能否运行。文章结合代码实例、性能对比表及排错指南,帮助开发者理解“CUDA out of memory”等常见问题,并提供优化策略与云平台建议,是迈向高效AI开发的必读指南。
639 0
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
351 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
存储 NoSQL Java
苍穹外卖亮点再梳理 ||
苍穹外卖亮点再梳理 ||
991 4
|
前端开发 JavaScript
在Vue中,如何使用CSS过渡和动画来实现淡入淡出的效果?
在Vue中,如何使用CSS过渡和动画来实现淡入淡出的效果?
960 1
|
移动开发 小程序 API
uniapp组件库Popup 弹出层 的使用方法
uniapp组件库Popup 弹出层 的使用方法
1459 1