您的位置:首页 > 文旅 > 旅游 > 【Foundation】(二)transformers之Tokenizer

【Foundation】(二)transformers之Tokenizer

2024/12/27 17:07:06 来源:https://blog.csdn.net/qq_44426403/article/details/140959864  浏览:    关键词:【Foundation】(二)transformers之Tokenizer

文章目录

  • 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com