Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

  • tool

  • client

  • 网络

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

    • base

    • tools

    • local-llm

    • nlp基础

      • token
        • Token 是什么
        • BPE 算法
        • pad_token 报错解决
          • 错误信息
          • 原因
          • 解决方法
          • 检查
      • 向量
      • rnn
      • HuggingFace
  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • ai
  • nlp基础
Jacky
2025-05-13
目录

token

# Token 是什么

LLM 处理文本的最小单位,不是字也不是词。

  • 一个 token 可能是完整单词、单词的一部分、或标点
  • 例:understanding → under + standing(2 个 token)
  • 英文:1 单词 ≈ 1~1.5 token;中文:1 汉字 ≈ 1~2 token

为什么用 token 而不是词:

  • 减少词汇表大小
  • 能处理未知词(组合子词)
  • 跨语言效率高

处理流程:

文本 → 分词(tokenize) → 映射为数字ID → 输入模型
模型输出 → 预测下一个token ID → 转回文本
1
2

# BPE 算法

Byte Pair Encoding,基于统计的分词算法,GPT 系列广泛使用。

核心思想:迭代合并最频繁出现的字符对,构建词汇表。

步骤:

  1. 所有文本分解为单个字符
  2. 统计相邻字符对频率
  3. 合并最高频字符对为新子词
  4. 重复直到达到目标词汇表大小

示例:

初始: l o w / l o w e r / n e w e s t / w i d e s t
合并 es: l o w / l o w e r / n e w es t / w i d es t
...继续迭代
1
2
3

优势:

  • 处理未知词(子词组合)
  • 平衡词汇表大小与语义表示
  • 捕捉常见模式(ing、ed 等后缀)
  • 跨语言适用

# pad_token 报错解决

# 错误信息

Asking to pad but the tokenizer does not have a padding token.
1

# 原因

批量处理时需要把不等长序列填充到相同长度,但 tokenizer 没有设置 pad_token。GPT-2 等模型默认没有 pad_token。

句子A: [Hello, world]      → 长度2
句子B: [Hi]                → 长度1
需统一: [Hello, world, PAD] / [Hi, PAD, PAD]
1
2
3

# 解决方法

方法一(推荐):用已有的 eos_token 当 pad_token

tokenizer.pad_token = tokenizer.eos_token
1

方法二:添加新的 pad token

tokenizer.add_special_tokens({'pad_token': '[PAD]'})
model.resize_token_embeddings(len(tokenizer))  # 模型也要 resize
1
2

# 检查

print(tokenizer.pad_token)              # None 就是没设置
print(tokenizer.special_tokens_map)
1
2
#NLP#AI#LLM
上次更新: 2026/09/10, 20:52:09
LangChain + Ollama 本地 Agent
向量

← LangChain + Ollama 本地 Agent 向量→

最近更新
01
direnv
09-09
02
nvim
09-09
03
wget
09-09
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式