文章目录
- 1、介绍
- 2、保存与加载
- 3、句子分词
- 4、索引转换
- 5、填充与阶段
- 6、其他输入部分
- 7、快速调用
- 8、处理batch数据
本篇博客内容以及后续内容均来自b站up主你可是处女座啊
1、介绍
- 数据预处理
- step1 分词:使用分词器对分本数据进行分词(字、词)
- step2 构建词典:根据数据集分词得结果,构建词典映射字典
- step3 数据转换:根据构建好得词典,将分词处理后得数据做映射, 将文本序列转化为数字序列;
- step4 数据填充与截断:在以batch输入到模型得方式中,需要对果断地数据进行填充,过长地数据进行截断,保证数据长度符合模型能够接受地长度范围,同时batch内地数据维度大小一致
- tokenizer 基本使用
- 加载保存(from_pretrained/save_pretrained)
- 句子分词(tokenize)
- 查看词典(vocab)
- 索引转换(convert_tokens_to_ids/convert_ids_to_tokens)
- 填充截断(padding/truncation)
- 其他输入(attention_mask/token_type_ids)
#通用分词器
from transformers import AutoTokenizer
sen = "弱小的我也有大梦想"
2、保存与加载
加载开源的tokenizer
tokenizer = AutoTokenizer.from_pretrained('uer/roberta-base-finetuned-dianping-chinese')
tokenizer
保存到本地;
#保存到本地
tokenizer.save_pretrained('./roberta_tokenizer')
本地加载
#本地加载
tokenizer= AutoTokenizer.from_pretrained('./roberta_tokenizer')
tokenizer
3、句子分词
tokens = tokenizer.tokenize(sen)
tokens
output
['弱', '小', '的', '我', '也', '有', '大', '梦', '想']
查看词典
tokenizer.vocab
查看词典大小
tokenizer.vocab_size
4、索引转换
#将词序转换为id序列
ids = tokenizer.convert_tokens_to_ids(tokens)
ids
output
[2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682]
#将id转换为token序列
tokens = tokenizer.convert_ids_to_tokens(ids)
tokens
output
['弱', '小', '的', '我', '也', '有', '大', '梦', '想']
#将token转换为string
str_sen = tokenizer.convert_tokens_to_string(tokens)
str_sen
output
‘弱 小 的 我 也 有 大 梦 想’
在这里插入代码片
#更便捷的方式
ids = tokenizer.encode(sen)
# ids = tokenizer.encode(sen,add_special_tokens=Flase)
ids
output
[101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 102]
# 将id序列转换为字符串
str_sen = tokenizer.decode(ids)
# str_sen = tokenizer.decode(ids,skip_special_tokens=True)
str_sen
output
'[CLS] 弱 小 的 我 也 有 大 梦 想 [SEP]'
5、填充与阶段
#填充
ids = tokenizer.encode(sen,padding='max_length',max_length=15)
ids
output
[101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 102, 0, 0, 0, 0]
#截断
ids = tokenizer.encode(sen,max_length=5,truncation=True)
ids
[101, 2483, 2207, 4638, 102]
6、其他输入部分
ids = tokenizer.encode(sen,padding='max_length',max_length=15)attention_mask = [1 if idx !=0 else 0 for idx in ids]token_type_ids = [0] * len(ids)ids,attention_mask,token_type_ids
7、快速调用
inputs = tokenizer.encode_plus(sen,padding='max_length',max_length=15)
inputs
8、处理batch数据
sens = ['弱小的我也有大梦想,加油','我的未来不是梦','追梦赤子心']
res = tokenizer(sens)
res