HuggingFaceBERT tokenizer.encode笔记

鉴于之前确实没有好好阅读官方文档和论文,对于bert tokenizer的截断和填充是用列表进行操作,且是直接补0。

其实tokenizer.encode有填补和截断的操作

目录

encoder参数

import


encoder参数

encode(text: Union[str, List[str], List[int]], 
text_pair: Union[str, List[str], List[int], NoneType] = None, 
add_special_tokens: bool = True, 
padding: Union[bool, str, transformers.file_utils.PaddingStrategy] = False, 
truncation: Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = False, 
max_length: Union[int, NoneType] = None, 
stride: int = 0, 
return_tensors: Union[str, transformers.file_utils.TensorType, NoneType] = None, **kwargs) 
-> List[int] method of transformers.models.bert.tokenization_bert.BertTokenizer instance
input_ids = torch.tensor(tokenizer.encode(sentence, add_special_tokens=True, max_length = 100,padding='max_length', truncation=True))

假如输入这样一句话

sentence = "I like learning natural language processing! I like learning natural language processing! I like learning natural language processing! I like learning natural language processing!"

将其填补到100

input_ids = torch.tensor(tokenizer.encode(sentence, add_special_tokens=True, max_length = 100,padding='max_length', truncation=True))

打印

print(input_ids.shape, '\n', input_ids)

 可以看一下对应的分词情况

encode = tokenizer.decode(input_ids)
encode

同样的方法看一下截断的效果

 截断到10

想要多长的长度直接更改max_length即可,最大512

input_ids = torch.tensor(tokenizer.encode(sentence, add_special_tokens=True, max_length=10, padding='max_length', truncation=True))
print(input_ids.shape, '\n', input_ids)
encode = tokenizer.decode(input_ids)
print(encode)

 可以看出来我之前用for循环去操作列表是非常愚蠢的行为,看来还是在实践之前多读论文多看官方文档,多使用help()。

import

from transformers import BertModel, BertTokenizer
# 这里我们调用bert-base模型,同时模型的词典经过小写处理
model_name = 'bert-base-uncased'
# 读取模型对应的tokenizer
tokenizer = BertTokenizer.from_pretrained(model_name, cache_dir='./transformers/bert-base-uncased/')

import torch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(torch.__version__, device)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:tokenizer.tokenize() 返回词列表 默认首尾不加 \[CLS\] \[SEP\] okenizer.encode() 返回词id列表 默认首尾加 \[CLS\] \[SEP\]对应的词id。引用\[2\]:tokenizer.encode_plus返回所有的编码信息,包括input_ids、token_type_ids和attention_mask。其中input_ids是单词在词典中的编码,token_type_ids用于区分两个句子的编码,attention_mask指定对哪些词进行self-Attention操作。当add_special_tokens设置为False时,不会在编码中加入开头和结尾的标记\[CLS\]和\[SEP\]。引用\[3\]:tokenizer.encode直接输出词的id,可以通过convert_tokens_to_ids方法将词转换为id。在使用tokenizer.encode时,如果add_special_tokens设置为True,则会在编码中加入开头和结尾的标记\[CLS\]和\[SEP\]。 #### 引用[.reference_title] - *1* [tokenizer.tokenize(), tokenizer.encode() , tokenizer.encode_plus() 方法介绍及其区别](https://blog.csdn.net/qq_45056135/article/details/127748482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [tokenizer.encodetokenizer.tokenize、tokenizer.encode_plus的用法差异](https://blog.csdn.net/qq_41900846/article/details/128185135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值