Meaning Dataset 详细介绍文档 目录 概述 核心概念 语义层级结构 Rank 编码机制 序列生成机制 特殊功能机制 数据示例 概述 Meaning Dataset 是一个模仿自然语言结构和抽象表达的数据集。它通过层级化的树形结构来表示语义(meaning),其中每个复杂的语义都可以分解为更简单的语义单元,最终分解为不可再分的基本单元(token)。 设计理念 层级化语义表示 每个 meaning 都有一个唯一编号,编号的大小直接反映其复杂度: 小编号 = 简单语义(如基本概念) 大编号 = 复杂语义(由多个简单语义组合而成) 这种设计模仿了人类认知的层级特性——复杂概念总是建立在简单概念之上。 可组合性原理 所有复杂的 meaning 都可以由更低编号的 meaning 组合而成。这种递归分解的特性确保了: 任何语义都可以追溯到底层的基本单元 分解过程形成树形结构 同一个 meaning 可以作为多个更复杂 meaning 的组成部分 自然语言模拟 Meaning Dataset 模仿了自然语言的核心特征: 词汇表 :基本的 token 类似于单词 语法 :meaning 的组合规则类似于语法结构 递归性 :有限的基本单元可以组合出无限的复杂表达 核心概念 Token(词元)- 原子语义单元 Token 是整个 meaning 系统中最基本的、不可再分的数据表达单元。 特征 : 编号范围:0 到 vocab_size - 1 不可被拆解或分解 是所有 meaning 分解的最终层级 类似自然语言中的"单词" 类比 :就像自然语言中,"苹果"、"红色"、"吃"这些单词无法再分解为更小的有意义的单位。 Meaning(语义)- 可组合的语义单位 Meaning 是一种语义或符号的表达,用唯一编号标识。 编号规则 : 编号范围 类型 特性 0 ~ vocab_size-1 基本 meaning 即 token,不可拆解 vocab_size 及以上 复合 meaning 可拆解为更低编号的 meaning 复杂度递增 :编号越大,表示语义越复杂。这是因为: 大编号的 meaning 可以选择更多的"原材料"(小编号 meaning)进行组合 组合的层级可能更深 类比 :在自然语言中: "花" = 基本语义(token) "玫瑰花" = 复合语义("玫瑰" + "花") "红玫瑰花园" = 更复杂的语义(由更简单的语义组合而成) Level(层级)- 语义深度 Level 表示当前 token 相对于 root meaning 的距离,反映了语义的深度。 层级定义 : Level 0 :token 层,基本单元层 Level 1 :由 token 直接组合成的 meaning Level 2 :由 Level 1 的 meaning 组合成的 meaning 以此类推... 可视化 : Level 3: Meaning A / \ Level 2: Meaning B Meaning C / \ / \ Level 1: Token Token Meaning D Token / \ Level 0: Token Token 特殊 Level 值 : 值 含义 用途 0 基本层 token 所在的层 255 Tree 标记 标识树节点位置(with_tree 模式) 511 Stride 标记 标识重复的 token(stride 模式) Meaning Height(高度)- 树的深度 Meaning Height 是当前 meaning 从根节点到叶节点的最大层级深度。 意义 : Height 越大,表示该 meaning 的语义结构越复杂 Height 反映了分解的层级数量 Height = 1 表示只由 token 直接组成 Height > 1 表示存在多层嵌套结构 示例 : Meaning A (Height = 1): └── Token1, Token2, Token3 Meaning B (Height = 2): └── Meaning C (Height = 1) └── Token1, Token2 └── Token3 Meaning C (Height = 3): └── Meaning D (Height = 2) └── Meaning E (Height = 1) └── Token1, Token2 └── Token3 └── Token4 Meaning Weight(宽度)- 叶节点数量 Meaning Weight 是当前 meaning 的叶节点(token)总数,也称为序列长度。 意义 : Weight 越大,表示该 meaning 包含的基本单元越多 Weight 直接决定了序列的长度 Weight 与 Height 无直接关系——一个 shallow but broad 的 meaning 可能有很大 weight 示例 : Meaning A (Weight = 5): ├── Token1 ├── Token2 ├── Token3 ├── Token4 └── Token5 (Height = 1, Weight = 5) Meaning B (Weight = 5): └── Meaning C └── Meaning D └── Meaning E └── Token1, Token2, Token3, Token4, Token5 (Height = 4, Weight = 5) 语义层级结构 树形分解结构 每个 meaning 通过层层递归分解形成树形数据结构: 根节点 :原始 meaning 中间节点 :中间层的 meaning 叶节点 :基本 token 前序遍历序列化 树形结构通过前序遍历(pre-order traversal)展开为线性序列: 遍历规则 : 访问当前节点的第一个子项 递归访问该子项的所有子项 返回并访问当前节点的第二个子项 重复直到所有子项被访问 示例 : 树形结构: A / | \ B C D /\ | E F G 前序遍历序列:B, E, F, C, G, D Meaning 分解规则 基本 Meaning(0 到 vocab_size-1) 直接映射为自身 不进行分解 Level = 0 序列只包含自身 复合 Meaning(>= vocab_size) 复合 meaning 的生成遵循以下规则: 子项选择 :从 [0, current_meaning) 范围内随机选择子项 确保子项编号小于父项,满足"编号越小越简单"的原则 可以选择 token 或其他复合 meaning 子项数量 :在 [min_subitem, max_subitem] 之间 min_subitem:最少子项数 max_subitem:最多子项数 实际数量随机决定 递归分解 : 对于每个子项,如果是复合 meaning,递归获取其序列 如果是 token,直接使用其值 序列拼接 : 按子项顺序拼接所有子序列 计算每个位置的新 level、rank_idx、rank_all 层级计算 : 新 level = 子项 level + 1 这样逐层递增,形成层级结构 Level 传播机制 Level 信息随着 meaning 的分解逐层传播: 传播规则 : 父 meaning 的 level = 子 meaning 的 level + 1 示例 : Meaning 1000 (Level 在序列中为 1) ├── Meaning 500 (Level 在序列中为 2) │ ├── Token 10 (Level 在序列中为 3) │ └── Token 20 (Level 在序列中为 3) └── Token 30 (Level 在序列中为 2) 序列:[500(分解), 30] 实际上序列展开为:[10, 20, 30] Level: [3, 3, 2] 可视化 : Level 0: ████████████████ (Token 层) Level 1: ██████ (第一层组合) Level 2: ████ (第二层组合) Level 3: ██ (第三层组合) Rank 编码机制 Rank 编码是 meaning 系统的核心机制,用于精确定位每个 token 在树形结构中的位置。 设计目标 Rank 编码需要解决两个问题: 位置定位 :token 在每一层中的位置是什么? 分支信息 :每一层有多少个分支? Rank_idx(排序索引)- 位置编码 Rank_idx 记录了 token 在每一层中的位置信息。 编码方式 : 每层使用 4 位存储(0-15) 低 4 位:第 0 层(最底层)的位置 第 5-8 位:第 1 层的位置 第 9-12 位:第 2 层的位置 以此类推... 编码公式 : rank_idx = (pos_0) | (pos_1 << 4) | (pos_2 << 8) | ... 示例解析 : rank_idx = 273 = 0x111 二进制:0001 0001 0001 层2 层1 层0 含义: - 第 0 层位置:1 (二进制 0001) - 第 1 层位置:1 (二进制 0001) - 第 2 层位置:1 (二进制 0001) 填充规则 : 高位无效位用 1(0xF)填充 这样可以区分有效数据和填充位 Tree Token 特殊处理 : Tree token 总是排在当前层的最后 其 rank_idx 为 0xFFFFFFF0 + m_len m_len 是当前层的子项数量 Rank_all(排序总数)- 分支计数 Rank_all 记录了每一层的总分支数量。 编码方式 : 每层使用 4 位存储(0-15) 与 rank_idx 相同的位布局 每一层的值表示该层的分支总数 编码公式 : rank_all = (count_0) | (count_1 << 4) | (count_2 << 8) | ... 示例解析 : rank_all = 4369 = 0x1111 二进制:0001 0001 0001 0001 层3 层2 层1 层0 含义: - 第 0 层总数:1 - 第 1 层总数:1 - 第 2 层总数:1 - 第 3 层总数:1 计算规则 : Token 层(level 0):rank_all = 0xFFFFFFF(填充) 复合 meaning:rank_all = (子项 rank_all << 4) + 当前子项数 Tree Token 特殊处理 : Tree token 不计入 rank_all 总数 其 rank_all 也为 0xFFFFFFF0 + m_len Rank 计算示例 考虑以下树形结构: A (rank_idx=?, rank_all=?) / | \ B C D /\ | E F G 计算过程 : 叶节点(E, F, G) : 都是 token(level 0) rank_idx = 0, 1, 0(各自在父节点中的位置) rank_all = 0xFFFFFFF(填充值) 中间节点(B, C, D) : B 有 2 个子项(E, F) C 有 1 个子项(G) D 是 token rank_idx(B) = 0 | (0 << 4) = 0(第 0 层第 0 个) rank_all(B) = 0xF | (2 << 4) = 0x2F(第 1 层有 2 个) 根节点(A) : 有 3 个子项(B, C, D) rank_idx(A) = 0 | (0 << 4) | (0 << 8) = 0 rank_all(A) = 0xF | (0xF << 4) | (3 << 8) = 0x3FF Rank 的用途 1. 位置查询 : 通过 rank_idx 和 rank_all 可以快速判断: token 是否在某层的某个位置 token 是否在某层的第一个/最后一个 2. 结构分析 : 通过 rank_all 知道每层的分支数 通过 rank_idx 知道 token 在每层的相对位置 3. 训练 Mask : 可以使用 rank 信息精确控制哪些 token 参与训练: val_mask_level = [0, 1] # 只看第 0 层和第 1 层 val_mask_idx = [0, -1] # 第 0 层第 0 个,第 1 层最后 1 个 序列生成机制 序列展开过程 将 meaning 树展开为线性序列的过程: 步骤 1 :从根 meaning 开始 步骤 2 :获取 meaning 的所有子项 步骤 3 :对每个子项: 如果是 token,直接加入序列 如果是复合 meaning,递归展开后加入序列 步骤 4 :按子项顺序拼接所有结果 信息携带 序列中的每个位置携带多种信息: 信息 描述 用途 token 基本单元的值 模型的输入 level 当前 token 的层级 理解结构深度 rank_idx 当前 token 在各层的位置 定位和结构分析 rank_all 各层的分支总数 结构完整性信息 约束条件 为了保证 rank 编码的有效性,系统有以下约束: 约束 值 原因 每层最多子项数 15 rank 使用 4 位存储 最大层级数 8 rank 总共 32 位,每层 4 位 token 范围 0 ~ vocab_size-1 词汇表大小限制 特殊功能机制 Stride(步长)功能 目的 :通过重复 token 来模拟某种强调或时序特性。 机制 : 当 stride > 1 时,每个 token 会被重复指定次数 重复的 token 被标记为 level = 511(特殊 level) 原始 token 保持 level = 0 示例 : stride = 2 原始序列:[A, B, C] 扩展后: [A, A', B, B', C, C'] Level: [0, 511, 0, 511, 0, 511] 用途 : 模拟某种强调或重复模式 增加序列长度而不增加语义复杂度 测试模型对重复模式的处理能力 With Tree 功能 目的 :在序列中显式标记树形结构的位置。 机制 : 每个 meaning 的子项展开后,在末尾插入一个 tree token Tree token 使用特殊的 level = 255 Tree token 的编号为 vocab_size - special_vocab_offset 示例 : without_tree: Meaning A 有子项 [B, C] 序列:[B(展开), C(展开)] with_tree: 序列:[B(展开), TREE, C(展开), TREE] 可视化 : Tree: A / \ B C 序列:[B1, B2, TREE, C1, C2, C3, TREE] └─B的部分──┘ └──C的部分───┘ 用途 : 为模型提供显式的结构边界信息 帮助模型理解语义的组合关系 类似自然语言中的括号或标点符号 验证 Mask(Validation Mask) 目的 :精确控制哪些 token 参与训练损失计算。 机制 : 通过 level 和 idx 两个维度进行筛选 可以组合多个条件(AND 逻辑) 只有满足所有条件的 token 才会参与训练 配置方式 : val_mask_level = [0, 1, 2] # 指定层级 val_mask_idx = [0, 0, -1] # 指定每层的位置 含义: - 第 0 层的第 0 个 token - 且第 1 层的第 0 个 token - 且第 2 层的最后 1 个 token - 只有同时满足这 3 个条件的 token 才参与训练 用途 : 训练特定位置的 token 预测能力 研究模型对不同层级信息的利用情况 实现课程学习(先学简单的,再学复杂的) Mask 类型 : 类型 描述 用途 token_mask 区分正常 token 和特殊 token 过滤 stride/tree token val_mask 根据位置筛选 token 控制训练目标 数据示例 完整示例 以下是一个完整的 meaning 树及其展开序列: 配置: vocab_size = 256 meaning = 115200 树形结构: 115200 / | \ 10240 1100 12322 / | \ / \ / | \ 512 32 1201 245 233 3214 532 324 / \ / \ / \ | / \ 123 42 320 500 1231 23 324 93 176 / \ / \ / \ / \ 176 11 255 129 129 99 211 111 展开序列 : 序列内容: 123 42 32 176 11 255 129 245 233 129 99 23 211 111 93 176 level: 3 3 2 4 4 4 4 2 2 4 4 3 4 4 3 3 rank_idx: 0 1 1 0 1 16 17 16 17 0 1 2 0 1 32 33 at L0: 0 1 1 0 1 0 1 0 1 0 1 2 0 1 0 1 at L1: 0 0 0 0 0 1 1 1 1 0 0 0 0 0 2 2 Rank 编码详解 以序列中的几个位置为例: 位置 0 (token=123) : level = 3:在 3 层深度 rank_idx = 0: 第 0 层:位置 0 第 1 层:位置 0 第 2 层:位置 0 含义:这是 512 → 123 这个分支的第一个 token 位置 3 (token=176) : level = 4:在 4 层深度(最深) rank_idx = 0: 第 0 层:位置 0 第 1 层:位置 0 第 2 层:位置 0 第 3 层:位置 0 含义:这是 320 → 176 这个分支的第一个 token 位置 14 (token=93) : level = 3 rank_idx = 32 = 0x20: 第 0 层:位置 0 第 1 层:位置 0 第 2 层:位置 2 含义:这是 324 的第 2 个子项(子项:324, 93, 176) 实际树形可视化 90800 ├── 17100 │ ├── 3078 │ │ ├── 153 │ │ │ ├── <25> │ │ │ ├── 34 │ │ │ │ ├── <11> │ │ │ │ └── <0> │ │ │ ├── 39 │ │ │ │ ├── <3> │ │ │ │ └── <7> │ │ │ ├── <15> │ │ │ └── 37 │ │ │ ├── <8> │ │ │ ├── <10> │ │ │ └── <7> │ │ ├── 848 │ │ │ ├── 212 │ │ │ │ ├── 53 │ │ │ │ │ ├── <14> │ │ │ │ │ └── <13> │ │ │ │ └── 60 │ │ │ │ ├── <1> │ │ │ │ ├── <12> │ │ │ │ └── <13> │ │ │ └── 124 │ │ │ ├── <12> │ │ │ ├── <13> │ │ │ ├── <24> │ │ │ └── 32 │ │ │ ├── <5> │ │ │ ├── <8> │ │ │ ├── <8> │ │ │ ├── <7> │ │ │ └── <1> │ │ └── 299 │ │ ├── 66 │ │ │ ├── <18> │ │ │ ├── 38 │ │ │ │ ├── <1> │ │ │ │ ├── <11> │ │ │ │ ├── <11> │ │ │ │ ├── <8> │ │ │ │ └── <4> │ │ │ ├── <0> │ │ │ ├── <5> │ │ │ └── <2> │ │ ├── 61 │ │ │ ├── <20> │ │ │ ├── <10> │ │ │ ├── <6> │ │ │ └── <16> │ │ ├── 46 │ │ │ ├── <14> │ │ │ └── <9> │ │ └── 37 │ │ ├── <8> │ │ ├── <10> │ │ └── <7> ... 图例: <> 中的数字:token 的序列索引位置 普通数字:meaning 的编号 统计特性 对于 vocab_size = 256, size = 115200 的配置: 指标 典型值 说明 总 meaning 数 115200 包含基本 token 和复合 meaning 基本 token 数 256 vocab_size 最大序列长度 50-200 取决于分解规则 平均序列长度 20-50 取决于 min/max_subitem 最大层级深度 4-8 取决于随机分解结果 最常见序列长度 10-30 大多数 meaning 的复杂度 设计优势 1. 层次化表达 Meaning Dataset 通过层级结构自然地表达了语义的组合性和层次性,这与人类认知和自然语言的结构高度一致。 2. 可控复杂度 通过调整参数,可以控制: 语义的复杂度范围(start, end) 分解的粒度(min_subitem, max_subitem) 结构的深度(间接控制) 3. 丰富的结构信息 每个 token 携带多层信息: 值信息(token 本身) 结构信息(level) 位置信息(rank_idx) 上下文信息(rank_all) 4. 灵活的训练控制 通过验证 mask,可以: 训练特定层级的预测能力 实现课程学习 研究模型对不同结构信息的利用 5. 可扩展性 系统支持多种扩展: Stride:增加时序维度 With Tree:增加显式结构标记 自定义 mask:实现各种训练策略 与自然语言的类比 Meaning Dataset 自然语言 说明 Token 单词 基本表达单元 Meaning 词组/句子 由单词组合成的有意义的单位 Level 嵌套深度 句法结构的嵌套层级 Rank_idx 词序/句法位置 单词在短语/句子中的位置 Rank_all 分支数 可选的并列成分数量 Tree 句法树 语法结构的树形表示 Sequence 线性文本 树形结构展开后的线性形式 这种类比使得 Meaning Dataset 成为研究语言模型对结构化信息处理能力的理想工具。