特殊Token区域与共享区域
一、特殊Token区域设计
1. 基础标识符
<|start|>
:序列开始标识- `<|end|>``: 序列结束标识
<|pad|>
:填充标识(用于对齐或补全长度)<|unk|>
:未知词标识(处理未登录词)
2. 词表扩充切换标识符
<|expand_vocab|>
:动态扩展词表(触发外部词表加载)<|switch_vocab:NAME|>
:切换至指定名称的词表(如<|switch_vocab:code|>
)
3. 指代标识符
单指代操作
<|s_{n}_s|>
:引用前文第n
个位置的片段填充当前位置(如<|s_3_s|>
表示取前文第3位内容)。<|s_{start}:{end}_s|>
:引用前文[start, end]
范围的片段(如<|s_3:6_s|>
表示取前文3-6位内容)。
分割指代操作
<|split|>
:触发前文分割,后接参数定义分割规则:<|split|><|s_{num}_s|><|s_{index}_s|>
:将前文分割为num
段,取第index
段(如分割为3段取第2段)。- 示例:
<|split|><|s_3_s|><|s_1_s|>
表示将前文切分3段,取第1段填充。
指代群
<|s_code|>
和<|e_code|>
:包裹一组指代操作,内部用<|re_end|>
分隔:
表示依次执行两个操作:填充第3位内容,再填充5-8位内容。<|s_code|> <|s_3_s|><|re_end|> <|s_5:8_s|> <|e_code|>
4. 正则表达式支持
<|regex:pattern|>
:在指代中嵌入正则表达式(如<|regex:[A-Z]+|>
匹配大写字母序列)。- 示例:
<|s_code|><|regex:\d+|><|re_end|><|s_2_s|><|e_code|>
表示先匹配数字,再填充第2位内容。
二、共享区域设计
- 共享基础符号:通用标点(如
,
.
?
)、数字、常见功能词(如if
,for
)。 - 跨任务共享Token:如
<|text|>
(文本域标识)、<|code|>
(代码域标识),用于多模态任务。 - 动态共享规则:通过
<|switch_vocab|>
切换词表时,保留共享区域的Token以避免重复编码。
三、语法规则与示例
-
单指代与范围指代
- 输入:
A B C D <|s_2_s|>
- 输出:
A B C D B
(填充前文第2位内容B
)
- 输入:
-
分割指代
- 输入:
X Y Z <|split|><|s_3_s|><|s_1_s|>
- 输出:
X Y Z Y
(将前文X Y Z
分3段[X], [Y], [Z]
,取第1段Y
)
- 输入:
-
指代群与正则
- 输入:
Data: 123 <|s_code|><|regex:\d+|><|re_end|><|e_code|>
- 输出:
Data: 123 123
(正则匹配数字123
并填充)
- 输入:
四、冲突处理与容错
- 非法偏移:若
<|s_10_s|>
指向不存在的上下文,填充<|unk|>
。 - 语法错误:未闭合的
<|s_code|>
自动补全<|e_code|>
,或抛出错误标识<|error|>
。
五、设计优势
- 灵活性:支持动态引用、分割、正则,适应复杂文本生成场景。
- 可扩展性:通过
<|switch_vocab|>
和<|expand_vocab|>
支持多领域词表。 - 结构化解析:通过指代群和分隔符
<|re_end|>
明确操作边界,便于模型学习。
此设计需结合具体任务验证,确保模型能高效解析特殊Token的语义与操作逻辑。