当前位置:   article > 正文

使用Hugging Face获取BERT预训练模型

使用Hugging Face获取BERT预训练模型

【图书推荐】《从零开始大模型开发与微调:基于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的引入与使用,代码如下:

  1. from transformers import BertTokenizer
  2. from transformers import BertModel
  3. tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
  4. pretrain_model = BertModel.from_pretrained("bert-base-chinese")

从网上下载该模型的过程如图11-8所示,模型下载完毕后即可使用。

下面的代码演示使用BERT编码器获取对应文本的Token。

  1. from transformers import BertTokenizer
  2. from transformers import BertModel
  3. tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
  4. pretrain_model = BertModel.from_pretrained("bert-base-chinese")
  5. tokens = tokenizer.encode("春眠不觉晓",max_length=12, padding="max_length", truncation=True)
  6. print(tokens)
  7. print("----------------------")
  8. print(tokenizer("春眠不觉晓",max_length=12,padding="max_length",truncation=True))

这里使用两种方法打印,打印结果如下:

  1. [101, 3217, 4697, 679, 6230, 3236, 102, 0, 0, 0, 0, 0]
  2. ----------------------
  3. {'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值,就使用如下代码。

  1. import torch
  2. from transformers import BertTokenizer
  3. from transformers import BertModel
  4. tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
  5. pretrain_model = BertModel.from_pretrained("bert-base-chinese")
  6. tokens = tokenizer.encode("春眠不觉晓",max_length=12,padding="max_length", truncation=True)
  7. print(tokens)
  8. print("----------------------")
  9. print(tokenizer("春眠不觉晓",max_length=12,padding="max_length",truncation=True))
  10. print("----------------------")
  11. tokens = torch.tensor([tokens]).int()
  12. print(pretrain_model(tokens))

打印结果如图11-9所示。最终获得一个维度为[1,12,768]大小的矩阵,用以表示输入的文本。

本文节选自《从零开始大模型开发与微调:基于PyTorch与ChatGLM》,获得出版社和作者授权发布。

《从零开始大模型开发与微调:基于PyTorch与ChatGLM(人工智能技术丛书)》(王晓华)【摘要 书评 试读】- 京东图书 (jd.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/759331
推荐阅读
相关标签
  

闽ICP备14008679号