【学习总结】Python transformers AutoTokenizer encode 出现的 101 和 102

1. 代码展示:

python 复制代码
from transformers import AutoTokenizer, AutoModel

model_name = "bert-base-chinese"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

print(len(tokenizer.vocab.keys()))

sequence = "法国的首都是巴黎"
print(tokenizer.vocab["法"])
tokens = tokenizer.tokenize(sequence)
print(tokens)

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

token_ids_s2e = tokenizer.encode(sequence)
print(token_ids_s2e)

输出结果:

bash 复制代码
21128
3791
['法', '国', '的', '首', '都', '是', '巴', '黎']
[3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944]
[101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102]

token_ids_s2e 中多了 101 和 102

python 复制代码
sequence1 = tokenizer.decode(token_ids)
print(sequence1)

sequence2 = tokenizer.decode(token_ids_s2e)
print(sequence2)

输出结果:

bash 复制代码
法 国 的 首 都 是 巴 黎
[CLS] 法 国 的 首 都 是 巴 黎 [SEP]

101 代表 CLS,是文本的开头

102 代表 SEP,是文本的分隔符

2. 编解码多段文本

python 复制代码
sequence_batch = ["法国的首都是巴黎","美国的首都是华盛顿特区" ]
token_ids_batch = tokenizer.encode(sequence_batch)
print(token_ids_batch)
sequence_batch = tokenizer.decode(token_ids_batch)
print(sequence_batch)

输出结果:

powershell 复制代码
[101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102]
[CLS] 法 国 的 首 都 是 巴 黎 [SEP] 美 国 的 首 都 是 华 盛 顿 特 区 [SEP]

3. 实际操作

python 复制代码
embedding_batch = tokenizer("法国的首都是巴黎","美国的首都是华盛顿特区")
print(embedding_batch)

输出:

bash 复制代码
{'input_ids': [101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

优化代码

python 复制代码
for key, value in embedding_batch.items():
    print(f"{key}: {value}\n")

输出:

bash 复制代码
input_ids: [101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102]

token_type_ids: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

attention_mask: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

编码后返回结果是:

bash 复制代码
input_ids: token_ids
token_type_ids: token_id 归属的句子编号
attention_mask: 指示哪些token需要被关注(注意力机制)

4. 查看词表

python 复制代码
from itertools import islice

# 使用 islice 查看词表部分内容
for key, value in islice(tokenizer.vocab.items(), 30,40):
    print(f"{key}: {value}")

输出结果:

python 复制代码
叼: 1388
赓: 6607
##禀: 17937
骡: 7751
ing: 10139
滙: 4002
##楼: 16574
##部: 20013
##针: 20208
##酥: 20046
相关推荐
Blossom.11810 小时前
把AI“撒”进农田:基于极值量化与状态机的1KB边缘灌溉决策树
人工智能·python·深度学习·算法·目标检测·决策树·机器学习
Red Car10 小时前
如何向文件夹内所有PDF增加水印
python·pdf
Q_Q51100828510 小时前
python+uniapp基于微信小程序团购系统
spring boot·python·微信小程序·django·uni-app·node.js·php
java1234_小锋10 小时前
TensorFlow2 Python深度学习 - 循环神经网络(LSTM)示例
python·rnn·深度学习·tensorflow2
Costrict11 小时前
解锁新阵地!CoStrict 现已支持 JetBrains 系列 IDE
大数据·ide·人工智能·深度学习·自然语言处理·ai编程·visual studio
zybsjn11 小时前
MCP传输模式选择指南:Stdio与HTTP的终极对比
ai编程
测试老哥11 小时前
Postman环境变量设置全攻略
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
惜月_treasure12 小时前
Text2SQL与工作流实现:让数据库查询变得轻松又高效
数据库·人工智能·python
腾讯云云开发12 小时前
云开发CloudBase AI+实战:快速搭建AI小程序全流程指南
agent·ai编程·小程序·云开发
QT 小鲜肉12 小时前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法