基于pytorch1.4
BERT模型本质是一种词嵌入模型,也是句子嵌入模型,输入的最大长度是512
BERT模型把离散的单词变成了空间中连续的向量,即把一个单词变成向量
Bert词向量模型的好处:
#!/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类模型:
Uncased的意思是在预处理的时候都变成了小写,而cased是保留大小写。