論文網址: https://arxiv.org/abs/2404.16130
Graph RAG 介紹
一種新的 Graph RAG 方法,透過建立基於圖形的文本索引,提升對全球性問題的回答品質。這種方法能夠有效地處理大規模文本語料庫,並且能夠擴展到用戶問題的普遍性和要索引的源文本數量。
Graph RAG 管道利用 LLM 衍生的文本圖索引進行資料處理。首先,該管道從來源文件中構建出實體知識圖,將文件中的實體與其關聯關係組織成網狀結構。接著,Graph RAG 使用 LLM 在索引建立階段進行群體預摘要,針對每個具有相似性的實體群體生成摘要,以便更快速地調用相關資訊。當查詢進來時,Graph RAG 可以在查詢時間使用這些預摘要來快速生成「全局答案」。這種方法不僅提升了答案的全面性和多樣性,還能有效降低生成回答時的 token 成本。
Graph RAG 系統的工作流程
RAG 的作用:RAG 的目的是提升 LLM 在回答問題時的準確度和廣度。它先從外部數據來源檢索資料,再將這些資料與問題一起添加到 LLM 的上下文中,讓模型能更有針對性地回答問題。
Graph RAG 的優勢:和一般 RAG 不同,Graph RAG 使用了「圖形索引」來組織和檢索資料,這種方法能更好地處理大型資料集,並且在回答問題時能提供更豐富、全面的答案。
其工作流程如下:
- Graph RAG 系統先生成知識圖譜,將文本中的實體和關係組織成「社區」的層次結構(例如,將相關人物和概念歸為同一群)。這樣可以讓每個「社區」包含特定主題的內容,便於更精準地檢索和總結資料。
- 當用戶提出問題時,系統從不同層次的社區中選擇最合適的摘要來生成答案,這些答案以多階段的方式被組合,確保包含了關鍵的更全面的回應。
透過圖形索引,Graph RAG 能達到更高效的資料組織和檢索效果,並在處理多樣性的問題上表現更佳。這對於需要長期反覆查詢的資料集特別有價值,因為它的索引成本相對較低,但效果很好。
第一步驟:預處理參考資料
Text Chunks → Element Instances
從文本中識別(Chunks )和提取實體(例如人、地點、組織)及其之間的關係(Instances),以便構建一個結構化的圖形表示。
- 實體識別與關係提取:
- 每段源文本被分割為更小的片段。在每個片段中,系統要識別出「節點」和「邊」兩種元素,分別代表「實體」和「實體之間的關係」。
- 系統利用 LLM 的多部分提示來達到這個目的,首先識別出所有實體,包括它們的名稱、類型(如人名、地點、組織等)和描述。接著,系統識別出實體之間的明確關係,並提供詳細的關係描述。
- 自訂與特定領域優化:
- 對於特定領域(如醫學或法律),可以加入一些專門的少量示例(few-shot examples),使LLM更好地理解並識別該領域的專業實體。例如,醫學領域可能包含藥品、疾病、治療方法等特定實體。透過提供少量專門的示例,LLM能更精確地從特定領域的文本中提取相關資訊。
- 此外,若希望從節點中提取更多資訊(例如日期、描述或其他相關變數),則可以使用次要的提示來實現。這些額外的資訊(或「協變量」)能為實體提供更多上下文,例如,該實體是什麼主題、對象、來源範圍、開始和結束日期等。
- 多輪收集過程:
- 為了達到更高的準確性和完整性,系統會使用多輪「收集」方法。首先,LLM會對提取結果進行初步檢查,並判斷是否已經完全提取。為此,會設置一種「是/否」的強制決策過程來檢查是否所有實體都被提取。若系統確認存在遺漏,則再進行一輪收集。
- 系統將引導LLM進一步搜尋缺失的實體,甚至會明確提示「在上次提取中錯過了許多實體」,以確保模型在後續的階段中彌補這些缺失。
- 這種多輪收集方法的優點是,系統可以使用較大文本片段(塊)來提高處理效率,但同時不會影響提取質量或引入額外噪音。
Element Instances → Element Summaries
如何將文本中提取的實體、關係和主張的資訊進一步轉換為更精簡且有意義的摘要,以構建一個支持查詢的圖形索引。以下是逐步解釋:
- 從實例(Instances )到摘要(Summaries)的轉換:
- 使用 LLM 來「提取」來源文本中的實體、關係和主張,其實就是一種抽象總結。這過程中,LLM 不僅要理解文本中明確表述的資訊,還要將隱含資訊(例如隱含的實體關係)轉換為獨立且有意義的摘要。
- 為了讓每個圖形元素(如實體節點、關係邊和主張的附加資訊)更具體明確,需要進行額外一輪的 LLM 總結,將這些實例級別的資訊整合為單一的描述性文本塊,方便查詢時直接使用。
- 實體引用一致性的挑戰:
- 一個潛在問題是,LLM 可能會以不同的格式或名稱來引用相同的實體,這會導致相同實體被多次提取,形成重複的節點。
- 為了克服這個問題,方法設計上會在後續的步驟中偵測並彙整所有相關「社群」實體。因為 LLM 能辨識出多個名稱變體背後的同一實體,只要這些變體有足夠的連結性,即便名稱不同,系統仍能將它們歸為同一實體群體,這樣就能降低重複節點的影響。
- 與典型知識圖的區別:
- 傳統的知識圖依賴於簡潔的三元組(主體、謂語、賓語)來進行推理。但這種方法可能過於簡化,無法包含較為複雜或隱含的資訊。
- 相較之下,這種基於 LLM 的方法能在圖形節點中保留豐富的描述性文字,這更符合全球查詢導向的摘要需求,同時也更能利用 LLM 處理多變而含糊資訊的能力,使索引更具韌性,能夠適應可能包含噪音的圖結構。
Element Summaries → Graph Communities
將之前建立的圖形索引進一步分割成「社群」或「群組」,以便更有效地進行資訊總結。以下是重點解釋:
- 圖形模型的建立:
- 在前一步中已建立了一個索引,這個索引可以表示為「同質無向加權圖」。在這個圖中,實體節點透過關係邊相互連接,並且每條邊的權重反映了該關係實例的標準化計數(即該關係被檢測到的頻率)。
- 這意味著,圖中兩個節點之間的關聯越強,邊的權重就越高,能反映出這些實體之間的連結強度。
- 社群檢測的意義:
- 接下來,透過「社群檢測」算法,可以將圖劃分為不同的社群。這些社群中的節點之間的關聯性比它們與其他社群中的節點來得更強。因此,每個社群代表了彼此關聯較緊密的一組實體。
- 這種社群檢測的目的在於便於之後的資訊總結。社群的劃分讓我們可以根據不同的主題、概念或上下文,將實體分成幾個更具內部一致性的子圖。(在這個論文裡面使用了Leiden算法來調整社群間的層次性結構)
Graph Communities → Community Summaries
透過這樣的社群劃分,我們可以採用「分而治之」的方法來進行全球性的資訊總結。將整體圖分為多個社群後,可以針對每個社群進行摘要,然後再匯總出一個完整的回答。
社群摘要的目標與用途:
- 這些報告式摘要讓用戶能夠在無特定查詢的情況下,直接從整體視角快速了解資料集的結構與語義。例如,使用者可以先在高層級瀏覽不同社群的摘要以尋找感興趣的主題,再逐層深入至提供更多細節的低層級報告。這些摘要還可以作為支持回答全局查詢的資料索引。
社群摘要的生成方法:
- 葉級社群(最小社群):
- 首先處理「樹葉級社群」,這些是最基礎、最小的社群單位。對於這些社群中的元素(包括節點、邊、協變量),系統會依據其「顯著性」進行排序,並將這些元素摘要按順序加入 LLM 的上下文窗口,直到達到 token 上限。
- 排序方式是根據邊的來源和目標節點的度數(度數總和越高,代表該連結越重要)。因此,邊越顯著,它的相關描述(來源節點、目標節點、連結的協變量和邊本身的描述)就會優先被加入摘要。
- 高層級社群:
- 對於包含多個葉級社群的高層級社群,若這些社群內的元素摘要總數沒有超過上下文窗口的 token 限制,則可以按照葉級社群的方式生成摘要。
- 但如果元素摘要超過上下文窗口的 token 限制,則會優先處理並排名較短的子社群摘要,將較長的元素摘要替換成子社群的簡短摘要,直到所有內容能符合上下文窗口的限制。
- 這樣的替換策略確保在儘可能多地保留資訊的同時,符合系統的 token 限制,達到最佳化的摘要效果。
報告式摘要的價值:
- 這種層次化、逐步濃縮的社群摘要方式,使得用戶可以以「分層瀏覽」的方式逐層深入,從全局到細節快速瞭解資料結構。
- 此外,這些摘要能幫助用戶在資料量極大的情況下,維持資訊的完整性與重點,並能夠進行快速查詢與定位。
第二步驟:根據使用者提問來生成最終答案
Community Summaries → Community Answers → Global Answer
當收到用戶的查詢後,系統會利用之前生成的社群摘要來產生最終答案,過程分為三步:
- 準備社群摘要:
- 系統將所有的社群摘要隨機打亂,再分成大小合適的小塊,確保資訊平均分佈,不會因為集中於單一區塊而造成資訊缺失。
- 生成中間答案:
- 系統從每一小塊中生成「中間答案」,並為每個答案打分(0-100),分數越高表示這個答案對回答用戶問題越有幫助。分數為 0 的答案會被過濾掉,不再使用。
- 匯總成最終答案:
- 系統將這些中間答案按照分數從高到低排列,然後逐一添加到最終答案的文本中,直到達到內容限制。這樣就組合出一個完整且最具幫助的「全球答案」,用來回答用戶的查詢。
這樣的流程可以確保系統在回答問題時,不僅能夠全面涵蓋內容,還能提供最相關的資訊。
測試LLM的理解能力
為了評估 RAG 系統能否有效「理解」大型數據集,我們需要設計一些特殊的問題,來測試它是否具備全局性的理解能力,而不僅僅是找出某些具體的事實。
具體方法是:
- 為什麼要特別的問題:一般的問答數據集(例如 HotPotQA)都是直接查找具體答案,像是「誰是某事件的參與者」這樣的問題。這種方法不足以測試 RAG 系統是否能夠「理解」數據集的整體內容或背景意涵。
- 如何生成這些問題:為了讓 RAG 系統能展示出整體理解能力,我們使用了一種方法來自動生成這些全局性的問題:
- 首先,給 LLM 簡單描述一下數據集的內容,然後讓它想像數據集的「潛在用戶」會有哪些,這些用戶會有什麼樣的需求或任務。
- 接著,讓 LLM 為每個「用戶+任務」組合生成一組問題,這些問題需要理解整個數據集才能回答,而不是只針對其中一部分內容。
- 最後的測試問題:設置 N=5,即生成 125 個問題,用來測試 RAG 系統的整體理解和處理能力。這些問題旨在評估系統是否能把握數據集的整體結構和意義。
例如有一位「科技記者」需要從Podcast的文字稿中提取整體趨勢和洞察
用戶設定:這位用戶是一位「科技記者」,他關注的是科技產業的趨勢,特別是科技領袖如何看待「政策和法規」的影響。
任務描述:記者的任務是從眾多播客中找出科技領袖們對於政策、法規的觀點。這樣的任務需要的是整體理解,而不只是回答單一的事實性問題。
問題設計:基於這個任務,設計了5個高層次問題,這些問題都需要有整體視角的資訊來回答:
- 問題 1:「哪些集數主要涉及科技政策和政府監管?」——這問題需要系統能夠掃描所有播客集數,找出和政策、監管相關的內容,並給出一個範圍性的回應。
- 問題 2:「客人如何看待隱私法對科技發展的影響?」——這問題要求系統從各個集數中提取與隱私法影響有關的觀點和分析。
- 問題 3:「有任何嘉賓討論創新與倫理考量之間的平衡嗎?」——這需要系統理解並辨識出和創新、倫理相關的討論,並做出整體的回應。
- 問題 4:「客人提到的對現行政策的建議變更是什麼?」——這需要系統整理出嘉賓們對於政策的改進建議,提供具體又概括的回應。
- 問題 5:「是否討論科技公司與政府之間的合作,以及如何進行?」——這要求系統找出嘉賓們提到的合作模式,以及這些合作是如何被描述的。
測試與比較結果
問題 | 哪些公共人物在各種娛樂文章中被反覆提及? |
---|---|
Graph RAG | 娛樂界知名公眾人物概述 娛樂產業廣泛而多樣,涵蓋電影、電視、音樂、體育和數位媒體。某些公眾人物因其在這些領域的重大貢獻和影響而脫穎而出。以下摘要突顯了在各種娛樂文章中反覆提及的關鍵人物,反映了他們在產業中的影響力和存在感。 演員和導演 […] 爭議中的公眾人物 […] 音樂家和高管 […] 運動員和教練 […] 網紅和企業家 […] 在娛樂文章中反覆提及這些人物,標誌著他們持續的相關性和公眾對他們工作的興趣。他們的影響力遍及娛樂的各個方面,從塑造電影和電視中的文化敘事到推動音樂和數位媒體的趨勢。這些人不僅對各自的領域做出貢獻,還影響著更廣泛的文化格局,經常成為社會討論和公共話語中的核心人物。 |
Naïve RAG | 在各種娛樂文章中反覆提到的公眾人物包括泰勒·斯威夫特、特拉維斯·凱爾西、布蘭妮·斯皮爾斯和賈斯汀·汀布萊克。這些人因其專業成就和個人生活等各種原因而受到關注。 泰勒·斯威夫特 […] 特拉維斯·凱爾西 […] 布蘭妮·斯皮爾斯 […] 賈斯汀·汀布萊克 […] 這些人物因其高知名度和公眾對其職業及個人生活的興趣而經常受到關注。他們在音樂、體育或個人關係中的活動,對文化和經濟有著重要的影響,這從媒體報導和公眾反應中可見一斑。 |