RAG(三)GraphRAG進(jìn)階:GraphReader-- 基于圖的Agent,讓大模型“讀懂”長文本

上一篇論文介紹了GraphRAG,今天來看一篇算是其進(jìn)階版的方法--GraphReader。
對(duì)于其研究動(dòng)機(jī),簡單來說,LLMs具有強(qiáng)大的規(guī)劃和反思能力,但在解決復(fù)雜任務(wù)時(shí),如函數(shù)調(diào)用或知識(shí)圖譜問答(KGQA),以及面對(duì)需要多次推理步驟的問題時(shí),仍然面臨困難。特別是當(dāng)涉及到長文本或多文檔的處理時(shí),現(xiàn)有的方法往往難以充分利用這些模型的能力來捕捉全局信息,并有效地進(jìn)行決策。此外,當(dāng)前的方法在處理多跳問題時(shí)也存在局限性,無法充分展現(xiàn)LLM的規(guī)劃和反思能力。
因此本文提出GraphReaderr,通過構(gòu)建基于圖的智能體系統(tǒng)(Graph-based Agent System),以圖結(jié)構(gòu)的方式組織長文本,并利用智能體自主探索該圖。主圖結(jié)果如下:

1、方法介紹

GraphReader方法主要包括兩部分,下面來詳細(xì)看下:
圖構(gòu)建(Graph Construction)
首先是圖構(gòu)建,其目的是將長文本轉(zhuǎn)化為圖結(jié)構(gòu)。
從源文檔中構(gòu)建實(shí)體知識(shí)圖譜
作為第一步,每個(gè)節(jié)點(diǎn)
包含一個(gè)關(guān)鍵元素
和一系列總結(jié)的內(nèi)容
。即,每個(gè)節(jié)點(diǎn)
代表了文本中的一個(gè)關(guān)鍵元素及其相關(guān)聯(lián)的事實(shí)。每條邊
表示節(jié)點(diǎn)
和
之間的關(guān)系。
具體來說,首先將文檔D 分割成最大長度為 L 的塊,同時(shí)保留段落結(jié)構(gòu)。對(duì)于每個(gè)塊,使用LLM將其總結(jié)為原子事實(shí),并使用LLM從每個(gè)原子事實(shí)中提取關(guān)鍵元素,如必要的名詞、動(dòng)詞和形容詞。處理完所有塊后,對(duì)關(guān)鍵元素進(jìn)行歸一化,以處理詞匯噪聲和粒度問題,創(chuàng)建最終的關(guān)鍵元素集。這種方法將原始文本分割成更小、更易于管理的部分,使得模型能夠在較小的上下文窗口內(nèi)有效工作。
圖探索(Graph Exploration)
給定圖G和問題Q,目標(biāo)是設(shè)計(jì)一個(gè)可以使用預(yù)定義的函數(shù)自主探索圖的智能體。智能體首先維護(hù)一個(gè)Notebook記錄支持事實(shí),這些事實(shí)最終用于推導(dǎo)最終答案。然后執(zhí)行兩個(gè)關(guān)鍵初始化:定義合理計(jì)劃和選擇初始節(jié)點(diǎn)。
- Rational Plan(合理計(jì)劃):為了解決復(fù)雜的現(xiàn)實(shí)世界多跳問題,預(yù)先規(guī)劃解決方案至關(guān)重要。智能體將原始問題逐步分解,識(shí)別所需的關(guān)鍵信息,并形成一個(gè)合理計(jì)劃。
- Initial Node(初始節(jié)點(diǎn)):選擇戰(zhàn)略性起點(diǎn)對(duì)于提高搜索效率至關(guān)重要。智能體評(píng)估所有節(jié)點(diǎn)V的關(guān)鍵元素,并根據(jù)問題和合理計(jì)劃選擇N 個(gè)初始節(jié)點(diǎn)。
在選擇了N 個(gè)初始節(jié)點(diǎn)作為起點(diǎn)后,智能體首先探索原子事實(shí),然后探索節(jié)點(diǎn)的塊。接下來,根據(jù)問題和合理計(jì)劃探索相鄰節(jié)點(diǎn)。智能體在探索過程中不斷更新Notebook。
- Exploring Atomic Facts(探索原子事實(shí)):由于上下文窗口的限制,不可能將所有原始文本塊都包含在上下文窗口內(nèi),而所有原子事實(shí)都可以適應(yīng)上下文窗口。因此智能體采用了一種從粗到細(xì)的策略。首先,讀取與當(dāng)前節(jié)點(diǎn)相關(guān)的所有原子事實(shí),按照它們所屬的文本塊進(jìn)行分組,并標(biāo)記相應(yīng)的塊ID。這樣智能體可以通過閱讀這些分組后的原子事實(shí)來快速了解每個(gè)文本塊的大致內(nèi)容,同時(shí)利用問題、計(jì)劃以及Notebook中的記錄來反思所需的線索,并確定哪些文本塊可能包含有用信息。然后,如果某個(gè)文本塊被認(rèn)為有價(jià)值,智能體會(huì)調(diào)用
read_chunk(List[ID])函數(shù),完成參數(shù)填充并將這些ID添加到塊隊(duì)列中,以便進(jìn)一步閱讀。當(dāng)智能體認(rèn)為當(dāng)前節(jié)點(diǎn)的信息已經(jīng)足夠或需要更多相關(guān)數(shù)據(jù)時(shí),它可以調(diào)用stop_and_read_neighbor()函數(shù),暫停對(duì)當(dāng)前節(jié)點(diǎn)的探索,轉(zhuǎn)而開始探索鄰居節(jié)點(diǎn)。 - Exploring Chunks(探索塊):當(dāng)塊隊(duì)列不為空時(shí),表示智能體已經(jīng)識(shí)別出多個(gè)感興趣的文本塊。然后遍歷隊(duì)列,閱讀每個(gè)塊。這一步至關(guān)重要,因?yàn)樵邮聦?shí)僅總結(jié)關(guān)鍵信息并提供簡要線索,而特定細(xì)節(jié)最好直接從原始文本塊中獲得。在閱讀塊時(shí),智能體將再次考慮問題和計(jì)劃,思考可以添加到當(dāng)前Notebook中的信息。在Notebook更新后,智能體將選擇執(zhí)行下面的操作之一:1)
search_more如果支持事實(shí)不足,將繼續(xù)探索隊(duì)列中的塊;2)read_previous_chunk和read_subsequent_chunk由于截?cái)鄦栴},相鄰塊可能包含相關(guān)和有用的信息,智能體可能會(huì)將這些 ID 插入隊(duì)列;3)termination如果已收集到足夠信息以回答問題,將完成探索。 - Exploring Neighbors(探索相鄰節(jié)點(diǎn)):一旦當(dāng)前節(jié)點(diǎn)的原子事實(shí)和塊隊(duì)列已全部處理完畢,表示該節(jié)點(diǎn)已徹底探索,智能體需要訪問下一個(gè)節(jié)點(diǎn)。考慮到問題、計(jì)劃和Notebook的內(nèi)容,智能體檢查所有相鄰節(jié)點(diǎn),并執(zhí)行以下操作之一:1)
read_neighbor_node選擇可能有助于回答問題的相鄰節(jié)點(diǎn)并重新進(jìn)入探索原子事實(shí)和塊的過程;2)termination如果確定所有相鄰節(jié)點(diǎn)都不包含有用信息,將完成探索。
答案推理(Answer Reasoning)
在 N 個(gè)智能體獨(dú)立收集信息并停止探索后,編譯每個(gè)智能體的Notebook,進(jìn)行推理和生成最終答案。使用CoT,LLM 首先分析每個(gè)筆記,考慮其他記憶中的補(bǔ)充信息,并使用多數(shù)投票策略解決任何不一致性。最終,LLM 將考慮所有可用信息以生成最終答案。
2、實(shí)驗(yàn)
評(píng)估基準(zhǔn)
多跳長文本問答:HotpotQA、2WikiMultihopQA、MuSiQue、HotpotWikiQA-mixup(包括五個(gè)文本長度級(jí)別:16k、32k、64k、128k和256k)
單跳長文本問答:NarrativeQA

