RAG(三)GraphRAG進階:GraphReader-- 基于圖的Agent,讓大模型“讀懂”長文本
上一篇論文介紹了GraphRAG,今天來看一篇算是其進階版的方法--GraphReader。
對于其研究動機,簡單來說,LLMs具有強大的規劃和反思能力,但在解決復雜任務時,如函數調用或知識圖譜問答(KGQA),以及面對需要多次推理步驟的問題時,仍然面臨困難。特別是當涉及到長文本或多文檔的處理時,現有的方法往往難以充分利用這些模型的能力來捕捉全局信息,并有效地進行決策。此外,當前的方法在處理多跳問題時也存在局限性,無法充分展現LLM的規劃和反思能力。
因此本文提出GraphReaderr,通過構建基于圖的智能體系統(Graph-based Agent System),以圖結構的方式組織長文本,并利用智能體自主探索該圖。主圖結果如下:
1、方法介紹
GraphReader方法主要包括兩部分,下面來詳細看下:
圖構建(Graph Construction)
首先是圖構建,其目的是將長文本轉化為圖結構。
從源文檔中構建實體知識圖譜作為第一步,每個節點
包含一個關鍵元素
和一系列總結的內容
。即,每個節點
代表了文本中的一個關鍵元素及其相關聯的事實。每條邊
表示節點
和
之間的關系。
具體來說,首先將文檔D 分割成最大長度為 L 的塊,同時保留段落結構。對于每個塊,使用LLM將其總結為原子事實,并使用LLM從每個原子事實中提取關鍵元素,如必要的名詞、動詞和形容詞。處理完所有塊后,對關鍵元素進行歸一化,以處理詞匯噪聲和粒度問題,創建最終的關鍵元素集。這種方法將原始文本分割成更小、更易于管理的部分,使得模型能夠在較小的上下文窗口內有效工作。
圖探索(Graph Exploration)
給定圖G和問題Q,目標是設計一個可以使用預定義的函數自主探索圖的智能體。智能體首先維護一個Notebook記錄支持事實,這些事實最終用于推導最終答案。然后執行兩個關鍵初始化:定義合理計劃和選擇初始節點。
- Rational Plan(合理計劃):為了解決復雜的現實世界多跳問題,預先規劃解決方案至關重要。智能體將原始問題逐步分解,識別所需的關鍵信息,并形成一個合理計劃。
- Initial Node(初始節點):選擇戰略性起點對于提高搜索效率至關重要。智能體評估所有節點V的關鍵元素,并根據問題和合理計劃選擇N 個初始節點。
在選擇了N 個初始節點作為起點后,智能體首先探索原子事實,然后探索節點的塊。接下來,根據問題和合理計劃探索相鄰節點。智能體在探索過程中不斷更新Notebook。
- Exploring Atomic Facts(探索原子事實):由于上下文窗口的限制,不可能將所有原始文本塊都包含在上下文窗口內,而所有原子事實都可以適應上下文窗口。因此智能體采用了一種從粗到細的策略。首先,讀取與當前節點相關的所有原子事實,按照它們所屬的文本塊進行分組,并標記相應的塊ID。這樣智能體可以通過閱讀這些分組后的原子事實來快速了解每個文本塊的大致內容,同時利用問題、計劃以及Notebook中的記錄來反思所需的線索,并確定哪些文本塊可能包含有用信息。然后,如果某個文本塊被認為有價值,智能體會調用
read_chunk(List[ID])
函數,完成參數填充并將這些ID添加到塊隊列中,以便進一步閱讀。當智能體認為當前節點的信息已經足夠或需要更多相關數據時,它可以調用stop_and_read_neighbor()
函數,暫停對當前節點的探索,轉而開始探索鄰居節點。 - Exploring Chunks(探索塊):當塊隊列不為空時,表示智能體已經識別出多個感興趣的文本塊。然后遍歷隊列,閱讀每個塊。這一步至關重要,因為原子事實僅總結關鍵信息并提供簡要線索,而特定細節最好直接從原始文本塊中獲得。在閱讀塊時,智能體將再次考慮問題和計劃,思考可以添加到當前Notebook中的信息。在Notebook更新后,智能體將選擇執行下面的操作之一:1)
search_more
如果支持事實不足,將繼續探索隊列中的塊;2)read_previous_chunk
和read_subsequent_chunk
由于截斷問題,相鄰塊可能包含相關和有用的信息,智能體可能會將這些 ID 插入隊列;3)termination
如果已收集到足夠信息以回答問題,將完成探索。 - Exploring Neighbors(探索相鄰節點):一旦當前節點的原子事實和塊隊列已全部處理完畢,表示該節點已徹底探索,智能體需要訪問下一個節點。考慮到問題、計劃和Notebook的內容,智能體檢查所有相鄰節點,并執行以下操作之一:1)
read_neighbor_node
選擇可能有助于回答問題的相鄰節點并重新進入探索原子事實和塊的過程;2)termination
如果確定所有相鄰節點都不包含有用信息,將完成探索。
答案推理(Answer Reasoning)
在 N 個智能體獨立收集信息并停止探索后,編譯每個智能體的Notebook,進行推理和生成最終答案。使用CoT,LLM 首先分析每個筆記,考慮其他記憶中的補充信息,并使用多數投票策略解決任何不一致性。最終,LLM 將考慮所有可用信息以生成最終答案。
2、實驗
評估基準
多跳長文本問答:HotpotQA、2WikiMultihopQA、MuSiQue、HotpotWikiQA-mixup(包括五個文本長度級別:16k、32k、64k、128k和256k)
單跳長文本問答:NarrativeQA
評估指標
F1 分數、精確匹配(Exact Match, EM)分數和優化后的 F1* 分數。F1* 首先計算黃金答案關鍵詞的召回率,僅當其超過一定閾值時才計算 F1 分數,否則得分默認為零。
主要結果
- RAG 方法的結果:基于 BM25 和 Ada002 的 RAG 方法表現最差,可能是因為文本檢索難以召回包含回答問題所需支持事實的所有塊。盡管增加召回的塊數量可以提高文本檢索的性能,但上下文窗口將限制這些RAG方法的有效性。
- 長文本 LLM 的結果:直接使用 GPT-4-128k 處理長文本的直接回答性能顯著優于 RAG 方法,甚至在三個長文本基準測試中優于 ReadAgent。這是因為 GPT-4-128k 在處理長文本和執行多跳推理任務方面的優越性能。
- GraphReader 結果:GraphReader 在四個長文本基準測試中的表現始終優于基線方法,并在多跳長文本任務中展現出卓越的性能。GraphReader 的方法能夠高效識別關鍵信息,并搜索輸入問題的支持事實。
極長上下文任務的結果:
消融實驗
- The Effect of Rational Plan(合理計劃的效果):合理計劃在指導代理選擇和探索圖上的節點是有效的。去除理性計劃后,性能有所下降,這證明了理性計劃在指導探索中的重要性。
- The Effect of Node Selection(節點選擇的效果):隨機選擇導致性能顯著下降,平均下降了18%。表明GraphReader在選擇節點時非常謹慎,從而實現了更合理和有效的探索。
- Impact of the Number of Initial Nodes(初始節點數量的影響):增加節點數量可以提高性能,直到達到某個點,最佳性能為5個初始節點,研究者將其設置為默認值。然而,超過這個閾值,性能會下降,特別是在單跳場景中,這可能是由于太多初始節點增加噪聲。
- Impact of the Chunk Size(塊大小的影響):塊大小的最佳性能為2k。當塊大小超過一定閾值時,性能會下降,因為較大的塊可能導致模型忽略關鍵細節。相反,較小的塊可能導致更多的語義截斷,阻礙理解和準確提取原子事實。
- 成本分析(Cost Analysis):通過比較 ReadAgent 和 GraphReader 在處理單個問題時的平均令牌消耗,結果表明,GraphReader 使用的令牌數量僅比 ReadAgent 多 1.08 倍(52.8k / 48.7k),但性能提升卻超過了雙倍,從而展示了 GraphReader 的優越性。更重要的是,在單文檔多查詢場景中,GraphReader 具有顯著優勢,因為這些場景中只需要構建一個圖,后續的問答可以在這個圖上進行,減少了整體的令牌消耗。
- 支持事實的回憶率分析(Recall Rate Analysis):評估不同方法在 HotpotWikiQA-mixup 數據集上支持事實的回憶率。結果表明,GraphReader 在所有方法中保持了較高的回憶率,即使在 256k 上下文長度下,回憶率也保持在 60% 左右,這證明了 GraphReader 在處理長文本和復雜問題時的性能優于現有的方法,并且能夠高效地利用有限的上下文窗口來處理長距離依賴和多跳關系。
3、總結
以智能體的方式構建了一個基于圖結構方式的LLM處理長文本的方案。但是在圖探索模塊上,每一個環節都需要LLM參與,會導致大量Token消耗,并且圖構建過程可能極其耗時,方法還有很大優化空間。不過,確實為多跳推理、圖結構化表示、圖與LLM結合的研究提供了新的思路和方法。