上一节介绍了transformers的安装,和预训练模型的加载方法,本节我们结合一个例子,来介绍预训练模型的使用过程。
使用 BERT 这个预训练模型,主要分为两步:第一步,使用 BertTokenizer 进行分词,并将词转化为id;第二步,使用 BertModel 进行词编码,将每个词编码成 768 维的向量。
类比之前项目的场景,就是 word2vec 的 word2id 和 embedding 过程。
代码示例
1、单句分词
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('./huggingface/bert-base-chinese')
# 分词并编码
token = tokenizer.encode('北京欢迎你')
print(token)
# [101, 1266, 776, 3614, 6816, 872, 102]
# 简写形式
token = tokenizer('北京欢迎你')
# 解码
print(tokenizer.decode([101, 1266, 776, 3614, 6816, 872, 102]))
# 查看特殊标记
print(tokenizer.special_tokens_map)
# 查看特殊标记对应id
print(tokenizer.encode(['[UNK]', '[SEP]', '[PAD]', '[CLS]', '[MASK]'], add_special_tokens=False))
# [100, 102, 0, 101, 103]
2、批处理
# 等长填充 batch_token1 = tokenizer(['北京欢迎你', '为你开天辟地'], padding=True, return_tensors='pt') print(batch_token1) print(batch_token1['input_ids']) # 截断 batch_token2 = tokenizer(['北京欢迎你', '为你开天辟地'], max_length=5, truncation=True) print(batch_token2) # 填充到指定长度,超过的截断 batch_token3 = tokenizer(['北京欢迎你', '为你开天辟地'], max_length=10, truncation=True, padding='max_length') print(batch_token3)
3、词向量编码
from transformers import BertModel
from transformers import logging
logging.set_verbosity_error()
model = BertModel.from_pretrained('./huggingface/bert-base-chinese')
encoded = model(batch_token1['input_ids'])
print(encoded)
encoded_text = encoded[0]
print(encoded_text.shape)
本文为 陈华 原创,欢迎转载,但请注明出处:http://www.chenhuax.com/read/434