tokenizer.encode、tokenizer.tokenize、tokenizer.encode_plus的用法差异

 一、tokenizer.encode和tokenizer.tokenize

tokenizer.tokenize :先分词,再转成id,直接输出tensor

tokenizer.encode :直接输出id,需要转换为tensor

sentence = "Hello, my son is cuting."
input_ids_method1 = torch.tensor(tokenizer.encode(sentence,add_special_tokens=True))  
# 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和tokenizer.encode_plus的区别

普通编码 tokenizer.encode()、增强编码 tokenizer.encode_plus()

tokenizer.encode_plus() 的编码方式比tokenizer.encode()在文本分类上的编码方式要好,在中文分类数据集上会有1个点左右的差别

1、tokenizer.encode仅返回input_ids

2、 tokenizer.encode_plus返回所有的编码信息,具体如下:

  • ’input_ids:是单词在词典中的编码
  • ‘token_type_ids’:区分两个句子的编码(上句全为0,下句全为1)
  • ‘attention_mask’:指定对哪些词进行self-Attention操作
# 编码错配! encode_plus 的编码方式比encode在文本分类上的编码方式要好

import torch 
from transformers import BertTokenizer
model_name =" bert-base-uncase"

tokenizer = BertTokenizener.from_pretrained(model_name)
sentence= "hello,myson"


-----------------------

print(tokenizer.encode(sentence))

[101, 7592, 1010, 2026, 2365, 2003, 5870, 1012, 102]
当tokenizer.encode函数中的add_special_tokens设置为False时,同样不会出现开头和结尾标记:[cls], [sep]

-----------------------

print(tokenizer.encode_plus(sentence))

{'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]}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝叶斯巴达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值