Skip to content

Basalt 3.6.0 — 统一模型层:Auto 也能筛语言模型

Choose a tag to compare

@github-actions github-actions released this 30 Oct 12:50
· 12 commits to main since this release

Basalt 3.6.0

Auto 不再只会筛表格模型。这一版在下面加了一层统一模型层,让经典估计器、神经网络和序列语言模型
在同一张筛选表里比较。

  • 坐标 — io.github.9178nekomc:basalt:3.6.0
  • 在线文档 — https://9178nekomc.github.io/basalt/
  • 运行要求 — Java 21,启动加 --add-modules jdk.incubator.vector
  • 规模 — 242 个公开类型 / 1550 个公开成员,全部带逐参数说明

一句话的区别

AutoModel tabular = Auto.quickstart(features, labels);   // 之前只有这条
AutoModel lm      = Auto.sequence(tokenIds);             // 现在也能这样
int[] next = lm.generate(seed, 15);

两者走的是同一条筛选路径:数据声明任务 → 该任务下的全部求解器打分 → 最优者在全量数据上重训。

新增 basalt.model

类型 作用
Task 任务族:表格分类、表格回归、序列语言模型。指标语义也在这里,包括把 RMSE 取负
Dataset 表格数据或 token 流。任务由数据声明,不再是 Auto 猜的
Solver 一个可训练候选:能给自己打分,也能在全部数据上拟合
Fitted 训练好的模型:predict 或 generate,按任务二选一
ClassicalSolver 包装注册表里的估计器,用 k 折打分
NeuralSolver 包装「网络 + 训练配方」,用单次留出打分
Solvers 目录,跨模型家族

三个设计要点:

  1. 对称的接口,不对称的评分。 经典求解器交叉验证,神经求解器留出一片数据训一次——五折要对网络训五次,
    为了排序候选不值得。这个差异写在文档里,也原样列在筛选表中,而不是抹平成一个数。
  2. 经典求解器是推导出来的,不是拷贝的。 Solvers 按需从 Registry 生成它们,所以「注册一个
    Estimator 就能参与筛选」这个承诺依然成立,不需要再包一层。
  3. 能力按任务区分。 对序列模型调用 predict 会抛 UnsupportedOperationException,消息里点明它的任务,
    而不是返回一个空数组让错误在别处爆掉。

三层的对应变化

  • 第一层:Auto.sequence 进入序列领域;AutoModel 增加 generate 与 fitted,去掉 estimator()
    (获胜者可能是网络,返回一个 Estimator 已经没有意义)。Builder 去掉 testFraction 和 task——
    评分策略归求解器,任务归数据集。
  • 第二层:Zoo.charLm 提供一个窗口式字符级模型(嵌入 → 展平 → 瓶颈残差块 → 词表投影),
    序列家族因此有内置结构可筛。
  • 第三层:Solver 与 Module 两个契约都保持最小。写一个新算法 = 实现 Solver 并注册;
    写一个新结构 = 实现 Module 的 forward 与 parameters。

其它修正

  • Estimators.Metric 增加 CROSS_ENTROPY。所有对指标的穷尽 switch 随之编译报错,正好把
    Estimators 与 GridSearchCV 里两处漏掉的分支补齐。
  • verify.sh 的测试编译排除规则从「逐个点名 JUnit 类」改成 ! -name "*Test.java",
    以后新增测试文件不再需要改脚本。

产物

文件 说明
basalt-3.6.0.jar 标准 jar,含四个平台原生库
basalt-3.6.0-all.jar Fat jar,无外部依赖
basalt-3.6.0-sources.jar 源码
basalt-docs-3.6.0.zip 离线文档,18 页,解压双击 index.html

验证

  • ./verify.sh:Rust 单测、javac -Xlint:all 零告警、6 套 legacy 测试、Phase 1–3、JUnit 5、6 个编译期拒绝用例
  • UnifiedModelTest 8 项:序列筛选与生成、神经候选与估计器同台、注册表联动、能力按任务区分、数据校验
  • AdvancedApiTest 9 项:三层 API 各 3 项,含自定义层与自定义算法
  • 文档:18 页 / 242 类型 / 1550 成员中 1550 有说明 / 0 占位符 / 0 断链