关于特殊标记在大模型微调中产生的影响的疑问
qq_42151063 2024-11-20 16:43:13
人工智能nlp
求教 special token 在 LLM 训练中发挥的作用?以 Qwen2-VL 为例:
在 Qwen2-VL 的 tokenizer.json 文件中存在着诸如以下展示的 <|box_start|>
、<|box_end|>
为了下游任务中指定的 special token:
...
{
"id": 151648,
"content": "<|box_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
{
"id": 151649,
"content": "<|box_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
...
在我通过微调 Qwen2-VL 的模型来完成一个模型过去从未接触过的领域下游任务时,我对 special token 的使用产生以下的几点疑惑:
1. 这类和下游任务相关的 special token 是否是为了高效地引导一个通用模型完成指定任务而设计的?也就是说使用 special token 是否意味着使用更少的训练数据就能够让模型快速的学会一个新的下游任务?
2. 对于一个模型过去从未接触过的领域下游任务,是否有必要在我的 question-response 形式的训练集的中加入一个针对该任务的 special token?
3. 如果针对一个新的任务需要自定义一个对应的 special token,以下的两种方式有什么区别?
- 仅仅在指令中直接以文本的简单形式加入我设计好的 token <|xxxxx|>
,而不改动 tokenizer 的设置。
- 像 Qwen2-VL 的论文中所做的在 tokenizer.json 文件的 added_tokens
中加入额外的 token <|xxxxx|>