[一起学BERT](二):BERT快速使用
基于pytorch1.4BERT模型本质是一种词嵌入模型,也是句子嵌入模型,输入的最大长度是512BERT模型把离散的单词变成了空间中连续的向量,即把一个单词变成向量Bert词向量模型的好处:对比word2vec,包含了语境(context)信息对比ELMo,速度快,并行程度高对比GPT模型,包含双向(bidirectional)语境信息在各类NLP任务上效果出众,例如文本分类、问答、词性标注、实
·
快速使用
基于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是保留大小写。
更多推荐
已为社区贡献7条内容
所有评论(0)