跳到主要内容

审查 nndl-practice — 2026-08-27

结论: ISSUES(3 条)

门禁实跑:

book-verify: 1 本有拆解、共 1105 处出处、0 处对不上 (含 14 处书架锚,0 处对不上)
book-jargon: 1 本,共 1 处专业词没解释就用了 (✗ 批 index.md:448 —— 已人工看,判误报,见下)
book-jargon --quota: 段级超额 0 处(上限 1)、节级超额 0 处(上限 5)
book-dodged: 1 本,共 0 个词被躲开(阈值:原书出现 ≥15 次)

重点专项(委托方点名的四件事)

1. 18–21 章源码锚抽查(抽 5 条,全部属实)

「事实=」声称核对结果
shelf=ai-frontier-reference/minbpe@src:minbpe/basic.py:35pair = max(stats, key=stats.get)✓ 逐字吻合,该行正是「每轮挑最高频一对」
shelf=ai-frontier-reference/nanogpt@src:model.py:64if self.flash: → SDPA(is_causal=True),else 手写三步✓ 64/66 行与 else 分支完全如述
shelf=ai-frontier-reference/peft@src:src/peft/tuners/lora/layer.py:343nn.init.zeros_(self.lora_B[...].weight)✓ 343 行逐字;A 的 kaiming 在 338 行,loralib 出处注释在紧邻处
shelf=ai-frontier-reference/trl@src:trl/trainer/sft_trainer.py:112F.nll_loss(log_p, lbl, ignore_index=-100, reduction="sum")✓ 111 行注释、112 行代码逐字吻合
shelf=ai-frontier-reference/trl@src:trl/trainer/dpo_trainer.py:1465per_sequence_loss = -F.logsigmoid(self.beta * delta_score)✓ 逐字;delta_score=chosen−rejected 在 1460 行

写法核查:@src: 只指源码、# 只指我们的拆解章,两种指法未混用;四个仓库 (minbpe/nanogpt/peft/trl)当前 HEAD 与锚上 @<commit> 完全一致,锚未腐烂。 四个 doc 锚(verl#06 / smolagents#01 / llamaindex#02 / chonkie#01)文件均存在。

2. text/10-ch09.txt 的 NUL 坏区

实测当前文件 522 个 NUL 字节(写手报 950,以现状为准),集中在第 278–875 行中的 89 行。 18/19 两章引用该文件的 88 个行号与这 89 个坏行零交集。抽 3 条脚注亲验:

  • [^5] 10-ch09.txt:218 搜「Zachary's Karate Club堪称」✓ 存在,行在坏区外;
  • [^28] 10-ch09.txt:775 搜「次不同随机种子」✓ 表 9.1 五种子数 0.96/0.81/0.89/0.66 与拆解一致,行在坏区外;
  • [^6] 10-ch09.txt:1046 搜「test_AUC=0.7694」✓ 原样输出在,行在坏区外。

3. 前棒 11–17 章的括号补充

git diff 实测 11 章本轮只改 2 行,均为就地括号解释(「语义,即一段话所承载的意思」 「定词表大小(编号表一共收多少个词条)」),结构零改动;index.md 只加 3 行兑现表。 12–17 章为新增文件,逐章核了节级结构:七段顺序齐全(现象→走查→判断与证据→边界→可带走→原文地图), 未发现补解释把结构改坏的迹象。

4. 完整性

按「原书每章被 sourceChapters 覆盖」判:原书 10 章全覆盖—— 1→01/02/03;2→04;3→05;4→06/07;5→08/09;6→10/11;7→11/12/13/14;8→15/16/17;9→18/19;10→20/21。 目录/索引两个导航章未引,符合铁律。书卡 readChapters 与 chapters.json 逐一对应。

其余自检(逐项)

  • 红线一(不搬原文):抽查引文均为一两句的「钉说法」量级,未见整段搬运;
  • 红线二(主走查):18(§3/§5/§7/§8)、19(§4/§8)、20(§5/§6/§7)、21(§4/§5/§7/§8) 主走查均可指出且落在正文;拆解自己算的数全部标了「是我们按…算的,书里没直接给」(如 561/483、召回 0.77);
  • 红线三(生词):quota 全绿;book-jargon 唯一报警「批」(index.md:448 兑现表内)判误报放过—— 「批」在总纲 §2④「喂一批数据进去」已按可跟上的口语用法出现,19 章 §6 有正式解释 「每个批(batch,一批同时过网络的样本数)」;
  • 台阶:抽 20 章 §6、21 章 §3、19 章 §4 三节首句连读,均不跳;
  • 判断块:全书 22 处(21 章 + 总纲 3 处)全部带「如果错,会错在」;16 章无判断块,不违规;
  • 空转词/TODO:三类空转词正文零命中(唯一「很简单」在引用原书的脚注里,属原文);TODO(没懂) 零命中;
  • 总纲:六节齐全;§2 十三级链条可独立成篇,机制细节留在章层(海拔合规); 兑现表 38 行,抽查「17§9→20§7(KV 存下来)」「21§2→21§3(80GB→16GB)」「15§8→16§1」等均真兑现;
  • 台账泄漏:无。两处「转码章节边界错位」说明在脚注里、是给 agent 的指路信息,判为合理保留;
  • 书卡:claims 抽 4 条(空手道四模型、Cora 基线、nanoGPT 2.69→1.72、LoRA 0.120%/2.93%)与拆解一致; notCovered 与各章「边界与局限」口径一致;
  • docs-lint(机检,只报不拦):74 处(段落墙 22 · 顿号串 34 · 反引号 18),反引号一项按标准对脚注不适用。

问题清单

  1. [index.md:447 兑现表 + 18-graph-and-gnn.md §7 末段] 兑现表记「18 第 7 节 → 19 第 7 节 (Cora 上 GAT/SAGE 的真实名次)| ✓」,18 章正文也写「GAT、SAGE 的优势……第 19 章的 Cora 会再看一次」—— 但 19 章 §7 的基线表只有 MLP/标签传播/GCN/GAT,没有 GraphSAGE(原书表 9.2 本身就没给 SAGE 的 Cora 数)。 违反「许诺要兑现:讲的是不是许诺的那件事」。 建议:19 章 §7 照实补一句「原书这张基线表没有 GraphSAGE」;18 章那句与兑现表行改为只许诺 GAT (或注明 SAGE 原书未给),勾留 ✓ 才成立。
  2. [20-nanogpt.md 脚注 ^36] 第二出处「第 12 段(text/11-ch10.txt:12,搜『典型』)」指错段: 该行是图分类的代码注释「# 典型 0.68~0.78」,与贪心采样复读机无关(串章,「典型」二字碰巧命中所以 book-verify 不报)。第一出处(727 行)本身属实。 建议:删掉第二个指针,只留 727 行那处。
  3. [20-nanogpt.md §8→§10] 小节编号跳号:没有 §9,§10「可带走的」、§11「原文地图」比其他章 (18/19/21 均为 9/10/11 或 10/11/12)错一位。违反结构一致性,会让「第 N 节」式引用错位。 建议:重编号为 §9/§10。

不拦的备忘

  • 18 章脚注编号缺 [^20]、21 章缺 [^22](编辑残留,无悬空引用,校验器不报);修问题 1/2 时顺手补齐即可;
  • 写手报 950 个 NUL,当前文件实测 522 个;无论哪个数,引用回避策略均成立。

结论

三项问题都不触红线,均可小修;修完问题 1–3 后本子达到 PASS。抽查出处 6 条,5 条全属实、 1 条含一个指错段的次要指针(问题 2)。四条门禁三条全绿,jargon 唯一报警经人工判定为误报。