{"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-hant","path":"/content/papers/zh-hant/model-evaluation/nolima.af8e9ff8d896.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-hant","path":"/content/papers/zh-hant/model-evaluation/lost-in-the-middle.d75958a2f86a.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/d3917196027c3729a255d140f88c8ddc4cf99d5ea087de73ead2f387a8befb47.png)](/content/papers/assets/d3917196027c3729a255d140f88c8ddc4cf99d5ea087de73ead2f387a8befb47.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/d3917196027c3729a255d140f88c8ddc4cf99d5ea087de73ead2f387a8befb47.png":{"width":1440,"height":919}}}
