Hacker News 中文摘要

RSS订阅

逆向工程复现类 Jev 模型 -- Reverse-engineered Jev-like model

训练一个小型模型,用于在变化的文本选项列表中做选择。一个杰夫(Jev)类模型接收一段文本与 N 个文本选项,为每个选项返回一个概率,它一次性完成判断而非逐词写出答案。杰夫是类型安全(TypeSafe)公司的商业模型用于此类任务,类型安全未公开其设计。本仓库是一个独立的入门级模型,具备相同的输入输出结构。

正文

训练一个小模型,从动态变化的文本选项列表中做选择。

类 Jev 模型接收一段文本和 N 个文本选项,为每个选项返回一个概率。它一次性完成,而不是逐词写出答案。Jev 是 TypeSafe 公司针对此类任务的商业模型,其设计未公开。本仓库是一个独立 starter 模型,输入输出格式相同。

演示

同一个选项注意力头可以从图像块上为控制器按钮打分。这段十秒影片 拼接了两个精选的五秒片段:先用七个 Doom 按钮实时玩 deadly_corridor 战斗,再用五个键走棋并落子的国际象棋控制器。示意图展示了每次决策所用的张量。Doom 片段来自提供的联合检查点,在记录的十局中平均击杀 0.60、奖励 -97.50。象棋片段来自更强的仅象棋检查点,在 50 局对随机走子的采样中获 4 胜 46 平 0 负,但对 Stockfish 0 级是 0 胜 2 平 48 负。这些片段为活跃度挑选,不代表典型玩法或能力宣称。

安装游戏扩展并从发布的联合检查点录制全新的 640×480 Doom 轨迹:

uv pip install -e '.[games]' python examples/doom/play.py examples/checkpoints/joint-imitation.pt --episodes 10 --game-seconds 35.3 --device cpu --capture-resolution 640x480 --output runs/doom.mp4 --trace runs/doom-trace.json

用相同视觉布局渲染轨迹。因作者拥有的原声不在仓库内,会生成无声影片。

(cd examples/film && npm install && npx playwright install chromium) examples/film/make-film.sh runs/doom-trace.json runs/doom-film.mp4 10

发布内容包含 Doom 示例、象棋示例、单游戏检查点和共享的 12 选项检查点。两个游戏都从 jevlike.vision 导入视觉打分器,示例中均无第二份模型副本。

架构

每个选项变成一个查询向量,即代表其文本的简短数字列表。查询对上下文 token 分配注意力权重,据此为该选项生成一个上下文向量。共享点积将每个选项与上下文配对成一个分数。softmax 跨选项运行,把分数转为和为一的概率。

默认编码器从零学习字节嵌入。编码器是文本转向量的部分。可选的 Hugging Face 路径使用冻结的预训练编码器,其权重固定,小打分器从中学习。

数据格式

每行一个 JSON 对象:

{"context":"The customer needs a refund.","options":["refund","sales","technical support"],"label":0}

label 是正确选项从零开始的索引。每行选项数可不同,最少两个。

快速开始

在仓库根目录运行以下命令,创建本地合成数据、训练、评估保存的模型并为新菜单打分:

uv venv source .venv/bin/activate uv pip install -e '.[dev]'

jevlike-data synthetic --output data/synthetic jevlike-train data/synthetic/train.jsonl --validation data/synthetic/validation.jsonl --output runs/synthetic.pt jevlike-eval runs/synthetic.pt data/synthetic/test.jsonl jevlike-predict runs/synthetic.pt --context "Choose the exact badge amber badger. Badge: amber badger." --option "azure crane" --option "amber badger" --option "gold heron"

评估会打印 top-1 准确率(正确首选的比例)、top-3 准确率(前三高分中含正确答案的比例)和预期校准误差(比较置信度与实测准确率)。命令还打印打乱上下文的对照,把每个菜单配错误上下文。有用模型应胜过该对照。

使用你自己的数据

  1. 按上述格式导出训练、验证、测试 JSONL 文件。
  2. 每行保留预测时模型会看到的所有选项。
  3. 相关记录一起划分,例如同一客户或同一目标页面的记录放在同一划分,避免近似重复泄露到测试集。
  4. 用你的训练和验证文件运行 jevlike-train。
  5. 在留出测试文件上运行一次 jevlike-eval。留出指该文件从未用于训练或模型选择。

默认字节编码器将上下文截断到 192 字节、选项到 32 字节。文本更长时用 --context-tokens 或 --option-tokens 调大。训练支持 CPU、Mac GPU 的 Apple MPS 和 NVIDIA GPU 的 CUDA,通过 --device 指定。

