{"notes":[{"id":"model-evaluation/nolima","category":"model-evaluation","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"NoLiMa","subtitle":"言外之意","author":"Z. Yuan","paperDate":"2025-02-07","publishedOn":"2026-07-30","paperTitle":"NoLiMa: Long-Context Evaluation Beyond Literal Matching","paperUrl":"https://arxiv.org/abs/2502.05167","bibliography":{"title":"NoLiMa: Long-Context Evaluation Beyond Literal Matching","authors":["Ali Modarressi","Hanieh Deilamsalehy","Franck Dernoncourt","Trung Bui","Ryan Rossi","Seunghyun Yoon","Hinrich Schütze"],"url":"https://arxiv.org/abs/2502.05167","pdfUrl":"https://arxiv.org/pdf/2502.05167v3","codeUrl":"https://github.com/adobe-research/NoLiMa","preprint":{"id":"2502.05167","submittedOn":"2025-02-07","url":"https://arxiv.org/abs/2502.05167"},"publication":{"venue":"ICML","year":2025,"kind":"conference","url":"https://proceedings.mlr.press/v267/modarressi25a.html"},"citation":"@misc{modelevaluationnolima2025,\n  title = {{NoLiMa: Long-Context Evaluation Beyond Literal Matching}},\n  author = {Ali Modarressi and Hanieh Deilamsalehy and Franck Dernoncourt and Trung Bui and Ryan Rossi and Seunghyun Yoon and Hinrich Schütze},\n  year = {2025},\n  eprint = {2502.05167},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2502.05167}\n}\n","citationPath":"/content/papers/citations/model-evaluation/nolima.264a4512e69f.bib"},"thumbnail":{"src":"/content/papers/assets/d3917196027c3729a255d140f88c8ddc4cf99d5ea087de73ead2f387a8befb47.png","width":1440,"height":919},"locale":"zh-hans","path":"/content/papers/zh-hans/model-evaluation/nolima.aafd75039807.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"一根不会对字的针","text":"一根不会「对字」的针","depth":3},{"id":"把干草清干净","text":"把干草清干净","depth":3},{"id":"怎么算分","text":"怎么算分？","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"主要结果","text":"主要结果","depth":3},{"id":"两跳比一跳难倒装比默认难","text":"两跳比一跳难，倒装比默认难","depth":3},{"id":"是位置的问题还是长度的问题","text":"是位置的问题，还是长度的问题？","depth":3},{"id":"让模型想一想有用吗","text":"让模型想一想，有用吗？","depth":3},{"id":"把字面线索放回去","text":"把字面线索放回去","depth":3},{"id":"新模型呢","text":"新模型呢？","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"model-evaluation/lost-in-the-middle","relation":"referenced","topic":""}]},{"id":"model-evaluation/lost-in-the-middle","category":"model-evaluation","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Lost in the Middle","subtitle":"U 形的诅咒","author":"Z. Yuan","paperDate":"2023-07-06","publishedOn":"2026-06-09","world":"external/lost-in-the-middle","paperTitle":"Lost in the Middle: How Language Models Use Long Contexts","paperUrl":"https://arxiv.org/abs/2307.03172","bibliography":{"title":"Lost in the Middle: How Language Models Use Long Contexts","authors":["Nelson F. Liu","Kevin Lin","John Hewitt","Ashwin Paranjape","Michele Bevilacqua","Fabio Petroni","Percy Liang"],"url":"https://arxiv.org/abs/2307.03172","pdfUrl":"https://arxiv.org/pdf/2307.03172v3","codeUrl":null,"preprint":{"id":"2307.03172","submittedOn":"2023-07-06","url":"https://arxiv.org/abs/2307.03172"},"publication":{"venue":"Transactions of the Association for Computational Linguistics","year":2024,"kind":"journal","url":"https://aclanthology.org/2024.tacl-1.9/"},"citation":"@misc{modelevaluationlostinthemiddle2023,\n  title = {{Lost in the Middle: How Language Models Use Long Contexts}},\n  author = {Nelson F. Liu and Kevin Lin and John Hewitt and Ashwin Paranjape and Michele Bevilacqua and Fabio Petroni and Percy Liang},\n  year = {2023},\n  eprint = {2307.03172},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2307.03172}\n}\n","citationPath":"/content/papers/citations/model-evaluation/lost-in-the-middle.77681ac150c1.bib"},"thumbnail":{"src":"/content/papers/assets/14c392ed0cd20cff36405d2cccc1e1d2e317e1c84de40c4eae37cde79f4a31e3.png","width":1278,"height":425},"locale":"zh-hans","path":"/content/papers/zh-hans/model-evaluation/lost-in-the-middle.eeda3e34f553.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"多文档问答","text":"多文档问答","depth":3},{"id":"键值检索","text":"键值检索","depth":3},{"id":"受测模型","text":"受测模型","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"u-形曲线","text":"U 形曲线","depth":3},{"id":"长版模型比较会用长上下文吗","text":"长版模型，比较会用长上下文吗？","depth":3},{"id":"连抄字符串都会失手","text":"连抄字符串都会失手","depth":3},{"id":"为什么会这样","text":"为什么会这样？","depth":3},{"id":"那多放一点文档呢","text":"那多放一点文档呢？","depth":3},{"id":"后来的故事","text":"后来的故事","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"model-evaluation/nolima","relation":"citing","topic":""}]}],"text":"2024 年以后，模型发布会上的上下文长度越报越大：128K、1M，甚至 2M token。\n\n要证明模型真的能读这么长，最常见的测试叫「**大海捞针**」（needle-in-a-haystack，NIAH）：在一大堆无关的文本里藏一句话，再问模型那句话说了什么。\n\n2023 年 Greg Kamradt 那个流行的版本，藏的是这句：\n\n> The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.\n\n问题则是：\n\n> What is the most fun thing to do in San Francisco?\n\n你看出问题了吗？\n\n问题里的「San Francisco」，在那根针里原封不动地出现。模型不必理解任何事，只要在上下文里找到相同的字，答案就在旁边。\n\n这篇来自慕尼黑大学（LMU Munich）与 Adobe Research 的论文，发表于 ICML 2025。作者想知道：**如果把这些字面上的线索拿掉，模型还找得到针吗？**\n\n## 定义问题\n\n作者先量了一件事：现有的长上下文评测里，问题和答案所在的段落，字面上有多像？\n\n他们用 ROUGE precision 计算「问题里的词，有多少出现在相关段落中」。数字越高，代表问题和段落共用的词越多：\n\n| 评测 | ROUGE-1 | ROUGE-2 | ROUGE-L |\n| --- | ---: | ---: | ---: |\n| Vanilla NIAH | 0.905 | 0.789 | 0.855 |\n| RULER S-NIAH | 0.571 | 0.461 | 0.500 |\n| RULER QA | 0.809 | 0.437 | 0.693 |\n| ∞Bench QA | 0.966 | 0.545 | 0.960 |\n| **NoLiMa** | **0.069** | **0.002** | **0.067** |\n\n*整理自原论文 Table 1。*\n\n原版大海捞针的 ROUGE-1 高达 0.905，也就是问题里九成的词，都能在针里找到。多文档问答和长文档问答的评测也不低。\n\n作者的论点是，注意力机制很擅长回想重复出现的模式。这些字面重叠，可能让模型在长上下文里找数据变得容易许多。那些宣称的长度，有多少是靠「对字」撑起来的？\n\n于是作者给自己定了一个目标：设计一个**任务本身很简单、但字面比对完全帮不上忙**的评测。\n\n## 解决问题\n\n### 一根不会「对字」的针\n\nNoLiMa 的骨架和大海捞针一样：一根针，一堆干草。差别在针和问题的写法。\n\n一根针长这样：\n\n> Actually, Yuki lives next to the Semper Opera House.\n\n对应的问题是：\n\n> Which character has been to Dresden?\n\n问题里没有 Yuki，没有 Semper Opera House，针里也没有 Dresden。两者之间唯一的联系是一个世界知识：**森帕歌剧院（Semper Opera House）在德累斯顿（Dresden）。**\n\n模型得先想到这个关联，才能把问题和针接起来，回答「Yuki」。\n\n作者把关键词分成两种：问题里的叫 $W_q$（这里是 Dresden），针里的叫 $W_n$（这里是 Semper Opera House）。\n\n难度可以再往上加一层，变成**两跳**（two-hop）：\n\n> Which character has been to the state of Saxony?\n\n这次模型要想两步：森帕歌剧院在德累斯顿，德累斯顿在萨克森州。\n\n除了世界知识，有些针靠的是常识。例如针是「Then Yuki mentioned that he has been vegan for years.」，问题是「哪个角色不能吃鱼类料理？」\n\n\n> [!TIP]\n> \n> **针和问题的设计原则**\n> \n> - **关联要简单**。没有干草时，模型应该很容易答对。\n> - **人名随机抽**。从多元的名字池随机指派，减少分词问题和族群偏差；干草里已出现的名字不用。\n> - **前面加引言**。像「Actually,」这种短开头，让针和前文自然隔开。\n> \n> 每组针还有两种语序：**默认**是名字在前（「Yuki 住在森帕歌剧院旁」），**倒装**是关键词在前（「森帕歌剧院旁住着 Yuki」）。总共 5 组、58 对问题与针。\n\n\n### 把干草清干净\n\n干草是 10 本开放授权的书。为了避免模型背过这些公开书籍，作者不直接用整本，而是从随机的书里随机切出不到 250 token 的片段，一段段接起来。\n\n接着是重要的清理步骤。干草里不能有两种东西：\n\n1. **和问题关键词太像的字**。作者用 Contriever 把干草里的每个词转成向量，找出和每个 $W_q$ 最相似的前 20 个词，人工检查后，删掉含有这些词的句子。\n2. **可能被当成答案的内容**。把干草切成约 250 token 的小段，连同问题一起交给 Llama 3.3 70B，请它找找看有没有答案。被标出来的段落，再由作者人工确认是否删除。反复进行，直到不再需要删除为止。\n\n否则，干草里刚好有个角色去过德累斯顿，评分就乱掉了。\n\n### 怎么算分？\n\n每根针在测试长度内等距放在 26 个位置，搭配 5 份随机干草、58 对问题与针，每个长度一共 7,540 次测试。长度从 250、500、1K 一路测到 32K token。\n\n所有问题问的都是角色名字，所以回答里出现正确名字就算答对。\n\n这里有两个指标需要先弄清楚。\n\n**基准分数（base score）**：用最短的三个长度（250、500、1K）来算。每对问题与针，先对 5 份干草取平均，再取三个长度中最高的那个，最后对所有问题平均。这代表「在几乎没有干草干扰时，模型能答得多好」。\n\n**有效长度（effective length）**：成绩仍维持在基准分数 85% 以上的最大测试长度。\n\n拿 GPT-4o 实际算一次。它的基准分数是 99.3，门槛就是：\n\n$$\n99.3\\times 0.85\\approx 84.4\n$$\n\n再看它在各长度的成绩：\n\n| 长度 | 1K | 2K | 4K | 8K | 16K | 32K |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| GPT-4o | 98.1 | 98.0 | 95.7 | 89.2 | 81.6 | 69.7 |\n\n*摘自原论文 Table 3。*\n\n8K 的 89.2 还在 84.4 以上，16K 的 81.6 就掉到门槛以下。所以 GPT-4o 的有效长度是 **8K**，而它宣称支持的是 128K。\n\n用各模型自己的基准分数当基准，好处是可以把「题目本身难不难」和「长度造成的退化」分开。短上下文就答不好的模型，基准分数本来就低，门槛也跟着低。\n\n## 讨论\n\n### 主要结果\n\n作者测了 13 个宣称支持至少 128K token 的模型：\n\n| 模型 | 宣称长度 | 有效长度 | 基准分数 | 32K |\n| --- | ---: | ---: | ---: | ---: |\n| GPT-4o | 128K | 8K | 99.3 | 69.7 |\n| Llama 3.3 70B | 128K | 2K | 97.3 | 42.7 |\n| Llama 3.1 405B | 128K | 2K | 94.7 | 38.0 |\n| Llama 3.1 70B | 128K | 2K | 94.5 | 43.2 |\n| Gemini 1.5 Pro | 2M | 2K | 92.6 | 48.2 |\n| Jamba 1.5 Mini | 256K | <1K | 92.4 | 43.6 |\n| Command R+ | 128K | <1K | 90.9 | 7.4 |\n| Gemini 2.0 Flash | 1M | 4K | 89.4 | 41.0 |\n| Mistral Large 2 | 128K | 2K | 87.9 | 18.8 |\n| Claude 3.5 Sonnet | 200K | 4K | 87.5 | 29.8 |\n| Gemini 1.5 Flash | 1M | <1K | 84.7 | 28.6 |\n| GPT-4o mini | 128K | <1K | 84.8 | 13.7 |\n| Llama 3.1 8B | 128K | 1K | 76.7 | 14.2 |\n\n*整理自原论文 Table 3，完整表格另有 1K 至 16K 各长度的分数。*\n\n先看「基准分数」那列：大多数模型在短上下文都有八、九十分，表示这些针本身不难。\n\n再看「有效长度」：除了 GPT-4o 的 8K，其他模型都在 4K 以下，很多只有 2K 甚至不到 1K。\n\n把宣称长度和有效长度画在同一条对数轴上，差距更明显：\n\n[![13 个模型的宣称上下文长度与 NoLiMa 有效长度对照；多数模型宣称 128K 以上，有效长度大多在 2K 以下](/content/papers/assets/e3aa48ab0002d733d548b9877541fd248432c1bf4ba500af7e85b8738d4741a5.png)](/content/papers/assets/e3aa48ab0002d733d548b9877541fd248432c1bf4ba500af7e85b8738d4741a5.png)\n\n*本文依原论文 Table 3 的数字绘制，没有使用原论文图片。蓝点为有效长度，灰点为宣称长度；空心点表示有效长度不到 1K。可点图放大。*\n\n最后看 32K：13 个模型里有 11 个，32K 的成绩不到自己基准分数的一半。只有 GPT-4o 和 Gemini 1.5 Pro 守住了一半。\n\n作者还拿同一个模型对照其他评测。Llama 3.1 70B 在 BABILong 的有效长度是 16K，在 RULER 是 32K；到了 NoLiMa，只剩 2K。\n\n另一个有趣的观察是，基准分数高的不一定撑得久。Claude 3.5 Sonnet 和 Gemini 2.0 Flash 的基准分数比 Llama 3.3 70B 低，有效长度却是 4K，比它的 2K 长；在 4K 长度时，两者的原始分数也高于一些基准分数较高的模型。\n\n### 两跳比一跳难，倒装比默认难\n\n作者拿 GPT-4o 和 Llama 3.3 70B 细看两个变因。\n\n**跳数**：同样长度下，两跳题比一跳题难，而且差距随长度拉大。GPT-4o 在 4K 以内，两种题目都还应付得来。\n\n**语序**：倒装的「森帕歌剧院旁住着 Yuki」比默认的「Yuki 住在森帕歌剧院旁」难。\n\n作者的解释和 decoder 的因果注意力有关。默认语序里，名字先出现，读到「森帕歌剧院」时，这个位置已经带着 Yuki 的信息；问题里的 Dresden 只要连到森帕歌剧院，就能顺着找到 Yuki。倒装时，读到森帕歌剧院那一刻，Yuki 还没出现，连到这里也找不到人名，只能依赖名字那一侧较弱的信号。作者也说明，更深入的机制分析超出这篇论文的范围。\n\n### 是位置的问题，还是长度的问题？\n\n读过 [**Lost in the Middle**](https://arxiv.org/abs/2307.03172) 的人，大概会想问：成绩下降，是不是因为针刚好落在中间？\n\n作者用 Llama 3.3 70B 做了两种扫描。\n\n第一种是**全范围扫描**：把针放在整段上下文的 0% 到 100% 各位置。一跳题确实出现了熟悉的情况：越靠中间越差，也就是 lost in the middle。但两跳题不一样：上下文一长，整条曲线一起往下沉，连开头和结尾的位置都跟着变差。\n\n第二种设计比较巧妙，叫**对齐最后 2K**：不管上下文总长是 4K 还是 32K，都把针放在距离结尾 2K token 以内的固定位置。\n\n这样一来，「针到问题的距离」在不同总长下完全相同。Llama 3.x 使用 RoPE 这种相对位置编码，只看 token 之间的相对距离。如果是位置编码造成的问题，同样距离下的成绩应该差不多。\n\n结果是，两跳题在最后 2K 内的曲线相当平稳，位置没有造成太大差别；但上下文总长一变长，整条曲线就往下掉。\n\n既然距离不变，作者据此认为，主要的限制来自上下文变长本身：要注意的 token 变多，在没有字面线索时，注意力机制更难找到相关的事实。\n\n### 让模型想一想，有用吗？\n\n既然要联想，那请模型先写出推理过程（Chain-of-Thought，CoT）呢？\n\n作者在 Llama 3.3 70B 上比较了直接回答和先写三句以内的推理再回答：\n\n| 长度 | 4K | 8K | 16K | 32K |\n| --- | ---: | ---: | ---: | ---: |\n| 一跳，直接答 | 90.3 | 84.1 | 73.2 | 56.2 |\n| 一跳，CoT | 95.6 | 91.1 | 82.6 | 60.6 |\n| 两跳，直接答 | 70.7 | 57.4 | 42.7 | 25.9 |\n| 两跳，CoT | 82.4 | 70.1 | 56.7 | 34.3 |\n\n*整理自原论文 Table 4。*\n\nCoT 有帮助，两跳题的提升幅度也比较大。但两跳题加了 CoT，大约也只追到一跳题直接回答的水准；到了 16K 以上，成绩仍然不好。\n\n作者的解释是，这些问题只有一个线索，没办法再拆成更简单的步骤。难的是想到「德累斯顿」和「森帕歌剧院」之间的关联，而这一步就卡在长上下文里。\n\n作者另外挑出最难的 10 对问题与针，组成 NoLiMa-Hard，测试推理模型。GPT-o1、GPT-o3 Mini、DeepSeek R1-Distill-Llama-70B 的基准分数都接近满分，但到了 32K 全都掉到 50% 以下：GPT-o1 是 31.1，o3 Mini 是 18.9，R1 蒸馏版是 20.7。\n\n### 把字面线索放回去\n\n最后是验证核心假设的消融实验：如果把字面线索加回来，成绩会怎样？\n\n作者设计了两种对照：\n\n- **Direct**：问题直接提到针里的关键词，像原版大海捞针。\n- **Multiple Choice**：问题不变，但附上四个名字选项，其中一个来自针，三个来自干草。这样问题和针之间就多了一个字面上的联系：人名。\n\n| 设置 | 8K | 16K | 32K |\n| --- | ---: | ---: | ---: |\n| Direct | 98.3 | 98.5 | 98.5 |\n| 一跳 | 84.1 | 73.2 | 56.2 |\n| 一跳＋选项 | 98.7 | 97.4 | 93.1 |\n| 两跳 | 57.4 | 42.7 | 25.9 |\n| 两跳＋选项 | 96.3 | 94.6 | 87.2 |\n\n*整理自原论文 Table 6，模型为 Llama 3.3 70B。*\n\n结果非常明显。Direct 题在 32K 还有 98.5；两跳题只要附上选项，32K 从 25.9 跳到 87.2。\n\n字面线索也可以反过来害人。作者在干草里插入一句含有 $W_q$（例如 Dresden）、但和针与问题都无关的句子。字面上，它比真正的针更像答案。加了这种干扰后，GPT-4o 的有效长度从 8K 缩到 1K，Llama 3.3 70B 更差。\n\n### 新模型呢？\n\n论文 v3 的附录补测了一批较新的模型，并把部分模型延伸到 64K 和 128K；为了控制 API 费用，每个长度的放置位置从 26 个减为 11 个。\n\nGPT-4.1 宣称 1M，有效长度 16K，128K 时还有 64.7；GPT-4o 在 128K 是 56.0；Gemini 2.0 Flash 在 128K 只剩 16.4。Llama 4 Scout 宣称支持 10M，有效长度只有 1K。\n\n作者在首页注脚写得很清楚：新模型的长上下文表现有进步，但主要结论仍然成立，成绩在远小于宣称长度的地方就开始快速下滑。\n\n\n> [!NOTE]\n> \n> **自己跑这个评测时的小插曲**\n> \n> [**代码**](https://github.com/adobe-research/NoLiMa)与数据集都已公开。有用户在 GitHub 报告，通过 Azure OpenAI 跑某些题目时，默认的内容过滤器会因判定为暴力内容而中断；作者之一 Franck Dernoncourt 回复，他们评测时已关闭过滤器。\n> \n> 自己重现时，被安全机制挡下的题目也会算成答错，得先确认失分是不是来自模型本身。\n\n\n## 结论\n\nNoLiMa 把大海捞针里最容易被忽略的捷径拿掉了：问题和针之间没有共同的字，只有一个简单的联想。\n\n在这个设置下：\n\n1. **宣称长度和有效长度差很多**。13 个模型里，只有 GPT-4o 的有效长度达到 8K；32K 时，11 个模型掉到自己基准分数的一半以下。\n2. **难的是联想加上长度**。两跳题的成绩随长度整条下沉，连开头和结尾都不例外；对齐距离的实验把原因指向上下文长度，而不只是位置。\n3. **CoT 和推理模型有帮助，但补不完**。NoLiMa-Hard 上，三个推理模型在 32K 都低于 50%。\n4. **字面线索影响很大**。加上选项，两跳题在 32K 从 25.9 升到 87.2；换成干扰用的相同字词，GPT-4o 的有效长度缩到 1K。\n\n作者在结论也提到，这对搜索与 RAG 有直接的含意：真正含答案的文档，用词可能和问题完全不同；而用词更像问题、却与答案无关的文档，反而可能把模型带偏。\n\n能放进 128K 的模型很多，问题换个说法还找得到答案的，就少多了。\n","imageSizes":{"/content/papers/assets/e3aa48ab0002d733d548b9877541fd248432c1bf4ba500af7e85b8738d4741a5.png":{"width":1440,"height":919}}}
