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