使用冻结的预训练编码器

安装可选依赖并指定 Hugging Face 上任一兼容编码器:

uv pip install -e '.[transformers]' jevlike-train data/synthetic/train.jsonl --validation data/synthetic/validation.jsonl --output runs/qwen-head.pt --encoder hf --hf-model Qwen/Qwen2.5-0.5B --rank 256 --batch-size 8

检查点保存训练好的打分器头和编码器名称,不复制冻结权重,因此加载时需能访问同一 Hugging Face 模型。

--rank 设定小打分器头的宽度,越宽可训练权重越多、占用内存越大。

Wikispeedia 示例

scripts/get_wikispeedia.sh 下载公开 SNAP 归档并构建下一次点击的 JSONL 文件,数据位于仓库外。

scripts/get_wikispeedia.sh jevlike-train data/wikispeedia/jsonl/train.jsonl --validation data/wikispeedia/jsonl/validation.jsonl --output runs/wikispeedia.pt

请引用 Robert West 和 Jure Leskovec 的 Human Wayfinding in Information Networks(WWW 2012),并在 SNAP 数据集页 查看源数据条款。

预期效果

在本 starter 之前的实验中,一次性打分器在合成菜单上约 98% 准确率。在目标不相交的 Wikispeedia 下一次点击数据上,冻结 Qwen2.5-0.5B 编码器加打分器达 26%,打乱和随机编码器对照约 8%;从零用 4 万次点击训练的小模型达 29%。八个选项时,一次性打分比被迫写 400 token 的小解码器快约 100 倍。

这些数字来自本地实验,非本快速开始运行结果。我们未展示与 Jev 同质量,也未复现 TypeSafe 私有训练方法。

局限性

  • 这是研究用 starter,不是 Jev 的复制品。
  • 准确率取决于数据质量、划分质量和编码器。
  • 字节编码器便宜但对语义薄弱。
  • 预训练路径可能下载大模型且需更多内存。
  • 一次性打分需在预测前拿到完整选项列表。
  • 速度对比用的是本地小解码器,而非大型商业模型。

许可证

代码基于 MIT License 发布。下载的数据集和预训练模型遵循各自条款。

评论

围绕一个叫 Jev 的架构,讨论气氛以惊叹和围观为主,主轴分成两派:一派觉得这是把模型潜空间智能榨出来的高效新方向,另一派怀疑它只是扩散模型或已有思路换了个名字,并追问复现速度和前作归属。

复现速度快到离谱,围观情绪拉满

  • 有人引推文称对方 stealth 做了两年,自己只 stealth 了两小时就拿出了开源版本,主打需要类型安全的 JSON 负载,端上推理快 5 倍(较多人)
  • 有人只留下一句「这也太快了」,情绪和上一条一致(少数人)
  • 按 HN 传统,有人补了一句它还能跑 Doom,属于典型的玩梗式兴奋(少数人) > 他们 stealth 做了两年,我 stealth 做了两小时。(@steeve)

任何扩散模型都可能是伪装过的 Jev

  • 有人实测后认为,所谓 Jev 未必是新东西,扩散模型加个模式切换就能当 Jev 用:在自己的 DGX Spark 上每次决策约 0.2 秒,编程语言检测 10/10、人类语言检测 9/10、单位量级比较 10/12,答错的全部落在低概率区,还能解 ASCII 迷宫(较多人)
  • 有人喜欢这个思路,看好高效通用 transformer,但怀疑 Jev 内部还有更多没亮出来的东西(较多人)

早有人做过,命名和归属存疑

  • 有人翻出 Reddit 帖子,指称一年前就有人声称实现了 Jev 架构,言下之意并非首创(少数人)

真正值得关注的是把 LLM 当高效分类器

  • 有人指出,很多 LLM 应用剥开看就是零样本或少样本分类器外加一堆多余步骤,真正被低估的是用极高效的输出去调用模型潜空间里已经编码好的智能,这块目前探索得远远不够(较多人)

有价值的补充

  • 一个技术疑问值得追:为什么这类定制 encoder-decoder 方案普遍选 Qwen 2.5、3 这类较早版本,而不用最小的 3.5?是单纯因为几百 M 参数量,还是 3.5 在架构或预训练上有别的代价?
  • 上面那份实测里,所有错误答案都被标注为低概率,这本身提示低 P 可以当作现成的置信度过滤信号使用。