評(píng)估指標(biāo)
F1 分?jǐn)?shù)、精確匹配(Exact Match, EM)分?jǐn)?shù)和優(yōu)化后的 F1* 分?jǐn)?shù)。F1* 首先計(jì)算黃金答案關(guān)鍵詞的召回率,僅當(dāng)其超過一定閾值時(shí)才計(jì)算 F1 分?jǐn)?shù),否則得分默認(rèn)為零。
主要結(jié)果
- RAG 方法的結(jié)果:基于 BM25 和 Ada002 的 RAG 方法表現(xiàn)最差,可能是因?yàn)槲谋緳z索難以召回包含回答問題所需支持事實(shí)的所有塊。盡管增加召回的塊數(shù)量可以提高文本檢索的性能,但上下文窗口將限制這些RAG方法的有效性。
- 長文本 LLM 的結(jié)果:直接使用 GPT-4-128k 處理長文本的直接回答性能顯著優(yōu)于 RAG 方法,甚至在三個(gè)長文本基準(zhǔn)測試中優(yōu)于 ReadAgent。這是因?yàn)?GPT-4-128k 在處理長文本和執(zhí)行多跳推理任務(wù)方面的優(yōu)越性能。
- GraphReader 結(jié)果:GraphReader 在四個(gè)長文本基準(zhǔn)測試中的表現(xiàn)始終優(yōu)于基線方法,并在多跳長文本任務(wù)中展現(xiàn)出卓越的性能。GraphReader 的方法能夠高效識(shí)別關(guān)鍵信息,并搜索輸入問題的支持事實(shí)。

