結合符號性記憶,清華等提出ChatDB,提升大模型的復雜推理能力
隨著大語言模型(Large Language Models)的爆火,例如 ChatGPT,GPT-4,PaLM,LLaMA 等,如何讓大語言模型更好的應對有很長的上下文信息(超出其最大處理長度)的場景并利用相關歷史信息做復雜的推理,成為一個熱點研究話題?,F有的主流做法是給大語言模型增加記憶(memory)模塊,在需要的時候從記憶模塊中提取相關的歷史信息幫助大語言模型。
近期,清華大學和北京智源人工智能研究院的研究者們提出了一種新型的符號性(symbolic)記憶模塊。他們從現代計算機架構中汲取靈感,利用符號性記憶模塊來增強大型語言模型。這種符號性記憶模塊可以利用符號性的操作,精確的控制記憶模塊中的信息。這樣的符號性記憶框架由一個大語言模型(如 ChatGPT)和一個數據庫組成,稱為 ChatDB。其中大語言模型負責控制對記憶模塊的讀寫操作。在 ChatDB 中,大語言模型通過生成 SQL 指令來操縱數據庫,從而實現對記憶模塊中歷史信息精確的增刪改查,并在需要時為大語言模型提供信息,以幫助其回應用戶的輸入。這項研究可以讓大語言模型勝任需要對歷史信息進行長期且精確的記錄、處理和分析的場景,例如各種管理和分析系統,以后甚至有望替代管理者,直接讓大語言模型根據精確的歷史數據做分析和決策。
相關論文為:ChatDB: Augmenting LLMs with Databases as Their Symbolic Memory,代碼已開源。
- 論文地址:https://arxiv.org/abs/2306.03901
- 項目主頁:https://chatdatabase.github.io
- 項目代碼:https://github.com/huchenxucs/ChatDB
推特上一些知名的機器學習和自然語言處理研究者也對這項研究進行了宣傳:
與相關工作的對比
之前的記憶模塊主要分為,Prompt-based memory 和 Matrix-based memory 兩類。Prompt-based memory 是將之前的歷史文本和相應文本的 vector embedding 保存下來,需要的時候再利用 vector embedding 間的相似性找到相關的歷史信息,然后放到 prompt 中,作為大語言模型的輸入,相關的工作有 Auto-GPT 和 Generative Agents 等等。Matrix-based memory 是利用額外的 memory tokens 或者 memory matrices 來記錄歷史信息,相關的工作有 Recurrent Memory Transformer 等等。之前這些記憶模塊的設計,要么需要依靠文本的 vector embedding 之間的相似度,要么將歷史信息隱式地存儲在神經網絡的權重中,都涉及神經性(neural)的操作,無法像符號性操作那樣精確操縱記憶模塊中的歷史信息。
它們的主要問題有兩點:(1) 沒有以結構化的形式存儲歷史信息;(2) 對存儲在記憶模塊中的信息的操作不夠精確:它們依賴于一些向量相似度的計算,這可能不準確,長期下來或者進行多步推理的時候就會導致錯誤的積累。
ChatDB 借鑒之前 Neuro-symbolic AI 的一些工作,如 Neural Symbolic Machines,利用支持 SQL 指令的數據庫作為符號性記憶模塊,來支持對歷史信息抽象的(abstract),可拓展的(scalable)和精確的(precise)的操作。這些都是引入符號性記憶模塊所帶來的優勢。符號性記憶模塊還可以跟之前的記憶模塊同時使用,起到相輔相成的作用。
之前的一些大語言模型和數據庫結合的工作(比如DB-GPT和ChatExcel)也涉及用大語言模型生成 SQL 或 Excel 的指令,但 ChatDB 跟它們有本質上的不同。DB-GPT 和 ChatExcel 更多關注利用大語言模型解決自然語言到 SQL 或 Excel 指令的轉化,而且更多只是用來解決查詢的問題,數據源本身是給定好的。ChatDB 則是將數據庫作為符號性記憶模塊,不只涉及查詢,包括了數據庫的增刪改查等所有操作,整個數據庫是從無到有,不斷記錄并更新大語言模型的歷史信息。并且,ChatDB 中的數據庫,即符號性記憶模塊,是與大語言模型緊密關聯、融為一體的,可以幫助大語言模型進行復雜的多步推理。
從大語言模型使用工具的視角來看,類比之前的工作 Toolformer 和 Langchain,ChatDB 將符號性記憶模塊(即數據庫)用作工具。其優勢在于,對于需要使用準確歷史數據進行多步推理的問題,它可以讓大語言模型更準確的存儲并使用歷史數據,而且可以利用數據庫存儲和再利用推理的中間結果,從而取得更好的效果。
重要意義
該工作對大語言模型(LLMs)領域做出了如下幾個貢獻:
- 首先,提出了 ChatDB—— 一個用數據庫作為 LLMs 的符號性記憶模塊來增強 LLMs 的框架。這使得歷史數據可以精確的以結構化的方式進行存儲,并且支持使用 SQL 語句進行抽象的、可拓展的、精確的數據操作。
- 其次,提出了 Chain-of-Memory(CoM,記憶鏈)方法,通過將用戶輸入轉化為多步中間的記憶操作,實現了對記憶模塊中歷史信息的復雜操作。這提高了 ChatDB 的性能,使其能夠處理復雜的、涉及多個表的數據庫交互,并提高了準確性和穩定性。
- 最后,將符號性記憶模塊與 LLMs 結合,可以避免錯誤的累積,方便地存儲中間結果,從而提高了多步推理(multi-hop reasoning)能力,使 ChatDB 在合成數據集上顯著優于 ChatGPT。
方法
ChatDB 框架包含三個主要階段:input processing(輸入處理),chain-of-memory(記憶鏈),和 response summary(總結回復),如圖 2 所示。
1 輸入處理:對于用戶的輸入,如果不涉及使用記憶模塊,則直接生成回復;如果需要記憶模塊,如查詢或者更新數據庫,語言模型則生成與記憶模塊交互的一系列 SQL 語句。
2 記憶鏈:執行一系列記憶操作來與符號性記憶模塊交互。ChatDB 按照先前生成的一系列 SQL 語句依次操作符號性記憶模塊,包括插入、更新、選擇、刪除等操作。外部數據庫執行相應的 SQL 語句,更新數據庫并返回結果。值得注意的是,在執行每一步記憶操作之前,ChatDB 會根據先前 SQL 語句的結果決定是否更新當前記憶操作。ChatDB 按照此過程執行每一步記憶操作,直到所有記憶操作完成。
3 總結回復: 語言模型綜合與數據庫交互得到的結果,并對用戶的輸入做出總結回復。
其中 Chain-of-Memory(CoM,記憶鏈)是一個新提出的方法,以更有效地操作符號性記憶模塊,從而進一步增強 LLMs 的推理能力。記憶鏈方法將用戶輸入轉化為一系列中間記憶操作步驟,將復雜的問題用多個記憶操作步驟來解決,每個中間步驟涉及一個或多個 SQL 語句,大大降低了解決問題的復雜度。
實驗和結果
實驗設置:為了驗證 ChatDB 中將數據庫作為符號性記憶模塊來增強大語言模型的有效性,并與其他的模型進行定量比較,作者構造了一個模擬一家水果店的運營管理的合成數據集。該數據命名為 “水果商店數據集”,其中包含了 70 條按時間順序生成的商店記錄,總共約有 3.3k 個 tokens(小于 ChatGPT 最大上下文窗口長度 4096)。這些記錄包含水果店的四種常見操作:采購、銷售、價格調整和退貨。為了評估模型的性能,作者針對銷售記錄收集了 50 個問題,并為這些問題標注了標準答案。這些問題主要涉及商店數據的分析和管理,它們難度各不相同,既包括需要進行多次推理的困難問題,也包括只需從歷史數據中檢索信息的簡單問題。其中包含了 15 個簡單問題和 35 個困難問題。
模型對比:ChatDB 模型中的 LLM 模塊使用了 ChatGPT (GPT-3.5 Turbo),溫度參數設置為 0,并使用 MySQL 數據庫作為其外部符號性記憶模塊。對比的基線模型為 ChatGPT (GPT-3.5 Turbo),最大的上下文長度為 4096,溫度參數也設置為 0。
指標結果:作者在水果商店問答數據集上進行了實驗,相對于 ChatGPT,ChatDB 在這些問題的解答上展現出了顯著的優勢。
表 1:回答水果商店數據集中問題的正確率
作者表示目前實驗還只是在一個簡單的合成數據集上進行的,之后會在更復雜更貼近現實需求的場景下進行實驗,拓展 ChatDB 的應用價值。
Demo 展示
下面是用大語言模型作為店長經營一家水果商店的例子:
商店進貨
顧客購買商品
顧客退貨
分析商店歷史記錄
ChatDB 交互示例:
ChatDB對水果商店數據集中四種常見操作的回應:
ChatDB和ChatGPT回答問題的示例:
這三個例子中,ChatGPT無法正確回答任何問題,但ChatDB成功回答了所有問題。
團隊介紹
該論文來自于清華大學 MARS Lab和北京智源研究院,論文的作者為清華大學博士生胡晨旭,杜晨壯,駱思勉,指導老師為付杰,趙行,趙俊博。
清華大學MARS Lab,是清華大學交叉信息院下的人工智能實驗室,由趙行教授組建和指導。我們嘗試解決一系列探索性的AI問題,并且一直在尋找新的挑戰。當前我們特別感興趣如何讓機器像人一樣的能夠通過多種感知輸入進行學習、推理和交互。我們的研究涵蓋了許多基礎AI問題及其應用:(1)多媒體計算, (2)自動駕駛, (3)機器人。
了解詳情,請點擊閱讀原文查看項目主頁。