近年來,大語言模型(LLM)及其底層的 transformer 架構已經成為了對話式 AI 的基石,並催生了廣泛的消費級和企業應用程式。儘管有了長足的進步,但 LLM 使用的固定長度的上下文視窗極大地限制了對長對話或長文件推理的適用性。即使是使用最廣泛的開源 LLM,它們的最大輸入長度只允許支援幾十條訊息回覆或短文件推理。
與此同時,受限於 transformer 架構的自注意力機構,簡單地擴充套件 transformer 的上下文長度也會導致計算時間和記憶體成本成倍增加,這就使得全新的長上下文架構成為緊迫的研究課題。
不過,即使我們能夠克服上下文縮放的計算挑戰,但最近的研究卻表明,長上下文模型很難有效地利用額外的上下文。
這如何解決呢?考慮到訓練 SOTA LLM 所需的大量資源以及上下文縮放明顯的回報遞減,我們迫切需要支援長上下文的替代技術。加州大學伯克利分校的研究者在這方面有了新的進展。
在本文中,研究者探究瞭如何在繼續使用固定上下文模型的同時,提供無限上下文的幻覺(illusion)。他們的方法借鑑了虛擬記憶體分頁的思路,使得應用程式能夠處理遠超出可用記憶體的資料集。
基於該思路,研究者利用 LLM 智慧體函式呼叫能力的最新進展,設計出了一個受 OS 啟發、用於虛擬上下文管理的 LLM 系統 ——MemGPT。
論文主頁:https://memgpt.ai/
arXiv 地址:https://arxiv.org/pdf/2310.08560.pdf
專案已經開源,在 GitHub 上已經斬獲了 1.7k 的 star 量。
GitHub 地址:https://github.com/cpacker/MemGPT
方法概覽
該研究從傳統作業系統的分層記憶體管理中汲取靈感,在上下文視窗(類似於作業系統中的「主存(main memory)」)和外部儲存之間有效地「分頁」進出資訊。MemGPT 則負責管理記憶體、LLM 處理模組和使用者之間的控制流。這種設計允許在單個任務期間反覆進行上下文修改,從而允許智慧體更有效地利用其有限的上下文視窗。
MemGPT 將上下文視窗視為受限記憶體資源,併為 LLM 設計類似於傳統作業系統中分層記憶體(Patterson et al., 1988)的層次結構。為了提供更長的上下文長度,該研究允許 LLM 透過「LLM OS」——MemGPT,來管理放置在其上下文視窗中的內容。MemGPT 使 LLM 能夠檢索上下文中丟失的相關歷史資料,類似於作業系統中的頁面錯誤。此外,智慧體可以迭代地修改單個任務上下文視窗中的內容,就像程序可以重複訪問虛擬記憶體一樣。
MemGPT 能夠讓 LLM 在上下文視窗有限的情況下處理無界上下文,MemGPT 的元件如下圖 1 所示。
MemGPT 透過函式呼叫協調主上下文(上下文視窗中的內容)和外部上下文之間的資料移動,MemGPT 根據當前上下文自主更新和檢索。
值得注意的是,上下文視窗需要用 warning token 來標識其限制,如下圖 3 所示:
實驗及結果
在實驗部分,研究者在兩個長上下文域中來評估 MemGPT,分別是對話式智慧體和文件處理。其中對於對話式智慧體,他們擴充套件了現有的多會話聊天資料集(Xu et al. (2021)),並引入了兩個新的對話任務以評估智慧體在長對話中保留知識的能力。對於文件分析,他們根據 Liu et al. (2023a) 提出的任務對 MemGPT 進行基準測試,包括對長文件的問答和鍵值檢索。
用於對話智慧體的 MemGPT
當與使用者對話時,智慧體必須滿足以下兩個關鍵標準。
一是一致性,即智慧體應保持對話的連貫性,提供的新事實、引用和事件應與使用者、智慧體之前的陳述保持一致。
二是參與度,即智慧體應該利用使用者的長期知識來個性化響應。參考之前的對話可以使對話更加自然和引人入勝。
因此,研究者根據這兩個標準對 MemGPT 進行評估:
MemGPT 是否可以利用其記憶來提高對話一致性?能否記住過去互動中的相關事實、引用、事件以保持連貫性?
MemGPT 是否可以利用記憶生成更有吸引力的對話?是否自發地合併遠端使用者資訊以個性化資訊?
關於使用到的資料集,研究者在 Xu et al. (2021) 提出的多會話聊天(MSC)上對 MemGPT 和固定上下文的基線模型展開評估對比。
首先來一致性評估。研究者引入了一個基於 MSC 資料集的深層記憶檢索(deep memory retrieval, DMR)任務,旨在測試對話智慧體的一致性。在 DMR 中,使用者向對話智慧體提出一個問題,並且該問題明確引用先前的對話,預期答案範圍會非常窄。具體可以參加下圖 5 示例。
MemGPT 利用記憶體來保持一致性。下表 2 顯示了 MemGPT 與固定記憶基線模型的效能對比,包括 GPT-3.5 和 GPT-4。
可以看到,MemGPT 在 LLM 判斷準確度和 ROUGE-L 分數方面顯著優於 GPT-3.5 和 GPT-4。MemGPT 能夠利用回想記憶(Recall Memory)查詢過去的對話歷史,進而回答 DMR 問題,而不是依賴遞迴摘要來擴充套件上下文。
然後在「對話開場白」任務中,研究者評估智慧體從先前對話積累的知識中提取引人入勝的訊息並傳遞給使用者的能力。
研究者在下表 3 中展示了 MemGPT 開場白的 CSIM 分數。結果表明,MemGPT 能夠製作引人入勝的開場白,其表現可以媲美甚至超越人類手寫的開場白。此外還觀察到 MemGPT 傾向於製作比人類基線更長且涵蓋更多角色資訊的開場白。下圖 6 為示例。
用於文件分析的 MemGPT
為了評估 MemGPT 分析文件的能力,研究者對 MemGPT 以及在 Liu et al. (2023a) 檢索器 - 閱讀器文件 QA 任務上的固定上下文基線模型進行了基準測試。
結果顯示,MemGPT 能夠透過查詢檔案儲存有效地對檢索器進行多次呼叫,從而可以擴充套件到更大的有效上下文長度。MemGPT 主動從檔案儲存中檢索文件並且可以迭代地分頁瀏覽結果,因而其可用的文件總數不再受到適用 LLM 處理器上下文視窗的文件數量的限制。
由於基於嵌入的相似性搜尋的侷限性,文件 QA 任務對所有方法都構成了極大的挑戰。研究者觀察到,MemGPT 會在檢索器資料庫耗盡之前停止對檢索器結果進行分頁操作。
此外 MemGPT 更復雜操作所建立的檢索文件容量也存在權衡,如下圖 7 所示,其平均準確度低於 GPT-4(高於 GPT-3.5),但可以輕鬆地擴充套件到更大的文件。
研究者還引入了一項基於合成鍵值檢索的新任務,即巢狀鍵值檢索(Nested Key-Value Retrieval),用以演示 MemGPT 如何對來自多個資料來源的資訊進行整理。
從結果來看,雖然 GPT-3.5 和 GPT-4 在原始鍵值任務上表現出了良好效能,但在巢狀鍵值檢索任務中表現不佳。而 MemGPT 不受巢狀層數的影響,並能夠透過函式查詢重複訪問儲存在主記憶體中的鍵值對,來執行巢狀查詢。
MemGPT 在巢狀鍵值檢索任務上的效能,展示了其利用多個查詢的組合執行多條查詢的能力。
更多技術細節和實驗結果請參閱原論文。