極長上下文任務(wù)的結(jié)果:

消融實(shí)驗(yàn)
- The Effect of Rational Plan(合理計(jì)劃的效果):合理計(jì)劃在指導(dǎo)代理選擇和探索圖上的節(jié)點(diǎn)是有效的。去除理性計(jì)劃后,性能有所下降,這證明了理性計(jì)劃在指導(dǎo)探索中的重要性。
- The Effect of Node Selection(節(jié)點(diǎn)選擇的效果):隨機(jī)選擇導(dǎo)致性能顯著下降,平均下降了18%。表明GraphReader在選擇節(jié)點(diǎn)時(shí)非常謹(jǐn)慎,從而實(shí)現(xiàn)了更合理和有效的探索。

- Impact of the Number of Initial Nodes(初始節(jié)點(diǎn)數(shù)量的影響):增加節(jié)點(diǎn)數(shù)量可以提高性能,直到達(dá)到某個(gè)點(diǎn),最佳性能為5個(gè)初始節(jié)點(diǎn),研究者將其設(shè)置為默認(rèn)值。然而,超過這個(gè)閾值,性能會(huì)下降,特別是在單跳場景中,這可能是由于太多初始節(jié)點(diǎn)增加噪聲。

- Impact of the Chunk Size(塊大小的影響):塊大小的最佳性能為2k。當(dāng)塊大小超過一定閾值時(shí),性能會(huì)下降,因?yàn)檩^大的塊可能導(dǎo)致模型忽略關(guān)鍵細(xì)節(jié)。相反,較小的塊可能導(dǎo)致更多的語義截?cái)啵璧K理解和準(zhǔn)確提取原子事實(shí)。

- 成本分析(Cost Analysis):通過比較 ReadAgent 和 GraphReader 在處理單個(gè)問題時(shí)的平均令牌消耗,結(jié)果表明,GraphReader 使用的令牌數(shù)量僅比 ReadAgent 多 1.08 倍(52.8k / 48.7k),但性能提升卻超過了雙倍,從而展示了 GraphReader 的優(yōu)越性。更重要的是,在單文檔多查詢場景中,GraphReader 具有顯著優(yōu)勢,因?yàn)檫@些場景中只需要構(gòu)建一個(gè)圖,后續(xù)的問答可以在這個(gè)圖上進(jìn)行,減少了整體的令牌消耗。

- 支持事實(shí)的回憶率分析(Recall Rate Analysis):評(píng)估不同方法在 HotpotWikiQA-mixup 數(shù)據(jù)集上支持事實(shí)的回憶率。結(jié)果表明,GraphReader 在所有方法中保持了較高的回憶率,即使在 256k 上下文長度下,回憶率也保持在 60% 左右,這證明了 GraphReader 在處理長文本和復(fù)雜問題時(shí)的性能優(yōu)于現(xiàn)有的方法,并且能夠高效地利用有限的上下文窗口來處理長距離依賴和多跳關(guān)系。


3、總結(jié)
以智能體的方式構(gòu)建了一個(gè)基于圖結(jié)構(gòu)方式的LLM處理長文本的方案。但是在圖探索模塊上,每一個(gè)環(huán)節(jié)都需要LLM參與,會(huì)導(dǎo)致大量Token消耗,并且圖構(gòu)建過程可能極其耗時(shí),方法還有很大優(yōu)化空間。不過,確實(shí)為多跳推理、圖結(jié)構(gòu)化表示、圖與LLM結(jié)合的研究提供了新的思路和方法。




































