HuggingFace系列 P2 BertTokenizer分词和编码
上一节介绍了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://ichenhua.cn/edu/note/512
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!