96SEO 2026-08-15 01:01 0
无论是 ChatGPT、DeepSeek 还是 Qwen,所有大语言模型的第一步先都是把文本变成数字。这个过程看似简单,但分词器的设计直接决定了模型的参数量、序列长度和最终效果。

这篇文章参考 MiniMind 项目的架构,从零实现了一个完整的 Tokenizer 训练流程。包含:
Token 是模型处理的最小语义单元它既不是字符,也不是传统意义上的词,而是一个介于两者之间的概念。
原始文本 → Tokenizer → Token ID 序列 → Embedding 层 → 向量序列
"Hello world" → → E,E →
| 粒度 | 优点 | 缺点 |
|---|---|---|
| 字符级 | 词表极小,无 OOV 问题 | 序列极长,模型难以捕捉长距离依赖 |
| 词级 | 语义完整。符合人类直觉 | 词表巨大,OOV 问题严重 |
| Subword 级 | 平衡序列长度和词表大小,需要额外算法 |
User Pain Point: 在实际项目中经常遇到「OOV」导致模型崩溃,或「序列过长」导致显存爆炸,这正是选择合适粒度的根本原因。
Subword 分词的主要思想是:常用词保留完整,低频词拆成更小的片段。BPE 就是最经典的 Subword 算法。话说回来,
BPE的主要思想是迭代合并:
A concrete example:
# 初始词表 {l。o,w,e,r,...}
# "lower" 出现频繁
# 第1轮:合并 -> "lo"
# 第2轮:合并 -> "low"
# 第3轮:合并 -> "lower"
#…直到 vocab 达到目标大小
Pain Point: 如果停止条件设置得太小。会导致高频单字仍被拆分成多个子块,压缩率低;太大又会导致 Embedding 参数暴涨。
| 特性 | BPE | WordPiece | SentecePiece |
|---|---|---|---|
| *主要思想* | *迭代合并高频相邻对* | *最大化似然概率的 pair 剪枝* | *自顶向下概率剪枝* |
| *建立方向* | *自底向上* | *自底向上* | *自顶向下* |
| *典型模型* | GPT‑系列、LLaMA、Qwen * | BERT、T5、ALBERT * | T5‑style 模型 * |
The implementation in this guide is **ByteLevel BPE** – scheme used by GPT‑系列 and Qwen.
"Garbage in,garbage out"——数据质量直接决定词表质量。 下面展示关键步骤还有对应痛点提示。
def clean_text:
text = RE_HTML_TAG.sub # 去除 HTML 标签
text = RE_URL.sub # 去除 URL
text = RE_CONTROL_CHAR.sub # 去除控制字符
text = RE_ZERO_WIDTH.sub # 去除零宽字符
text = RE_SPECIAL_CHAR.sub # 去除特殊 Unicode 字符
text = RE_MULTI_SPACE.sub # 折叠多余空白
text = RE_MULTI_NEWLINE.sub # 折叠多余换行
return text.strip # 首尾空白去除
Pain Point: 未经清洗的数据往往混杂大量 HTML/URL/控制字符。导致 BPE 合并规则被噪声占据,从而降低压缩率。
def is_valid:
length = len
if length MAX_LENGTH: return False,"长度过长"
chinese_ratio = len) / length
if chinese_ratio MAX_SYMBOL_RATIO: return False,"符号污染"
return True。"通过"
| "过滤规则" | "阈值" | "作用" |
|---|---|---|
| "长度" | "5~5000" | "剔除异常超短或超长句子" |
| "中文占比" | "≥0.6" | "保证中文信息量" |
| "符号比例" | "<=0.15" | "过滤纯符号噪声" |
Pain Point: 若不做质量过滤,大量无意义或噪声文本会让 BPE 学到无价值的子块,使得真实业务句子的 token 数反而增加。
The pipeline provides two deduplication strategies for different scenarios.
# 原理:
对文本计算 64 位指纹 → 海明距离 ≤ 阈值视为重复
# 优点:
速度快 O,适用于海量抓取数据
# 场景:
复制粘贴、转载稿件等高度相同内容
# 原理:
提取 n-gram → 计算 MinHash 签名 → LSH 分桶加速 → Jaccard 相似度 ≥ 阈值视为重复
# 优点:
能捕获 SimHash 漏掉的细粒度相似
# 场景:
、翻译、摘录等
Pain Point : 在实际爬虫业务中。同一篇文章往往会出现多次轻微 如果只用 SimHash 会留下大量“伪独立”样本,浪费算力和硬盘空间。
="" ”>texts:
with open as f:
for i,line in enumerate:
if maxlines and i>= max_lines:
break
data = json.loads
yield data
Pain Point: Directly loading a multi‑GB corpus into memory will OOM. Using a generator keeps memory footprint constant.
="" ”>
tokenizer = Tokenizer)
ByteLevel 预分词
="" ”>tokenizer = pretokenizers.ByteLevel
Why ByteLevel?
传统字符级 BPE 在中文会产生数千个单字 token,使得 vocab 爆炸;ByteLevel 把每个 Unicode 字符拆成 UTF‑8 字节。初始 vocab 只有256 个字节,加上后续合并即可覆盖所有语言,无 OOV 风险。
配置训练器
="" ”>size=30000,specialtokens=,showprogress=True。initialalpha娱乐=pre_tokenizers.ByteLevel.alpha娱乐
)
Special Token ID Description Purpose
/ < ; ; ; ; ; ; ; ;
…
Pain Point: 忽略 Special Tokens 的 ID 分配会导致后续 fine‑tune 时 pad/eos/bos 对齐错误,引发训练崩溃。说起来,
执行训练
texts = gettexts
tokenizer.trainfrom_iterator
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback