为了为tokenizer 指定额外的tokens,可以使用tokenizer 的add_special_tokens
或 add_tokens
方法。该方法允许我们向tokenizator添加自定义的tokens,以便在文本处理中使用。
下面是一些关于如何为tokenizer 指定额外的tokens的步骤:
1. 初始化tokenizer
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("model-name")
在这里,你需要将"model-name"替换为你想要使用的预训练模型的名称,例如"bert-base-uncased"。
2. 检查现有特殊符号
首先,你应该查看 tokenizer 当前配置的特殊符号,以确保不会重复添加相同的符号。
# 打印当前特殊符号
print(tokenizer.special_tokens_map)
3. 添加新的特殊符号
如果你发现 换行符 \n
或其他你需要的特殊符号不在当前的特殊符号列表中,你可以使用 add_special_tokens
方法来添加它们。
special_tokens_dict = {'additional_special_tokens': ['\n']}
tokenizer.add_special_tokens(special_tokens_dict)
在这里,你可以将 special_tokens_dict
替换为你想要添加的自定义tokens的列表,可以根据需要添加任意数量的tokens。
4. 调整模型
如果你打算使用一个已经加载的模型,并且这个模型是与上述 tokenizer 配对使用的,那么你也需要扩展模型的嵌入层(embedding layer)以适应新添加的特殊符号。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained('model-name')
# 扩展模型的嵌入层
model.resize_token_embeddings(len(tokenizer))
5. 验证添加
最后,你可以通过编码一些包含换行符的文本并解码回来,来验证换行符是否被正确识别为特殊符号。
test_text = "This is a line.\nThis is another line."
encoded_text = tokenizer.encode(test_text, return_tensors='pt')
decoded_text = tokenizer.decode(encoded_text[0])
print(decoded_text)
示例代码
这是一个示例代码,展示了如何为tokenizator指定额外的tokens,这里以换行符 \n
为例:
from transformers import AutoTokenizer
from transformers import AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("model-name")
special_tokens_dict = {'additional_special_tokens': ['\n']}
tokenizer.add_special_tokens(special_tokens_dict)
model = AutoModelForCausalLM.from_pretrained('model-name')
model.resize_token_embeddings(len(tokenizer)) # 扩展模型的嵌入层
test_text = "This is a line.\nThis is another line."
encoded_text = tokenizer.encode(test_text, return_tensors='pt')
decoded_text = tokenizer.decode(encoded_text[0])
print(decoded_text)