1 索引
GraphRAG的索引過(guò)程可以分為以下幾個(gè)關(guān)鍵步驟:
-
從源文檔到文本塊:
- 將源文檔的文本分割成較小的文本塊,以便后續(xù)處理方椎。文本塊的大小會(huì)影響實(shí)體提取的召回率鳞仙,較小的塊通常能提取更多的實(shí)體。但是冤狡,如果塊太小也會(huì)帶來(lái)一些新的問(wèn)題,例如:較小的文本塊可能無(wú)法提供足夠的上下文信息,導(dǎo)致LLM難以準(zhǔn)確理解實(shí)體之間的關(guān)系泵喘;較小的文本塊也需要更多的LLM調(diào)用,這可能會(huì)導(dǎo)致整體處理效率下降般妙。
-
從文本塊到元素實(shí)例:
- 使用LLM(大語(yǔ)言模型)從每個(gè)文本塊中提取實(shí)體和關(guān)系纪铺。實(shí)體包括名稱、類型和描述碟渺,關(guān)系則描述實(shí)體之間的關(guān)聯(lián)鲜锚。(元素是指實(shí)體、關(guān)系以及Claim)
- 通過(guò)多輪提取苫拍,確保盡可能多的實(shí)體和關(guān)系被提取出來(lái)芜繁。
- 提取Claim(可選): 在提取實(shí)體和關(guān)系之后,可以使用另一個(gè)LLM提示(prompt)來(lái)提取與實(shí)體相關(guān)的Claim绒极。Claim是與實(shí)體相關(guān)的陳述或主張骏令,通常描述了某個(gè)實(shí)體在文本中的特定行為、觀點(diǎn)垄提、事件或?qū)傩浴?/li>
-
從元素實(shí)例到元素摘要:
- 對(duì)提取的實(shí)體和關(guān)系進(jìn)行摘要榔袋,生成每個(gè)元素的描述性文本塊。這些摘要幫助理解實(shí)體的含義和它們之間的關(guān)系铡俐。
- 例如:
- 實(shí)體摘要:“微軟”——“全球領(lǐng)先的科技公司凰兑,專注于軟件開(kāi)發(fā)、云計(jì)算和人工智能”
- 關(guān)系摘要:“微軟“與”人工智能”的關(guān)系——“微軟在AI領(lǐng)域進(jìn)行了大量投資审丘,并推出了多個(gè)AI驅(qū)動(dòng)的產(chǎn)品和服務(wù)”吏够。
- Claim摘要:“Satya Nadella強(qiáng)調(diào)了AI的重要性”——“微軟CEO Satya Nadella在最近的采訪中強(qiáng)調(diào)了AI對(duì)未來(lái)科技發(fā)展的重要性”。
-
從元素摘要到Commutity:
- 將元素摘要構(gòu)建成一個(gè)同質(zhì)無(wú)向加權(quán)圖备恤,其中節(jié)點(diǎn)代表實(shí)體稿饰,邊代表實(shí)體之間的關(guān)系,邊的權(quán)重表示關(guān)系的強(qiáng)度(邊的權(quán)重是基于從文本中提取的關(guān)系實(shí)例的頻率或重要性來(lái)計(jì)算的)露泊。
- 使用社區(qū)檢測(cè)算法(如Leiden算法)將圖劃分為多個(gè)緊密連接的社區(qū)(dense group)喉镰,每個(gè)社區(qū)包含一組高度相關(guān)的實(shí)體。
-
從圖社區(qū)到社區(qū)摘要:
- 為每個(gè)社區(qū)生成摘要惭笑,描述該社區(qū)中的主要實(shí)體侣姆、關(guān)系和主題生真。這些摘要在回答全局查詢時(shí)非常有用。
- 對(duì)于葉級(jí)社區(qū)(最底層的社區(qū))捺宗,直接使用元素摘要生成摘要柱蟀;對(duì)于更高級(jí)別的社區(qū),使用子社區(qū)的摘要來(lái)替代部分元素摘要蚜厉。
2 查詢
GraphRAG的查詢過(guò)程包括全局查詢和局部查詢(Local Query)兩種长已。
2.1 全局查詢
GraphRAG的全局查詢過(guò)程是一個(gè)多階段的過(guò)程,旨在通過(guò)利用預(yù)先構(gòu)建的圖索引和社區(qū)摘要來(lái)回答用戶的查詢昼牛。以下是整個(gè)過(guò)程的詳細(xì)步驟:
-
- 查詢解析與實(shí)體識(shí)別
- 針對(duì)一個(gè)查詢术瓮,系統(tǒng)會(huì)對(duì)該查詢進(jìn)行解析,識(shí)別出其中的關(guān)鍵實(shí)體和主題贰健。之后使用嵌入模型(embedding model)將查詢轉(zhuǎn)換為向量表示胞四,以便與社區(qū)摘要進(jìn)行語(yǔ)義匹配。
-
語(yǔ)義匹配與社區(qū)摘要選擇
- 計(jì)算查詢向量與社區(qū)摘要向量之間的相似度伶椿,找到與查詢最相關(guān)的社區(qū)摘要辜伟。
- 根據(jù)查詢的復(fù)雜性和所需的詳細(xì)程度,選擇合適層次的社區(qū)摘要(如C0脊另、C1导狡、C2、C3)尝蠕。
- 對(duì)于全局查詢烘豌,通常選擇較高層次的社區(qū)摘要(如C0或C1),因?yàn)樗鼈兒w了較廣泛的主題看彼。
-
隨機(jī)打亂與分塊:
- 將社區(qū)摘要隨機(jī)打亂并分成預(yù)定義大小的塊廊佩,以確保相關(guān)信息均勻分布在多個(gè)塊中,而不是集中在單個(gè)上下文窗口中靖榕。 這種分塊方式有助于避免信息丟失标锄,并提高回答的多樣性。
- 例如:
- 假設(shè)有以下社區(qū)摘要:
- 社區(qū)A:人工智能(AI)在科技行業(yè)中的重要性茁计。
- 社區(qū)B:云計(jì)算市場(chǎng)的競(jìng)爭(zhēng)格局料皇。
- 社區(qū)C:隱私政策對(duì)科技公司的影響。
- 隨機(jī)打亂后星压,社區(qū)摘要可能被重新組合為:
- 塊1:人工智能的重要性 + 隱私政策的影響践剂。
- 塊2:云計(jì)算市場(chǎng)的競(jìng)爭(zhēng) + 人工智能的重要性。
- 塊3:隱私政策的影響 + 云計(jì)算市場(chǎng)的競(jìng)爭(zhēng)娜膘。
- 假設(shè)有以下社區(qū)摘要:
-
生成中間答案(Map階段)
- 對(duì)于每個(gè)社區(qū)摘要塊逊脯,使用LLM生成一個(gè)中間答案(partial answer)。
- LLM還會(huì)為每個(gè)生成的中間答案分配一個(gè)幫助分?jǐn)?shù)(helpfulness score)竣贪,范圍從0到100军洼,表示該答案對(duì)回答查詢的有用程度巩螃。
- 幫助分?jǐn)?shù)為0的答案會(huì)被過(guò)濾掉,不參與后續(xù)的匯總匕争。
-
匯總?cè)执鸢福≧educe階段):
- 將中間答案按幫助分?jǐn)?shù)從高到低排序避乏。
- 將這些中間答案逐步添加到一個(gè)新的上下文窗口中,直到達(dá)到token的最大限制甘桑。
- 使用最終的上下文窗口生成一個(gè)全局答案拍皮,返回給用戶。
2.2 局部查詢
-
查詢解析與實(shí)體識(shí)別:
- 對(duì)查詢進(jìn)行解析扇住,識(shí)別出關(guān)鍵實(shí)體和主題春缕。之后盗胀,使用嵌入模型(embedding model)將查詢轉(zhuǎn)換為向量表示艘蹋。
-
語(yǔ)義匹配與實(shí)體檢索
- 計(jì)算查詢向量與圖索引中實(shí)體和關(guān)系的向量之間的相似度,找到與查詢最相關(guān)的實(shí)體票灰。此步驟側(cè)重于語(yǔ)義匹配(向量相似度比較)
-
圖遍歷與信息提取
- 從圖索引中與查詢相關(guān)的實(shí)體節(jié)點(diǎn)出發(fā)女阀,遍歷與之相連的關(guān)系邊和Claim,提取詳細(xì)信息屑迂。此步驟側(cè)重于圖遍歷(圖結(jié)構(gòu)分析)
-
獲取低層次社區(qū)摘要(可選)
- 如果查詢需要更詳細(xì)的子主題信息浸策,GraphRAG會(huì)從低層次社區(qū)摘要中提取相關(guān)信息。例如惹盼,如果查詢涉及“微軟在人工智能領(lǐng)域的投資”庸汗,GraphRAG可能會(huì)獲取與“微軟”和“人工智能”相關(guān)的低層次社區(qū)摘要,描述具體的投資項(xiàng)目和合作伙伴手报。
-
生成詳細(xì)答案:
- 使用LLM生成一個(gè)詳細(xì)答案蚯舱,描述與查詢相關(guān)的具體信息。例如掩蛤,對(duì)于查詢“微軟在人工智能領(lǐng)域的投資有哪些枉昏?”,生成的詳細(xì)答案可能是:“微軟在人工智能領(lǐng)域進(jìn)行了大量投資揍鸟,包括開(kāi)發(fā)AI驅(qū)動(dòng)的產(chǎn)品(如Azure AI)兄裂、與研究機(jī)構(gòu)的合作(如OpenAI)以及對(duì)初創(chuàng)公司的收購(gòu)(如Nuance Communications)⊙粼澹”