
一般的 RAG 先用向量相似度挑出前 k 段文字,再把原文放進語言模型的 context。問題需要的資訊,字面上卻不一定像問題:使用者幾個月前提過自己有缺鐵性貧血,今天問「吃什麼比較有精神」,相似度排序很可能把那段對話排在外面;把所有對話都塞進 context,又貴,模型也容易忽略重點。Memorilla 讓一個可訓練的記憶模組(memory module)每次都讀過整個文件庫的向量,把這個問題需要的資訊濃縮成 16 個記憶 token(memory token),直接放進凍結(frozen)LLM 的輸入嵌入空間(input embedding space)。
這篇論文是〈Memorilla: Latent Semantic Memory for LLMs〉,作者是 Adibvafa Fallahpour、Parsa Idehpour、Vignesh Kothapalli 等七人,主要來自 Stanford 的 Jure Leskovec 團隊,另有 Toronto 大學、UPenn、MIT、Vector Institute 與 Arc Institute 的研究者。論文 2026 年 10 月 15 日上傳到 arXiv,11 月 3 日更新到第三版。它是 COLM 2026 一場 workshop(Context Beyond the Window)的論文,不屬於主會議。程式碼和權重都已公開。下文的數字都是作者自己測的,目前沒有第三方重現。
在作者自己選的八項評測上,Memorilla 的平均分最高,但只在其中五項拿第一。它擅長把整個文件庫裡、字面上和問題不像的資訊連起來;RAG 擅長精確細節,例如名字,兩者答對的題目有不少並不重疊。代價是它得把向量寫進 LLM 的輸入層,所以只能搭配開放權重的模型,而且每換一個 LLM,就要重新訓練一個記憶模組。
記憶模組怎麼讀整個文件庫?
Memorilla 把「記住」和「想起」分成兩段,論文的設定如下:
- 記住:每份文件,例如一次對話、一段書稿、知識圖譜裡的一條三元組(triple),由凍結的 Qwen3-Embedding-4B 編成一個向量,存進記憶庫。每份文件只編碼一次,跟建立向量索引一樣;新增文件只要多跑一次編碼器。
- 想起:每次提問,記憶模組用 16 個學來的槽位(slot)先讀問題的向量,再經過幾層交叉注意力(cross-attention)讀記憶庫裡的每一個文件向量。每個槽位都看得到全部文件,由問題決定留下哪些資訊,中間沒有挑出前 k 篇的步驟。
- 交給 LLM:16 個槽位投影到 LLM 輸入嵌入的維度,成為 16 個記憶 token,接在問題前面一起送進凍結的 Qwen3-8B。LLM 的每一層都維持原樣,它讀不到文件原文,只讀這 16 個向量和問題。
整個系統只訓練記憶模組,約 1.94 億個參數,編碼器和 LLM 都不動。訓練分三階段:先用 198 萬筆 Wikipedia 改寫重建(paraphrase reconstruction)的資料,練習在固定容量裡保存內容;再用十個閱讀理解、問答與摘要資料集的 134 萬筆資料;最後用八項評測的訓練集微調。
RAG 和 Memorilla 可以共用同一批文件向量和同一個 LLM,兩者的差別在讀記憶庫的方式,以及交給 LLM 的東西。RAG 依相似度挑出前 k 段,把原文放進 context;Memorilla 讀過全部文件,交出固定長度的向量。專案頁用貧血的例子示意:使用者問白天要吃什麼才有精神,RAG 依相似度挑到的前三段不包含提到貧血的那段對話,回答糙米、藜麥、燕麥這類複合碳水化合物;Memorilla 連到先前提過的缺鐵性貧血和半馬訓練,建議扁豆、菠菜這類含鐵的食物。這張圖的分數和文字都是示意,論文的個人化案例(PersonaMem-v2)則有同樣情境的實際輸出。
作者自己說明了兩者的取捨:RAG 把選中文件的原文交給模型,適合答案就是一個能逐字找到的名字;Memorilla 讀得到整個文件庫,能連起和問題只有微弱相似的資訊,但 16 個 token 的固定容量會丟掉細節,例如確切的名字。
八項評測的成績如何?
八項評測涵蓋個人化、知識密集問答與長文件問答。所有方法都用同一個凍結的 Qwen3-Embedding-4B 編碼、同一個凍結的 Qwen3-8B 回答,對照組有全文(full context)、取前 1、5、50 段的 RAG、Mem0、MemoRAG、xRAG 與 LLMLingua-2。各項的主要指標如下(0 到 100,越高越好):
| 評測 | 指標 | 全文 | 最佳對照組 | Memorilla |
|---|---|---|---|---|
| PersonaMem-v2 | 短答準確率 | 27.92 | 30.90(xRAG) | 44.60 |
| PersonalizationV4 | 短答準確率 | 59.12 | 67.88(MemoRAG) | 66.65 |
| PubMedQA | 準確率 | 67.00 | 69.00(LLMLingua-2) | 59.00 |
| FactKG | 準確率 | 80.43 | 80.43(全文) | 84.33 |
| NarrativeQA | ROUGE-L | 17.99 | 20.51(MemoRAG) | 19.31 |
| TriviaQA | 完全符合(EM) | 52.60 | 56.60(MemoRAG) | 57.00 |
| LaMP-4 | ROUGE-L | 14.21 | 16.10(xRAG) | 18.15 |
| LaMP-7 | ROUGE-L | 43.71 | 46.84(xRAG) | 48.37 |
Memorilla 的平均分 49.68 最高,但只在 PersonaMem-v2、FactKG、TriviaQA、LaMP-4、LaMP-7 五項拿第一。另外三項輸給對照組:PersonalizationV4 和 NarrativeQA 輸給 MemoRAG(66.65 對 67.88、19.31 對 20.51),PubMedQA 輸給 LLMLingua-2(59.00 對 69.00),全文、MemoRAG 等四個對照組的 67.00 也比它高。作者指出,這三項贏它的方法交給 LLM 的文件 token 多了 18 到 690 倍。
平均分要打點折扣。它把準確率、完全符合和 ROUGE-L 放在一起平均,這些分數的尺度不同,只能粗略比較;照論文附錄的完整結果算,第二名 MemoRAG 的平均是 47.52,差距約 2 分。有些差距背後的題數也很少:PubMedQA 的測試只有 100 題,10 分就是 10 題;TriviaQA 用 500 題的驗證子集,57.00 對 56.60 只差 2 題。PersonalizationV4 則是作者自己用 GPT-5 系列模型合成的資料集。
省下的 token 很多。不算問題和指令,Memorilla 每題交給 LLM 的文件 token 固定是 16 個;以八項的幾何平均算,比全文少 394 倍,比 RAG-50 少 113 倍。FactKG 少 108 倍;NarrativeQA 的差距最大,全文平均每題 67,385 個 token,是 Memorilla 的 4,212 倍。
延遲的「27 倍」要看清楚比較對象。作者在單張 H100、batch size 1 的條件下放 512 份文件,每份 250 個 token,合計約 12.8 萬個 token。全文超過作者設定的 32,768 token 上限,得用 YaRN 延伸,端到端要 19.9 秒;Memorilla 是 0.74 秒,約快 27 倍。只有 1 份文件時,兩者都在 0.75 秒左右。這組測試沒有替 RAG 計時,所以不能讀成「比 RAG 快 27 倍」。作者也說,單題延遲主要花在 LLM 解碼,Memorilla 的好處在文件庫變大時成本維持不變;全文的計時用 Hugging Face transformers 的 generate,沒有分頁 KV 快取(paged KV cache),換一套推論框架,數字也會不同。
FactKG 要判斷一句陳述對不對,證據是一批知識圖譜三元組,有些陳述要把幾條事實串起來才判斷得了。需要組合的事實從 1 條增加到 4 條時,RAG-50 的準確率從 78.73% 掉到 51.75%,Memorilla 一直維持在 80% 到 89% 之間。作者也承認,FactKG 有 73.5% 的陳述配有超過 50 個片段,RAG-50 有一部分輸在根本沒檢索到證據;但讀進全部片段的全文,整體準確率仍是 80.43%,低於 Memorilla 的 84.33%。
在 FactKG 上,兩者答對的題目也不太重疊:15.9% 的題目只有 Memorilla 答對,10.0% 只有 RAG-50 答對;只要任一方答對就算,聯集可以到 94.3%,高於 Memorilla 的 84.3% 和 RAG-50 的 78.4%。這個 94.3% 是理論上限(oracle),等於假設每一題都事先知道該信哪一邊。作者沒有做出混合系統,只把它列為下一步。
論文另外做了一個 agent 實驗。TextWorld 是文字冒險遊戲,agent 要在最多 65 個房間裡探索、操作物品,在 50 回合內完成任務。作者讓凍結的 Qwen3-4B-Instruct-2507 當 agent,每回合結束就把這一回合存成一份文件,由記憶模組把累積的紀錄濃縮成 8 個記憶 token。這裡的記憶加在完整歷史紀錄之外,記憶模組改用遊戲獎勵做強化學習(GRPO)訓練。測試集有 40 局遊戲(其中 30 局不重複),每局各玩三次。和只看完整歷史的 agent 相比,三次的平均成功率從 18.6% 升到 24.2%;三次中至少成功一次的局數比例從 25.0% 升到 37.5%,也就是從 10 局增加到 15 局。沒訓練過的記憶模組反而低於基準(15.3%、22.5%),作者據此認為增益來自訓練。這個實驗的範圍很窄:只有一套遊戲,每局最多 50 回合,作者也說跨環境、長期部署的學習還沒驗證。
用之前要知道哪些限制?
- 會漏掉精確細節。作者在限制裡寫,Memorilla 可能丟掉確切的名字這類細節,原因可能是編碼器從來沒為壓縮訓練過。NarrativeQA 依題型拆開看,「為什麼」「怎麼」的題目,Memorilla 的 ROUGE-L 比 RAG-50 高 4.91 和 7.02 分;「誰」「哪一個」的題目,RAG-50 高 3.45 和 2.93 分,這類答案通常能在原文逐字找到。文件很短時也用不著它:PubMedQA 每題只有四篇摘要,平均合計 324 個 token,作者自己的結論是直接讀原文比較好。
- 需要開放權重,每個 LLM 各訓練一個記憶模組。記憶 token 直接寫進 LLM 的輸入嵌入,得能存取模型權重,只接受文字輸入的閉源 API 模型就用不了;換一個 LLM,就要重新訓練一個記憶模組。目前公開的權重只有搭配 Qwen3-8B 與 Qwen3-Embedding-4B 這組模型的五份記憶模組:三個訓練階段各一份,兩個個人化評測各一份。GitHub 的 README 寫明,跑範例要一張 80 GB 的 GPU;在四張 H100 上訓練完三個階段約 19 小時,還要下載約 310 GiB 的資料與向量。
- 只測過 Qwen 配 Qwen、純文字。所有實驗都用 Qwen 編碼器配 Qwen 解碼器,換別的模型家族、圖片或聲音等其他模態,或程式碼這類領域,都還沒測過。
- 比較的條件對它有利。訓練最後一階段用了八項評測的訓練集,PersonaMem-v2 和 PersonalizationV4 另外各再微調 5 個 epoch。對照組裡,RAG、全文、Mem0、MemoRAG 和 LLMLingua-2 都沒有用評測資料訓練;只有 xRAG 有訓練,作者替它在各評測的訓練集上從頭訓練一個約 2,700 萬參數的轉接層,規模遠小於 Memorilla 三個階段、1.94 億參數的訓練。作者做過一個對照:用 Memorilla 微調時的同一批資料、不給任何文件,訓練一個參數量相近(2.68 億)的 LoRA 轉接器,Memorilla 在每項主要指標都較好,其中 PubMedQA 與 LaMP-7 的差距在雜訊範圍內。這表示增益不全來自多做的訓練;不過 LoRA 那組用 4B 的解碼器,Memorilla 用 8B,兩者仍不完全對等。
參考資料
- Adibvafa Fallahpour、Parsa Idehpour、Vignesh Kothapalli 等,〈Memorilla: Latent Semantic Memory for LLMs〉,arXiv.21375(HTML 全文 v3),v1 2026 年 10 月 15 日,v3 2026 年 11 月 3 日;COLM 2026 Workshop on Context Beyond the Window: Persistent Knowledge in Language Models。
- 專案頁:memory.stanford.edu。
- 程式碼:snap-stanford/memorilla(Apache-2.0)。
- 權重與資料:Hugging Face memorilla(Memorilla-Qwen3-8B、Memorilla-Data、PersonalizationV4)。