爱意满满的作品展示区。
Sanko

大模型时代,我训练了一款小模型(4MB)

  •  1
     
  •   Sanko · 19h 22m ago · 1603 views

    前情提要:开发了一款轻量养车记账软件,欢迎油车电车高端人士体验( 7 天前发的上篇)

    这 7 天更新了什么

    一句话:把「 AI 帮你记」背后的模型,从手机上跑一个 2.33GB 的大模型,换成了自己训练的 4.5MB 小模型 lingxi (灵犀) 0.1.0,纯 Dart 推理、无任何原生依赖。

    • 默认识别档位已切到 lingxi-0.1.0(下载体积从 GB 级墙降到 4.5MB ,MB 级不再强制 Wi-Fi )
    • 支持一句话记多笔:「昨天加油 300 。今天洗车 30 。」→ 自动拆成两条草稿,日期各自正确
    • AI 草稿页支持增删改、批量落库、低置信度字段标记「请核对」
    • 加了识别反馈(准/不准),真实语料从 55 条扩到 390 条,并修了一批评测集卫生问题
    • 契约升到 v2 (全角句号从"小数点"里放出来,成为句子边界),模型零重训直接受益

    为什么不用大模型

    上篇评论区有人担心「端侧 AI 会让人变傻」,但其实更尴尬的是技术账:让一个通用 LLM 做槽位抽取,等于让它承担本该由规则承担的活——中文数字换算、元→分乘 100 、相对日期推算、句中多数字消歧、备注改写。

    于是引入两类最难防的错:金额量级错误(×100 出错,7 元记成 700 元,用户会漏过去)和备注幻觉(编造原文不存在的文本,污染账本)。而且抽取任务真正承载的决策信息只有约 3 bit ,LLM 是按语言建模约 45 bit 造的,纯粹浪费容量。

    所以我换了个思路:候选枚举 → 模型选择 → 规则解引用

    "呃,昨天在壳牌那儿,95 的加了 42 升,367 块 8"
    ① 枚举   把所有片段编号,并顺手把计算全做完:
             N1=42 升(42.0)  N2=367 块 8(=36780 分)  D0=昨天(=设备当天-1)
    ② 标记   ⟨N1⟩42 升 ⟨N2⟩367 块 8
    ③ 模型   一次前向:指出 N2 是金额、N1 是升数、D0 是日期、类别=加油
    ④ 解引用 按编号取回算好的值 → 草稿
    

    模型从头到尾没做过一次算术、没做过一次日期换算、没写过一个原文不存在的字。中文数字、小数、心算、自我改口、多数字消歧、相对日期这六类难题,从"生成/计算"坍缩成了"选择",容量需求直接掉两个数量级,且结构上不可能幻觉——它只能指认候选。

    lingxi 0.1.0 本身

    参数量 4.42M ( 4 层 × 256 宽编码器,RoPE + SwiGLU + RMSNorm ,全网络无 bias )
    产物 slot.ptw 4.49MB( int8 逐行量化;加载反量化为 fp32 ,常驻内存约 18MB )
    运行时 纯 Dart,无原生库、无新依赖;常驻 isolate ,Android/iOS/macOS/Windows 通吃
    推理时延 p50 ~18ms / p90 ~48ms ( M4 Pro, JIT 实测; AOT 更快,300ms 预算内)
    训练 发布版 3000 步,CPU 上约 4 分钟( 242s )训完

    评测(这是我最想吹也最想交代的部分):

    • 金标准集 320 条:**100%**(纯规则基线 95.9%)
    • 真实语料 390 条:90.3%(注意:这个数字是在语料从 55 扩到 390 之后重测的,旧 55 条桥接子集仍是 94.5% 纹丝不动——分数下降是标尺变诚实,不是模型退化
    • 未见说法切片:**54.5%**,规则基线只有 27.3% ← 这 27pp 就是模型存在的全部理由
    • 拒答召回:**93.2%**(拿不准就拒绝,不硬猜)
    • Python 训练侧与 Dart 端侧:数百条端到端决策完全一致,logits 误差 < 1e-3

    一个反直觉的结论来自容量扫参:精度和参数量几乎无关——630K 参数金标准已 100%,14.5M 无任何可辨识提升,瓶颈是数据与词汇覆盖而不是模型大小。当务之急是把评测集做大,而不是把模型做大。

    训练数据怎么来的?模板族合成 + 用 qwen3:14b 当"教师"只借它的词汇多样性(一次问 30 种说法:「给车洗了个澡」「掏了过路费」「补点电」……),模式引擎再乘上槽位空间生成十万级样本;评测诚信纪律是生成的说法与评测集任何文本重合一律丢弃。整个训练链路、契约、测试向量都在 pitstop-ml/ 工作区,权重发布到 HuggingFace ,有防回归门禁。

    这周踩的坑(省略一万字版)

    1. 真实语料只有 55 条时,模型和 0.75 vs 1.00 的差别都是自欺,先把评测集做大再谈调模型;
    2. 全角句号曾被归一化成小数点,导致分句器刻意躲着句号走——把它从映射表放出来当句子边界后,「昨天加油 300 。今天洗车 30 。」自然就对了;
    3. 纯 Dart 没有 int8 SIMD ,int8 只用来(省下载),计算仍走 fp32——下载体积和计算精度就此解耦。

    App 还是那款不上应用商店的养车记账(本地单机 / 在线共享双模式,多车、固定费用、统计都有),现在多了个 4.5MB 的 AI 帮你记。下载:https://pitstops.top

    模型仓库:https://huggingface.co/XiaoDaZhen/pitstop-lingxi-0.1.0( slot.ptw ,4.49MB )

    有任何想问的尽管问,我很乐意展开聊。

    14 replies    2026-09-09 18:09:08 +08:00
    little_cup
        1
    little_cup  
       19h 11m ago   ❤️ 2
    对这个话题很感兴趣,最近做端侧的太少了。我的通知滤盒做了端侧推理,简单的文本分类,但特点是需要支持端侧继续学习来做个性化。
    最近用 fable 5.1 搞了 40 来个小时,搞出了一个 8M 的双输出模型(固定权重+动态学习)。

    但是……很想吐槽,为什么要用 AI 来写这篇文章,请换位思考你作为读者读的下去吗?
    Sanko
        2
    Sanko  
    OP
       18h 56m ago
    @little_cup #1 我文笔太差了抱歉!关于动态学习这里我是做了客户端的主动点赞点踩入口,以及端侧模型识别结果如果与最终提交不一致有 diff 也会静默上报给服务端
    loading
        3
    loading  
       17h 53m ago via Android
    4.5MB 的模型感觉挺有意思的。
    heyjany
        4
    heyjany  
       17h 50m ago
    @Sanko 也许你自己写更好。

    这种没衔接突然跳跃、莫名其妙的修饰语,读起来太难受了
    SeaBreathe
        5
    SeaBreathe  
       17h 32m ago
    专注于养车记账吗?直接拓展成记账 App 怎么样
    Sanko
        6
    Sanko  
    OP
       17h 7m ago
    @SeaBreathe 暂不考虑通用记账,类似可选择太多了。这个本来是我个人场景使用的 app ,奈何 vibe coding 越蹬越爽,就做成了现在这个程度
    Sanko
        7
    Sanko  
    OP
       17h 6m ago
    @heyjany 下次尽量自己写了
    0xo
        8
    0xo  
       17h 6m ago
    你的场景下能 beat needle2 吗?
    yuxizhe
        9
    yuxizhe  
       17h 1m ago
    你这需求不算训模型呀
    Sanko
        10
    Sanko  
    OP
       15h 36m ago
    @0xo 包能的,我这个是中文输入(🐶
    Sanko
        11
    Sanko  
    OP
       15h 34m ago
    @yuxizhe AI 识别一句话当中的记账分类,金额,备注信息,充电度数/加油升数 等,算啊
    imqiyue
        12
    imqiyue  
       14h 32m ago
    有点腻害的啊,膜拜下~
    ivyliner
        13
    ivyliner  
       13h 46m ago
    如果你先分享你怎么训练 4MB 的小模型, 文档润色好一些, 然后最后提一下自己的产品, 感觉会让大家更喜欢.
    Sanko
        14
    Sanko  
    OP
       13h 19m ago
    @ivyliner #13 👍
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1198 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:29 · PVG 07:29 · LAX 16:29 · JFK 19:29
    ♥ Do have faith in what you're doing.