LLM实验避坑:利用已有结果文件重评分析,避免无效GPU消耗
Three times this week the experiment was already sitting in someone's result files
极具价值的工程复盘,展示了如何利用已有日志和重评分技巧零成本排查实验偏差,做Agent或RAG开发的同学可直接复用这套分析思路。
The instinct when you spot a confound is to queue another run. Three times this week the answer was already in files the author had published, and the rerun would have cost hours of GPU for a number they could have had in an afternoon.
当你发现混杂因素时,本能反应是再排一次运行。本周三次,答案已经存在于作者已发布的文件中,而重新运行将耗费数小时的 GPU 算力,仅为了得到一个他们本可以在一个下午就能得到的数字。
u/Electronic_Put4530 writes facts into the n-gram side table of Qwen3.8-Flash-Next, no weights touched.
u/Electronic_Put4530 将事实写入了 Qwen3.8-Flash-Next 的 n-gram 侧表,未触碰任何权重。
https://www.reddit.com/r/LLMDevs/comments/1wm7lbf/
https://www.reddit.com/r/LLMDevs/comments/1wm7lbf/
Those rows are keyed by exact tokens, so how a name is spelled matters more than how the question is phrased, and a name at the start of a sentence is a different token from the same name mid-sentence. That means different rows. He hadn't run a name-perturbation test, but his probes record where the name falls, so the split was already in the published results: 0.881 over 219 sentences with the name at the start, 0.826 over 622 with it inside. He then recomputed it inside each question family, across the published overlay, a newer one, and a rerun of the newer recipe with a different seed. The published overlay favours the sentence-initial name in all four families where the split exists, by 0.05 to 0.13. The newer one reverses in three of those four, and the second seed repeats the pattern with the same exception. The headline average barely moves while the map underneath it changes. So the gap isn't a property of the method. It's a readout of which rows the training budget bought, and it costs nothing to print on every run.
这些行以精确标记(tokens)为键,因此名字的拼写方式比问题的措辞方式更重要,且句首的名字与句中同一名字是不同的标记。这意味着它们对应不同的行。他尚未运行名称扰动测试,但他的探针记录了名字出现的位置,因此这种划分已经包含在已发布的结果中:名字在句首的 219 个句子准确率为 0.881,名字在句中的 622 个句子准确率为 0.826。随后他在每个问题族内重新计算了该指标,跨越已发布的叠加层、一个较新的叠加层,以及使用不同随机种子重新运行的较新配方。在所有存在划分的四个问题族中,已发布的叠加层均偏向句首名字,优势幅度为 0.05 至 0.13。较新的叠加层在其中三个族中反转了这一趋势,第二个随机种子也以相同的例外情况重复了这一模式。总体平均值几乎没有变化,但其底层分布却发生了改变。因此,这个差距并非方法的固有属性。它反映的是训练预算购买了哪些行,而在每次运行时打印这一信息无需额外成本。
u/Micha0827 moved a local Qwen from 89% to 100% by putting the question before the context.
u/Micha0827 通过将问题置于上下文之前,将本地部署的 Qwen 模型准确率从 89% 提升至 100%。
https://www.reddit.com/r/LocalLLaMA/comments/1wmd3xx/
https://www.reddit.com/r/LocalLLaMA/comments/1wmd3xx/
On 38 situations that is four cases flipping. A per-case diff of runs he already had showed all four were items where a distractor comes first and the decisive detail comes last, which is where the mechanism predicts it should help, and it also turned up a German case that the change breaks. The claim got smaller and much harder to argue with, without a single new inference.
在 38 种情境中有四例发生了翻转。对他已有的运行结果进行逐案例对比显示,这四例都是干扰项排在首位、决定性细节排在末尾的情况,这正是机制预测其应有帮助的地方;同时这也暴露出一个因该改动而失效的德语案例。在没有进行任何新推理的情况下,这一主张变得更为微弱且更难辩驳。
u/Hungry-Horror-7577 reported 68% faithfulness on a gold set and then found his judge was only ever shown the first 600 characters of each retrieved note, against a median note length near 1,500.
u/Hungry-Horror-7577 报告称在一个黄金数据集上实现了 68% 的忠实度,随后发现他的评估器仅被展示了每条检索笔记的前 600 个字符,而笔记长度的中位数接近 1500。
https://www.reddit.com/r/Rag/comments/1wfzp1a/
https://www.reddit.com/r/Rag/comments/1wfzp1a/
He re-judged the same fixed answers at a 2,000-character cap, no regeneration, and bucketed by note length. Where no note exceeded 600 characters the score moved 9 points and ten of eleven questions didn't move at all. Where five or more notes were long it moved 33. Monotone in the direction truncation predicts, which is what turns a suspicion into a cause.
他在2000个字符的上限、无重新生成、并按笔记长度分桶的条件下,对相同的固定答案进行了重新评估。当没有任何笔记超过600个字符时,分数变动了9个点,且11个问题中有10个完全没有变动。当有五个或更多笔记较长时,变动幅度为33。其单调性方向与截断预测的方向一致,这正是将怀疑转化为因果的关键。
The move underneath all three is the same. Before you queue a rerun, ask what each row of your results file already records about its input, whether the effect you're chasing is a split of something you already stored, and whether you can re-score fixed outputs instead of regenerating them. That last one matters more than it looks at small n, because re-scoring holds generation noise fixed, and at 38 or 83 cases that noise is usually the same size as the effect.
这三种情况背后的核心操作是相同的。在排队执行重新运行之前,先询问你的结果文件的每一行已经记录了关于其输入的哪些信息,你正在追踪的效果是否是你已存储内容的某种拆分,以及你是否可以对固定输出进行重新评分而不是重新生成它们。最后这一点在小样本(small n)情况下比看起来更重要,因为重新评分能保持生成噪声不变,而在38或83个案例中,这种噪声通常与效应大小相当。
The limit is that you can only split on what you stored, so the value gets decided at logging time rather than analysis time. Which is an argument for recording the boring fields before you have a hypothesis: position, length, question shape, source document, which prompt template, which seed.
限制在于你只能对你已存储的内容进行拆分,因此价值决定于日志记录时间而非分析时间。这构成了一个论点:在你形成假设之前就记录下那些枯燥的字段:位置、长度、问题形状、源文档、使用了哪个提示模板、哪个随机种子。
What's the field you wish past-you had logged? Mine is the template id, every time.
你希望过去的自己记录的字段是什么?我的答案是模板ID,每次都是。
更进一步:量化金融体系
看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力