【图书推荐】《从零开始大模型开发与微调:基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客
BERT是一个预训练模型,其基本架构和存档都有相应的服务公司提供下载服务,而Hugging Face是一家目前专门免费提供自然语言处理预训练模型的公司。
Hugging Face是一家总部位于纽约的聊天机器人初创服务商,开发的应用在青少年中颇受欢迎,相比于其他公司,Hugging Face更加注重产品带来的情感以及环境因素。在GitHub上开源的自然语言处理、预训练模型库Transformers提供了NLP领域大量优秀的预训练语言模型和调用框架。
(1) 安装依赖。
安装Hugging Face依赖的方法很简单,命令如下:
pip install transformers
安装完成后,即可使用Hugging Face提供的预训练模型BERT。
(2) 使用Hugging Face提供的代码格式进行BERT的引入与使用,代码如下:
from transformers import BertTokenizer
from transformers import BertModeltokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
pretrain_model = BertModel.from_pretrained("bert-base-chinese")
从网上下载该模型的过程如图11-8所示,模型下载完毕后即可使用。
下面的代码演示使用BERT编码器获取对应文本的Token。
from transformers import BertTokenizer
from transformers import BertModeltokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
pretrain_model = BertModel.from_pretrained("bert-base-chinese")
tokens = tokenizer.encode("春眠不觉晓",max_length=12, padding="max_length", truncation=True)
print(tokens)
print("----------------------")print(tokenizer("春眠不觉晓",max_length=12,padding="max_length",truncation=True))
这里使用两种方法打印,打印结果如下:
[101, 3217, 4697, 679, 6230, 3236, 102, 0, 0, 0, 0, 0]
----------------------
{'input_ids': [101, 3217, 4697, 679, 6230, 3236, 102, 0, 0, 0, 0, 0], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]}
第一行是使用encode函数获取的Token,第二行是直接对其加码获取的3种不同的Token表示,对应11.1节说明的BERT输入,请读者验证学习。
需要注意的是,我们输入的是5个字符“春眠不觉晓”,而在加码后变成了7个字符,这是因为BERT默认会在单独的文本中加入[CLS]和[SEP]作为特定的分隔符。
如果想打印使用BERT计算的对应文本的Embedding值,就使用如下代码。
import torch
from transformers import BertTokenizer
from transformers import BertModeltokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
pretrain_model = BertModel.from_pretrained("bert-base-chinese")tokens = tokenizer.encode("春眠不觉晓",max_length=12,padding="max_length", truncation=True)
print(tokens)
print("----------------------")
print(tokenizer("春眠不觉晓",max_length=12,padding="max_length",truncation=True))
print("----------------------")tokens = torch.tensor([tokens]).int()
print(pretrain_model(tokens))
打印结果如图11-9所示。最终获得一个维度为[1,12,768]大小的矩阵,用以表示输入的文本。
本文节选自《从零开始大模型开发与微调:基于PyTorch与ChatGLM》,获得出版社和作者授权发布。
《从零开始大模型开发与微调:基于PyTorch与ChatGLM(人工智能技术丛书)》(王晓华)【摘要 书评 试读】- 京东图书 (jd.com)