Appearance
Appearance
证明字符级语言模型的两条最短路径都是通的:查表式的 bigram 计数矩阵能采样出像样的“人名”,参数化的 MLP 语言模型会在受控训练数据上让交叉熵 loss 真的下降。
你可以直接在下方免安装的浏览器 WebAssembly 环境中编写并验证转移概率矩阵与负对数似然损失(NLL):
# 实验 04 · 动手挑战:计算 Bigram 负对数似然 (NLL) import math def calculate_nll(corpus, transition_probs): # TODO: 1. 遍历语料中的相邻 token 对 (w1, w2) # TODO: 2. 累加 -math.log(transition_probs.get((w1, w2), 1e-6)) # TODO: 3. 返回平均 NLL 损失 pass corpus = ["hello", "world", "hello", "llm"] probs = { ("hello", "world"): 0.5, ("world", "hello"): 1.0, ("hello", "llm"): 0.5, } loss = calculate_nll(corpus, probs) print(f"计算所得 NLL Loss: {loss}") assert loss is not None, "calculate_nll 尚未实现" expected_loss = -(math.log(0.5) + math.log(1.0) + math.log(0.5)) / 3.0 assert abs(loss - expected_loss) < 1e-4 print("🎉 Bigram 转移概率与 NLL 交叉熵损失断言 100% 通过!")
点击右上角「▶ 运行」或按 ⌘/Ctrl+Enter 在浏览器端直接执行