使用transformers增加token

诸神缄默不语-个人CSDN博文目录

我是在使用transformers的过程中需要添加一个新的分隔符来区分问题和4个选项,但是我看了一下Tokenizer对象好像每个元素要么是一句话,要么是两句话,就不能有5个文本的这种情况,所以我就自己加了个分隔符。

我的环境:
Linux系统
Python 3.8(使用anaconda管理的虚拟环境)
PyTorch 1.11+cudatoolkit 10.2(通过anaconda下载)
transformers 4.21.1

我一开始想尝试使用add_special_tokens()方法(文档:https://huggingface.co/docs/transformers/v4.21.1/en/internal/tokenization_utils#transformers.SpecialTokensMixin.add_special_tokens),使用方式是:

special_tokens_dict = {"cls_token": ""}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)

但是需要注意的是这里special_tokens_dict的键必须是一个special token,否则就会报AssertionError: Key 键 is not a special token。所以意思是这一步是将special token替换成指定值。

因为我想自定义一个,所以我直接改用了add_tokens()方法(文档:https://huggingface.co/docs/transformers/v4.21.1/en/internal/tokenization_utils#transformers.SpecialTokensMixin.add_tokens),使用方式是:

tokens=['']
tokenizer.add_tokens(tokens)

(后来查了一下发现用add_special_tokens()的话只要把键设置成additional_special_tokens就行了)

以上两种做法运行后都需要resize模型中的embedding层:model.resize_token_embeddings(len(tokenizer))

本文撰写过程中所使用的参考资料:

  1. transformer不同版本BertTokenizer添加特殊占位符号 - 知乎
  2. 深度学习实战(4)如何向BERT词汇表中添加token,新增特殊占位符_icebird_craft的博客-CSDN博客_bert token

你可能感兴趣的:(人工智能学习笔记,NLP,自然语言处理,transformers,BERT,深度学习)