encode和encode_plus和tokenizer的区别
作者:互联网
1.encode和encode_plus的区别
区别
1. encode仅返回input_ids
2. encode_plus返回所有的编码信息,具体如下:
’input_ids:是单词在词典中的编码
‘token_type_ids’:区分两个句子的编码(上句全为0,下句全为1)
‘attention_mask’:指定对哪些词进行self-Attention操作
代码演示:
import torch from transformers import BertTokenizer model_name = 'bert-base-uncased' # a.通过词典导入分词器 tokenizer = BertTokenizer.from_pretrained(model_name) sentence = "Hello, my son is laughing." print(tokenizer.encode(sentence)) print(tokenizer.encode_plus(sentence))
运行结果:
[101, 7592, 1010, 2026, 2365, 2003, 5870, 1012, 102] {'input_ids': [101, 7592, 1010, 2026, 2365, 2003, 5870, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
2.encode和tokeninze方法的区别
- 直接上代码比较直观(其中处理的句子是随便起的,为了凸显WordPiece功能):
sentence = "Hello, my son is cuting." input_ids_method1 = torch.tensor( tokenizer.encode(sentence, add_special_tokens=True)) # Batch size 1 # tensor([ 101, 7592, 1010, 2026, 2365, 2003, 3013, 2075, 1012, 102]) input_token2 = tokenizer.tokenize(sentence) # ['hello', ',', 'my', 'son', 'is', 'cut', '##ing', '.'] input_ids_method2 = tokenizer.convert_tokens_to_ids(input_token2) # tensor([7592, 1010, 2026, 2365, 2003, 3013, 2075, 1012]) # 并没有开头和结尾的标记:[cls]、[sep]
(当tokenizer.encode函数中的add_special_tokens设置为False时,同样不会出现开头和结尾标记:[cls], [sep]。)
从例子中可以看出,encode方法可以一步到位地生成对应模型的输入。
相比之下,tokenize只是用于分词,可以分成WordPiece的类型,并且在分词之后还要手动使用convert_tokens_to_ids方法,比较麻烦。
通过源码阅读,发现encode方法中调用了tokenize方法,所以在使用的过程中,我们可以通过设置encode方法中的参数,达到转化数据到可训练格式一步到位的目的,下面开始介绍encode的相关参数与具体操作。
标签:tokenizer,sentence,ids,7592,plus,encode,input 来源: https://www.cnblogs.com/a-runner/p/15408699.html