微軟 GraphRAG 與 傳統(tǒng) RAG 架構(gòu)設(shè)計精髓 原創(chuàng)
在數(shù)據(jù)洪流不斷涌來的今天,如何高效且精準地從浩瀚的信息海洋中提煉出有價值的資訊,成為了自然語言處理領(lǐng)域待解決的關(guān)鍵問題。傳統(tǒng)的檢索增強生成(RAG)架構(gòu),以其獨特的檢索與生成結(jié)合的方式,在一定程度上滿足了這一需求,為信息處理帶來了便捷。然而,隨著應(yīng)用場景的復(fù)雜化,傳統(tǒng)RAG在處理全局性、深層次語義信息上的局限性逐漸顯現(xiàn)。
正是在這樣的背景下,微軟創(chuàng)新性地推出了GraphRAG(圖的檢索增強生成)架構(gòu),它不僅保留了傳統(tǒng)RAG架構(gòu)中的精華部分——即快速檢索與生成高質(zhì)量響應(yīng)的能力,更在此基礎(chǔ)上引入了知識圖譜這一革命性的技術(shù)元素。通過精心構(gòu)建的知識圖譜,GraphRAG實現(xiàn)了對信息結(jié)構(gòu)的深度挖掘與全局性把握,使得其在處理復(fù)雜語義關(guān)系和多主題問題時展現(xiàn)出前所未有的優(yōu)勢。下面本文將針對 GraphRAG 與 傳統(tǒng) RAG 架構(gòu)設(shè)計分別進行分析。
一、傳統(tǒng) RAG 架構(gòu)設(shè)計思想
1、文檔編碼:
傳統(tǒng)RAG首先會對輸入的文檔進行預(yù)處理,如分詞、去除停用詞等。接著,利用自然語言處理(NLP)技術(shù),如詞嵌入或Transformer模型,將文檔中的每個詞或短語轉(zhuǎn)換為高維向量,形成文檔的向量表示。
2、信息檢索:
在文檔編碼完成后,RAG架構(gòu)會利用這些向量在已有的知識庫中進行相似度計算,找到與輸入文檔最相關(guān)或最匹配的信息。知識庫可以包括預(yù)訓(xùn)練的模型、外部數(shù)據(jù)庫、歷史問答對等。
3、融合生成:
檢索到相關(guān)信息后,RAG架構(gòu)會將這些信息與原始輸入文檔進行融合。融合的方法可以是通過某種權(quán)重機制、注意力機制等,使得原始文檔與檢索到的信息能夠相互補充。最后,基于融合后的信息,RAG架構(gòu)會生成相應(yīng)的響應(yīng)或輸出。
二、微軟 GraphRAG架構(gòu)設(shè)計思想
1、知識圖譜構(gòu)建
GraphRAG架構(gòu)的核心在于其知識圖譜的構(gòu)建。微軟利用大型語言模型(LLM)從源文檔中提取實體、關(guān)系和屬性等信息。這些信息被組織成一個結(jié)構(gòu)化的知識圖譜,圖譜中的節(jié)點代表實體,邊代表實體之間的關(guān)系。
2、社區(qū)檢測與摘要
在知識圖譜構(gòu)建完成后,GraphRAG會使用社區(qū)檢測算法(如Leiden算法等)來識別圖譜中緊密相關(guān)的實體組(社區(qū))。每個社區(qū)代表一個特定的主題或領(lǐng)域,GraphRAG會為每個社區(qū)生成一個摘要,這個摘要能夠概括該社區(qū)的主要內(nèi)容或特點。
3、查詢聚焦生成
當用戶輸入查詢時,GraphRAG會根據(jù)查詢內(nèi)容在知識圖譜中查找相關(guān)的社區(qū)和摘要。GraphRAG會基于這些相關(guān)的社區(qū)和摘要生成部分響應(yīng),每個響應(yīng)都針對查詢中的某個方面或主題。最后,GraphRAG會將所有相關(guān)的部分響應(yīng)進行匯總和整合,形成一個完整的全局答案。
如上這是論文的一個截圖,描述了 Graph RAG 處理流程。
下圖展示了一個可視化示例。每個圓圈代表一個實體(例如,一個人、一個地點或一個組織),實體大小表示該實體具有的關(guān)系數(shù)量,顏色表示相似實體的分組。顏色分區(qū)是一種建立在圖形結(jié)構(gòu)之上的自下而上的聚類方法,它使我們能夠回答不同抽象層次的問題。
三、微軟 GraphRAG 與傳統(tǒng) RAG 架構(gòu)設(shè)計對比分析
全局性:傳統(tǒng)RAG更側(cè)重于局部信息的匹配和融合,而GraphRAG通過知識圖譜和社區(qū)檢測機制能夠捕獲全局信息,提供更全面、準確的回答。
結(jié)構(gòu)化表示:GraphRAG使用知識圖譜來表示信息,這種結(jié)構(gòu)化的表示方式使得信息更加清晰、易于理解和推理。而傳統(tǒng)RAG則更依賴于向量序列來表示信息,基線 RAG 難以將各個點連接起來。
性能優(yōu)勢:GraphRAG的模塊化設(shè)計使得在索引和查詢時能夠并行處理多個社區(qū)和摘要,提高了處理效率。
四、GraphRAG 系統(tǒng)的簡單使用示例
環(huán)境要求:
Python 3.10-3.12
運行示例:
# 安裝 GraphRAG
pip install graphrag
# 運行索引器,設(shè)置一個數(shù)據(jù)項目和一些初始配置
# 準備一個示例數(shù)據(jù)集
mkdir -p ./ragtest/input
# 獲取查爾斯·狄更斯的《圣誕頌歌》數(shù)據(jù)
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
# 初始化您的工作區(qū),首先運行命令graphrag.index --init
python -m graphrag.index --init --root ./ragtest
# 這將在目錄中創(chuàng)建兩個文件:.env和。settings.yaml./ragtest
# .env包含運行 GraphRAG 管道所需的環(huán)境變量。如果檢查文件,您將看到已定義的單個環(huán)境變量。
# GRAPHRAG_API_KEY=<API_KEY>這是 OpenAI API 或 Azure OpenAI 端點的 API 密鑰。您可以將其替換為您自己的 API 密鑰。
# settings.yaml包含管道的設(shè)置。您可以修改此文件以更改管道的設(shè)置。
# 這里提供了兩種方式,以下以 Azure OpenAI 用戶應(yīng)在 settings.yaml 文件中設(shè)置以下變量為例
type: azure_openai_chat # Or azure_openai_embedding for embeddings
api_base: https://<instance>.openai.azure.com
api_version: 2024-02-15-preview # You can customize this for other versions
deployment_name: <azure_model_deployment_name>
# 運行索引管道
python -m graphrag.index --root ./ragtest
# 運行查詢引擎,有兩種方式:
# 全局搜索提出高級問題的示例:
python -m graphrag.query \--root ./ragtest \--method global \"What are the top themes in this story?"
# 本地搜索詢問有關(guān)特定角色的更具體問題的示例:
python -m graphrag.query \--root ./ragtest \--method local \"Who is Scrooge, and what are his main relationships?"
總結(jié)
微軟GraphRAG通過引入知識圖譜和社區(qū)檢測機制,有效解決了傳統(tǒng)RAG在處理全局性問題時的局限性。其結(jié)構(gòu)化表示和并行處理的能力使得GraphRAG在信息檢索和生成領(lǐng)域具有顯著優(yōu)勢。然而,其復(fù)雜性和高昂的成本也是需要考慮的因素。未來,隨著技術(shù)的不斷進步和優(yōu)化,GraphRAG有望在更多領(lǐng)域得到應(yīng)用和發(fā)展。
開源地址:??https://github.com/microsoft/graphrag???
本文轉(zhuǎn)載自公眾號頂層架構(gòu)領(lǐng)域
原文鏈接:??https://mp.weixin.qq.com/s/k5sF7nYufXbwW8OO29sAtw??
