我是在使用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": "<CLS>"} 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=['<DIVIDE>'] tokenizer.add_tokens(tokens)
(后来查了一下发现用add_special_tokens()的话只要把键设置成additional_special_tokens就行了)
以上两种做法运行后都需要resize模型中的embedding层:model.resize_token_embeddings(len(tokenizer))