[一起学BERT](二):BERT快速使用

快速使用

基于pytorch1.4

BERT模型本质是一种词嵌入模型,也是句子嵌入模型,输入的最大长度是512

BERT模型把离散的单词变成了空间中连续的向量,即把一个单词变成向量

Bert词向量模型的好处:

  • 对比word2vec,包含了语境(context)信息
  • 对比ELMo,速度快,并行程度高
  • 对比GPT模型,包含双向(bidirectional)语境信息
  • 在各类NLP任务上效果出众,例如文本分类、问答、词性标注、实体识别等等
  • 有预训练模型,只需要微调即可
#!/usr/bin/env python
# coding: utf-8


from transformers import BertTokenizer,BertModel
# BertTokenizer:分词工具
# BertModel:Bert模型
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertModel.from_pretrained("bert-base-chinese")



inputs = tokenizer('让我们来试试Bert模型吧',return_tensors='pt')  # 指定的类型必须是pytorch
# 如果是两个句子前面就写两句
#inputs = tokenizer('让我们来试试Bert模型吧','Bert模型很厉害吧',return_tensors='pt')
print(inputs)
'''
{'input_ids': tensor([[ 101, 6375, 2769,  812, 3341, 6407, 6407,  100, 3563, 1798, 1416,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}
'''


tokenizer.decode(inputs['input_ids'].data.cpu().numpy().reshape(-1))  # UNK表示Unknow,句首自动加[CLS],句尾自动加[SEP]
''''[CLS] 让 我 们 来 试 试 [UNK] 模 型 吧 [SEP]''''


outputs = model(**inputs)
sequence_outputs,pooled_outputs = outputs

# token embedding,BERT词向量
outputs[sequence_outputs].shape  # 12是12个input_ids生成的向量,768是Bert-base模型默认768维度的向量
'''torch.Size([1, 12, 768])'''

# sentence embedding,句子向量
outputs[pooled_outputs].shape
'''torch.Size([1, 768])'''

模型类别

Google提供了预训练的模型(的checkpoint),目前包括英语、汉语和多语言3类模型:

  • BERT-Base, Uncased:12层,768隐藏,12头,110M参数
  • BERT-Large, Uncased:24层,1024个隐藏,16个头,340M参数
  • BERT-Base, Cased:12层,768隐藏,12头,110M参数
  • BERT-Large, Cased:24层,1024个隐藏,16个头,340M参数
  • BERT-Base, Multilingual Cased (New, recommended):104种语言,12层,768隐藏,12头,110M参数
  • BERT-Base, Multilingual Uncased (Orig, not recommended) (不推荐使用,Multilingual Cased代替使用):102种语言,12层,768隐藏,12头,110M参数
  • BERT-Base, Chinese:中文简体和繁体,12层,768隐藏,12头,110M参数

Uncased的意思是在预处理的时候都变成了小写,而cased是保留大小写。

你可能感兴趣的:(NLP,机器学习,深度学习,自然语言处理,nlp,bert)