Abner的博客

Transformers-入门篇

· 341 words · 2 minutes to read
Categories: AI

代码:https://colab.research.google.com/drive/1VO2FJqN2D2LnByGQsXYbZ0GbzYYe-JCo#scrollTo=z2c4EnOjYc5l

第一章:AutoTokenizer 🔗

第1步、模型加载 🔗

from transformers import AutoTokenizer
#从huggingface加载模型,输入模型名称,即可加载对应的分词器
tokenizer=AutoTokenizer.from_pretrained("uer/roberta-xlarge-wwm-chinese-cluecorpussmall")


# 默认会存在 系统用户的【.cache->huggingface->hub->model-{模型名称}->snapshots】目录里面
# 指定保存模型到本地目录
tokenizer.save_pretrained("./roberta_tokenizer")

# 从本地加载tokenizer
tokenizer=AutoTokenizer.from_pretrained("./roberta_tokenizer")
tokenizer

第2步、句子分词 🔗

# 分词
# 当前模型会拆分成一个个字,每个模型不一样
sen="弱小的我也有大梦想"
tokens=tokenizer.tokenize(sen)
tokens
# ['弱', '小', '的', '我', '也', '有', '大', '梦', '想']

第3步、查看词典 🔗

# 中文 '##榭': 16588,  ##无意义。但是英文会把一个单词拆成词根
tokenizer.vocab

tokenizer.vocab_size

第4步、索引转换 🔗

# 将词序转换成id序列,进入神经网络
ids=tokenizer.convert_tokens_to_ids(tokens)
ids
# [2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682]

# 将词序转成tokens
tokens=tokenizer.convert_ids_to_tokens(ids)
tokens
# ['弱', '小', '的', '我', '也', '有', '大', '梦', '想']

# 将token转回成字符串
str_sen = tokenizer.convert_tokens_to_string(tokens)
str_sen
# '弱 小 的 我 也 有 大 梦 想'

便捷调用 🔗

# 将词序转换成id序列,编码
ids=tokenizer.encode(sen)
ids
# [101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 102]

# 序列多了 101和102 模型的词开始和结束,如果不需要
ids=tokenizer.encode(sen,add_special_tokens=False)


# 将id转换成字符串,解码
str_sen=tokenizer.decode(ids,skip_special_tokens=True)
str_sen

第5步:填充和截断 🔗

# 填充
ids=tokenizer.encode(sen,padding="max_length",max_length=15)
ids # [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]

快捷调用 🔗

# 填充真实有效部分
inputs=tokenizer.encode_plus(sen,padding="max_length",max_length=15)
inputs

# 简洁写法
inputs=tokenizer(sen,padding="max_length",max_length=15)
inputs

第6步:处理批数据 🔗

sens=[
    "弱小的我也有大梦想",
    "有梦想谁都了不起",
    "迎着风追逐梦想"
]
inputs=tokenizer(sens)
inputs # {'input_ids': [[101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 102], [101, 3300, 3457, 2682, 6443, 6963, 749, 679, 6629, 102], [101, 6816, 4708, 7599, 6841, 6852, 3457, 2682, 102]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]}

Fast/ Slow Tokenizer 🔗

sen="我有一个梦想Dreaming!"

# Fast基于Rust实现,slow基于Python实现

fast_tokenizer = AutoTokenizer.from_pretrained("uer/roberta-xlarge-wwm-chinese-cluecorpussmall")
fast_tokenizer
# slow_tokenizer = AutoTokenizer.from_pretrained("uer/roberta-xlarge-wwm-chinese-cluecorpussmall", use_fast=False)
# slow_tokenizer

特殊的加载 🔗

# 远程仓库里面有自有实现的分词器代码 trust_remote_code调用
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b",trust_remote_code=True)
tokenizer

第二章:Model基本使用 🔗

模型加载与保存 🔗

from transformers import AutoModel

模型下载 🔗

# 强制下载
model=AutoModel.from_pretrained("hfl/rbt3",force_download=True)  

# git下载:git clone "模型地址"  ,如果只需要模型的部分指定文件,可使用 git lfs clone "模型地址" --include="*.bin" 

# 离线下载
model=AutoModel.from_pretrained("/User/Download/hfl/rbt3")  

模型参数 🔗

config=AutoConfig.from_pretrained("hfl/rbt3")

模型调用 🔗

sen="弱小的我也有大梦想"
tokenizer=AutoTokenizer.from_pretrained("hfl/rbt3")
inputs=tokenizer(sen,return_tensors="pt")
inputs

不带Model Head的模型调用 🔗

model=AutoModel.from_pretrained("hfl/rbt3")
ouput=model(**tokenizer(sen,return_tensors="pt"))
ouput

带Model Head的模型调用 🔗

form transformers import AutoModelForSequenceClassification
clz_model=AutoModelForSequenceClassification.from_pretrained("hfl/rbt3")
ouput=model(**tokenizer(sen,return_tensors="pt"))
ouput

第三章:Datasets基本使用 🔗

加载在线数据集 🔗

from datasets import *
datasets=load_dataset("madao33/new-title-chinese")
datasets

加载数据集合集中的某一项任务 🔗

datasets=load_dataset("super_glue","boolq")
datasets

按照数据集划分进行加载 🔗

datasets=load_dataset("madao33/new-title-chinese",split="train")
datasets

Tags