打開(kāi)網(wǎng)易新聞 查看精彩圖片

作者 | Zilliz

前 言

隨著大型語(yǔ)言模型(LLMs)在各種應(yīng)用中的廣泛使用,如何提升其回答的準(zhǔn)確性和相關(guān)性成為一個(gè)關(guān)鍵問(wèn)題。檢索增強(qiáng)生成(RAG)技術(shù)通過(guò)整合外部知識(shí)庫(kù),為 LLMs 提供了額外的背景信息,有效地改善了模型的幻覺(jué)、領(lǐng)域知識(shí)不足等問(wèn)題。然而,僅依靠簡(jiǎn)單的 RAG 范式存在一定的局限性,尤其在處理復(fù)雜的實(shí)體關(guān)系和多跳問(wèn)題時(shí),模型往往難以提供準(zhǔn)確的回答。

將知識(shí)圖譜(KG)引入 RAG 系統(tǒng)為解決這一問(wèn)題提供了新的路徑。知識(shí)圖譜通過(guò)結(jié)構(gòu)化的方式呈現(xiàn)實(shí)體及其關(guān)系,能夠在檢索過(guò)程中提供更為精細(xì)的上下文信息。通過(guò)利用 KG 的豐富關(guān)系性數(shù)據(jù),RAG 不僅能夠更精準(zhǔn)地定位相關(guān)知識(shí),還能更好地處理復(fù)雜的問(wèn)答場(chǎng)景,如對(duì)比實(shí)體間的關(guān)系或回答多跳問(wèn)題。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

Comparision between Direct LLM, RAG, and GraphRAG.https://arxiv.org/pdf/2408.08921

然而,當(dāng)前的 KG-RAG 還處在早期的探索階段,行業(yè)對(duì)相關(guān)技術(shù)路線還未達(dá)成統(tǒng)一共識(shí)。比如,如何有效檢索知識(shí)圖譜中的相關(guān) entities 和 relationships,如何將向量相似性搜索和圖結(jié)構(gòu)結(jié)合起來(lái),目前沒(méi)有形成統(tǒng)一的范式。

比如,微軟的 From Local to Global 使用大量的 LLM 訪問(wèn)將子圖結(jié)構(gòu)以匯總成社區(qū)摘要,但這一過(guò)程消耗大量的 LLM tokens,使這一方法昂貴且不切實(shí)際。HippoRAG 使用 Personalized PageRank 重新更新圖節(jié)點(diǎn)的權(quán)重,以找到重要的 entities,但這種以 entity 為中心的方法很容易受到 NER 遺漏的影響,而忽略了上下文中的其它信息。IRCoT 使用多步 LLM 請(qǐng)求來(lái)逐步推理得到最終的回答,但這種方法將 LLM 引入多跳查找過(guò)程,導(dǎo)致回答問(wèn)題的時(shí)間過(guò)長(zhǎng),很難實(shí)際應(yīng)用。

我們發(fā)現(xiàn),實(shí)際上用一個(gè)簡(jiǎn)單的多路召回然后 rerank 的 RAG 范式,就能夠很好的處理復(fù)雜的多跳 KG-RAG 場(chǎng)景,而并不需要過(guò)多的 LLM 開(kāi)銷(xiāo)和任何圖算法。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

Our simple pipeline is not much different from the common multi-way retrieval and rerank architecture, but it can achieve the SoTA performance in the multihop graph RAG scenario.

盡管使用很簡(jiǎn)單的架構(gòu),但我們的方法顯著超過(guò)目前 state-of-the-art 的解決方案,比如 HippoRAG,并且僅僅需要用到向量存儲(chǔ)和少量的 LLM 開(kāi)銷(xiāo)。我們首先引入我們方法的理論基礎(chǔ),然后介紹具體方法過(guò)程。

理 論

我們觀察到在實(shí)際的 KG-RAG 場(chǎng)景中,存在跳數(shù)有限性假設(shè):在 KG-based RAG 中,實(shí)際問(wèn)的 query 問(wèn)題的查詢(xún)路由只需要在知識(shí)圖譜中進(jìn)行有限的,且很少的跳數(shù)(如少于 4 跳)的查詢(xún),而并不需要在其中進(jìn)行非常多次跳數(shù)。

我們的跳數(shù)有限性假設(shè)基于兩點(diǎn)很重要的觀察:1. query 復(fù)雜度有限性, 2.“捷徑”的局部 dense 結(jié)構(gòu)。

query 復(fù)雜度有限性

用戶(hù)的一個(gè)提問(wèn) query,不太可能涉及到非常多的 entities,或者引入復(fù)雜的 relationships。否則這個(gè)問(wèn)題會(huì)顯得非常奇怪和不切實(shí)際。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

Normal query vs. Weird query

y

正常的query:"愛(ài)因斯坦獲得諾貝爾獎(jiǎng)的時(shí)間是哪一年?" In which year did Einstein win the Nobel Prize? 知識(shí)圖譜中的查詢(xún)路徑: 找到節(jié)點(diǎn)“愛(ài)因斯坦”。 跳轉(zhuǎn)到與“愛(ài)因斯坦”相關(guān)的“諾貝爾獎(jiǎng)”節(jié)點(diǎn)。 返回獎(jiǎng)項(xiàng)頒發(fā)的年份信息。 跳數(shù):2 跳 說(shuō)明:這是一個(gè)常見(jiàn)的用戶(hù)問(wèn)題,用戶(hù)想要知道的是與某個(gè)具體實(shí)體直接相關(guān)的單一事實(shí)。知識(shí)圖譜在這種情況下只需要進(jìn)行少量跳數(shù)的查詢(xún)即可完成任務(wù),因?yàn)樗邢嚓P(guān)信息都直接與愛(ài)因斯坦這個(gè)中心節(jié)點(diǎn)關(guān)聯(lián)。這種查詢(xún)?cè)趯?shí)際應(yīng)用中非常普遍,例如查詢(xún)名人背景信息、獎(jiǎng)項(xiàng)歷史、事件時(shí)間等。 古怪的query:"相對(duì)論的發(fā)現(xiàn)者獲得諾貝爾獎(jiǎng)的年份與他們?cè)谝粋€(gè)以銀行保密法和阿爾卑斯山壯麗風(fēng)景而聞名的國(guó)家發(fā)明的專(zhuān)利數(shù)量之間有什么關(guān)系?" What is the relationship between the year the discoverer of the theory of relativity received the Nobel Prize and the number of patents they invented in a country famous for its bank secrecy laws and the magnificent scenery of the Alps? 知識(shí)圖譜中的查詢(xún)路徑: 找到“相對(duì)論”的“發(fā)明者”是“愛(ài)因斯坦”。 跳轉(zhuǎn)到與“愛(ài)因斯坦”相關(guān)的“諾貝爾獎(jiǎng)”節(jié)點(diǎn)。 查找“諾貝爾獎(jiǎng)”獲獎(jiǎng)年份。 通過(guò)“銀行保密法和阿爾卑斯山”找到“瑞士” 跳轉(zhuǎn)到與“愛(ài)因斯坦”相關(guān)的“專(zhuān)利”節(jié)點(diǎn)。 查找與瑞士期間相關(guān)的專(zhuān)利信息。 比較專(zhuān)利數(shù)量和獲獎(jiǎng)年份之間的關(guān)系。 跳數(shù):7跳 說(shuō)明:這個(gè)問(wèn)題較為復(fù)雜,要求不僅僅是查詢(xún)單一的事實(shí),還涉及多個(gè)節(jié)點(diǎn)之間的復(fù)雜關(guān)聯(lián)。這種問(wèn)題在實(shí)際場(chǎng)景中不太常見(jiàn),因?yàn)橛脩?hù)一般不傾向于在一次查詢(xún)中尋求如此復(fù)雜的信息交叉。通常,這類(lèi)問(wèn)題會(huì)被分解為多個(gè)簡(jiǎn)單查詢(xún),以便逐步獲取信息。

“捷徑”的局部 dense 結(jié)構(gòu)

知識(shí)圖譜中是一個(gè)存在一些局部 dense 結(jié)構(gòu),對(duì)于有些 query,有一些“捷徑”,可以從一個(gè) entity 通過(guò)捷徑快速連接到多跳之外的 entity。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

"Shortcuts" structure

假設(shè)我們有一個(gè)家庭關(guān)系的知識(shí)圖譜,包含以下實(shí)體和關(guān)系: Alex 是 Brian 的孩子 ( Alex - child_of - Brian ) Cole 嫁給了 Brian ( Cole - married_to - Brian ) Daniel 是 Cole 的哥哥 ( Daniel - brother_of - Cole ) Daniel 是 Alex 的舅舅 ( Daniel - uncle_of - Alex ) 這是一個(gè)包含冗余信息的密集型的知識(shí)圖譜。顯然,可以通過(guò)前三條 relationships 推導(dǎo)出最后一條 relationship。但知識(shí)圖譜中往往存在一些這種冗余信息的捷徑。這些捷徑可以減少一些 entities 之間的跳數(shù)。

基于這兩點(diǎn)觀察,我們發(fā)現(xiàn),有限次數(shù)的在知識(shí)圖譜內(nèi)的路由查找過(guò)程,只涉及到局部的知識(shí)圖譜信息。因此,將 query 進(jìn)行知識(shí)圖譜內(nèi)信息檢索的過(guò)程可以用下面這兩步來(lái)實(shí)現(xiàn):

  1. 路由的起點(diǎn),可以通過(guò)向量相似性查找來(lái)完成??梢陨婕暗?query 與 entities 或 query 與 relationships 的相似度關(guān)系查找。

  2. 從起點(diǎn)找到其它信息的路由過(guò)程,可以用一個(gè) LLM 來(lái)代替完成。將這些備選信息放進(jìn) prompt 里,依托 LLM 強(qiáng)大的自注意力機(jī)制來(lái)挑選有價(jià)值的路由。由于 prompt 長(zhǎng)度有限,所以只能將局部知識(shí)圖譜的信息放入,比如起點(diǎn)附近限定跳數(shù)內(nèi)的知識(shí)圖譜信息,這一點(diǎn)是正好可以由跳數(shù)有限性來(lái)保證。

整個(gè)過(guò)程不需要其任何它的 KG 存儲(chǔ)和復(fù)雜的 KG 查詢(xún)語(yǔ)句,只需要使用 vector database 和一次 LLM 的訪問(wèn)。而 vector retrieval + LLM rerank 才是這個(gè) pipeline 中最關(guān)鍵的部分,這也就解釋了我們只用一個(gè)傳統(tǒng)的兩路召回架構(gòu),就可以達(dá)到遠(yuǎn)超基于圖理論的方法(如 HippoRAG) 的表現(xiàn)。這也說(shuō)明了,實(shí)際上不需要復(fù)雜的圖算法,我們只需要將圖結(jié)構(gòu)的邏輯關(guān)系存儲(chǔ)在向量數(shù)據(jù)庫(kù)里,用一個(gè)傳統(tǒng)的架構(gòu)就可以進(jìn)行邏輯上的子圖路由,而現(xiàn)代 LLM 強(qiáng)大的能力幫助做到了這一點(diǎn)。

方法概覽

我們的方法只涉及在 RAG 流程中檢索 passages 的階段,不涉及 chunking 或 LLM response generation 的創(chuàng)新和優(yōu)化。我們假設(shè)已經(jīng)得到了一組 corpus 的三元組信息,它包含一系列的 entities 和 relationships 信息。這些信息可以表示一個(gè)知識(shí)圖譜的信息。

我們將 entities, relationships 信息分別進(jìn)行向量化,并存儲(chǔ)在向量存儲(chǔ)里,這樣存儲(chǔ)了一個(gè)邏輯上的知識(shí)圖譜。當(dāng)進(jìn)行 query 查詢(xún)時(shí),會(huì)先把相關(guān)的 entities 和 relationships 檢索出來(lái)。通過(guò)這些 entities 和 relationships,我們?cè)趫D結(jié)構(gòu)上進(jìn)行有限的拓展。將這些 relationships 與 query 問(wèn)題組裝進(jìn) prompt 內(nèi),使用 LLM 的能力對(duì)這些 relationships 進(jìn)行 reranking。最后得到 topK 個(gè)重要的 relationships,在他們的 metadata 信息內(nèi)獲得與他們相關(guān)的 passages,作為最終的 retrieved passages。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

Overall pipeline of our method

方法詳解

4.1. 向量入庫(kù)

我們準(zhǔn)備兩個(gè)向量存儲(chǔ) collections,一個(gè)是 entity collection,另一個(gè)是 relationship collection。將一系列的 unique entities 信息和 relationships 信息,使用 embedding 模型,轉(zhuǎn)換成向量,存儲(chǔ)在向量存儲(chǔ)中。對(duì)于 entities 信息,直接將他們的字符描述轉(zhuǎn)換成 embedding。對(duì)于 relationships 的原始數(shù)據(jù)形式,它的結(jié)構(gòu)是一個(gè)三元組:

(Subject, Predicate, Object)

我們啟發(fā)性地直接將它們合并成一個(gè)句子

"Subject Predicate Object"

比如:

(Alex, child of, Brian) -> "Alex child of Brian" (Cole, married to, Brian) -> "Cole married to Bria"

然后直接將這個(gè)句子轉(zhuǎn)換成 embedding,然后存儲(chǔ)在向量數(shù)據(jù)庫(kù)里。這種做法方便且直接,雖然這樣做可能存在少量的語(yǔ)法問(wèn)題,但這不影響句子含義的表達(dá),也不影響它在向量空間中的分布。當(dāng)然,我們同樣也鼓勵(lì)在前期抽取三元組的時(shí)候,直接使用 LLM 生成簡(jiǎn)短的句子描述。

4.2. 向量相似搜索

  • 對(duì)于輸入的 Query,我們遵循常見(jiàn)的 GraphRAG 中的范式(如 HippoRAG,MS GraphRAG),將 query 提取 entities,對(duì)于每個(gè) query entity,轉(zhuǎn)換成 embedding,分別對(duì) entity collection 進(jìn)行 vector similarity search。然后將所有 query entities 搜索得到的結(jié)果進(jìn)行合并。

  • 對(duì)于 relationship 的向量搜索,我們直接將 query string,轉(zhuǎn)換成 embedding,對(duì) relationship collection 進(jìn)行 vector similarity search。

4.3. 擴(kuò)展子圖

打開(kāi)網(wǎng)易新聞 查看精彩圖片

Expanding subgraph from two retrieved ways, then merged them together

我們以搜索到的 entities 和 relationships 為知識(shí)圖譜里的起始,往外擴(kuò)大一定的范圍。對(duì)于起始 entities,我們往外擴(kuò)大一定的跳數(shù)后,取它們鄰接的 relationships,記為

打開(kāi)網(wǎng)易新聞 查看精彩圖片

對(duì)于起始 relationships,我們往外擴(kuò)大一定跳數(shù),得到

打開(kāi)網(wǎng)易新聞 查看精彩圖片

我們將兩個(gè) set 取并集,

打開(kāi)網(wǎng)易新聞 查看精彩圖片

基于跳數(shù)有限性,我們僅需要擴(kuò)大較小的度數(shù)(如 1,2 等),就能涵蓋大部分可能有助回答的 relationships。請(qǐng)注意,這一步擴(kuò)展的度數(shù)的概念和回答問(wèn)題總共需要的跳度的概念不同。比如,如果回答一個(gè) query 問(wèn)題涉及兩個(gè)相差 n 跳的 entities,那么實(shí)際上往往只需要擴(kuò)展 ?n / 2? 度就可以,因?yàn)檫@兩個(gè) entities 是被向量相似召回后的兩個(gè)起始端點(diǎn)。如圖,向量召回到了兩個(gè)紅色的 entities,只需要從它們開(kāi)始,相向擴(kuò)展 2 度,就能覆蓋到 4 度的跳數(shù),這足以回答涉及到這兩個(gè) entities 的 4 跳問(wèn)題。

打開(kāi)網(wǎng)易新聞 查看精彩圖片

In fact, to answer the question with 4 degree hops, you only need to expand it by 2 degrees from both end points in the setting.

4.4. LLM Rerank

這一步中,我們使用 LLM 強(qiáng)大的自注意力機(jī)制,完成對(duì) relationships 候選集的進(jìn)一步篩選。我們使用 one-shot prompt,將 query 和 relationships 候選集放入 prompt 里,要求 LLM 從中選擇出可能對(duì)回答這個(gè) query 有幫助的 relationships。考慮到有些 query 可能存在一定的復(fù)雜性,我們采用 Chain-of-Thought 的思想,讓 LLM 的回答里寫(xiě)下思考過(guò)程,我們觀察到,這一方法對(duì)一些偏弱的模型有一些幫助。我們規(guī)定 LLM 的返回為 json 格式,以便于解析格式。具體的 prompt 參考如下:

One shot input prompt

I will provide you with a list of relationship descriptions. Your task is to select 3 relationships that may be useful to answer the given question. Please return a JSON object containing your thought process and a list of the selected relationships in order of their relevance.

**Question:**
When was the mother of the leader of the Third Crusade born?

**Relationship descriptions:**
[1] Eleanor was born in 1122.
[2] Eleanor married King Louis VII of France.
[3] Eleanor was the Duchess of Aquitaine.
[4] Eleanor participated in the Second Crusade.
[5] Eleanor had eight children.
[6] Eleanor was married to Henry II of England.
[7] Eleanor was the mother of Richard the Lionheart.
[8] Richard the Lionheart was the King of England.
[9] Henry II was the father of Richard the Lionheart.
[10] Henry II was the King of England.
[11] Richard the Lionheart led the Third Crusade.
One shot input prompt

{
"thought_process": "To answer the question about the birth of the mother of the leader of the Third Crusade, I first need to identify who led the Third Crusade and then determine who his mother was. After identifying his mother, I can look for the relationship that mentions her birth.",
"useful_relationships": [
"[11] Richard the Lionheart led the Third Crusade",
"[7] Eleanor was the mother of Richard the Lionheart",
"[1] Eleanor was born in 1122"
]
}

這個(gè) prompt 是一個(gè)展示的參考,實(shí)際上,如何把 relationships 中的三元組轉(zhuǎn)成一個(gè)通順的短句,是一個(gè)棘手的問(wèn)題。但是,你完全可以用上文提到的啟發(fā)性的方法,把三元組直接拼在一起。如:

(Eleanor, born in, 1122) 可以直接轉(zhuǎn)成 Eleanor born in 1122

這種方式有時(shí)會(huì)帶來(lái)一定的語(yǔ)法問(wèn)題,但它是最快,最直接的方式,也不會(huì)對(duì) LLM 帶來(lái)誤解。

4.5. 獲得最終 passages

對(duì)于上面的例子,實(shí)際上可以在 LLM rerank 這個(gè)階段直接返回最終的回答,比如在 One shot output prompt 的 json 字段里加上比如 “final answer”的字段。但是,這一步的 prompt 里只有 relationship 的信息,不一定所有問(wèn)題都可以在這個(gè)階段返回最終答案,所以其它具體的信息應(yīng)該要在原始的 passsage 里獲得。

LLM 返回精確排序后的 relationships。我們只需要取出先前在存儲(chǔ)中的對(duì)應(yīng) relationship 信息,從中獲取相應(yīng)的 metadata,在那里有對(duì)應(yīng)的 passage ids。這些 passages 信息就是最終被 retrieved 到的 passages。后續(xù)生成回答的過(guò)程和 naive RAG 一樣,就是將它們放入 prompt 的 context 中,讓 LLM 給出最后的回答。

結(jié) 果

我們使用與 HippoRAG 中一致的 dense embedding,facebook/contriever,來(lái)作為我們的 embedding 模型,可以看到,在三個(gè) multi-hop 的數(shù)據(jù)集上結(jié)果比較上,我們的方法大幅超過(guò) naive RAG 和 HippoRAG 的結(jié)果。所有的方法使用相同的 embedding 模型設(shè)置。我們使用 Recall@2 作為我們的衡量指標(biāo),它表示,

Recall(召回率) = 檢索到的相關(guān)文檔總數(shù) / 數(shù)據(jù)存儲(chǔ)中相關(guān)文檔總數(shù)

打開(kāi)網(wǎng)易新聞 查看精彩圖片

On the multi-hop datasets, our method outperforms naive RAG and HippoRAG in all datasets, all of them are compared using the same facebook/contriever embedding model.

這一結(jié)果說(shuō)明了,即使是最簡(jiǎn)單的多路召回然后 rerank 的 RAG 范式,應(yīng)用在 graph RAG 的場(chǎng)景上,也能得到 state-of-the-art 的 performance。這一結(jié)果也說(shuō)明了,合理的向量召回和 LLM 設(shè)置,是應(yīng)用在 multi-hop QA 場(chǎng)景中的關(guān)鍵。

回顧我們的方法,把 entities 和 relationships 轉(zhuǎn)成向量,并進(jìn)行搜索的作用就是尋找子圖的起點(diǎn),它像是破解刑偵案件中的現(xiàn)場(chǎng)發(fā)現(xiàn)的“線索”。而后面擴(kuò)展子圖和 LLM rerank 的過(guò)程像是具體通過(guò)這些“線索”進(jìn)行分析的過(guò)程,LLM 擁有“上帝視角”,可以在一眾的候選 relationships 中,聰明地選擇對(duì)破案有用的 relationships。這兩個(gè)階段,回歸本質(zhì),也就是對(duì)應(yīng)樸素的 vector retrieval + LLM reranking 范式。

在實(shí)踐中,我們推薦大家使用開(kāi)源 Milvus,或它的全托管版本 Zilliz Cloud,來(lái)存儲(chǔ)并搜索 graph 結(jié)構(gòu)中大量的 entities 和 relationships。而 LLM 可以選擇開(kāi)源模型如 Llama-3.1-70B 或閉源的 GPT-4o mini,中等以上規(guī)模的模型都能勝任這些任務(wù)。你也可以參考我們的 notebook 代碼示例 https://milvus.io/docs/graph_rag_with_milvus.md,以獲得更多實(shí)現(xiàn)的細(xì)節(jié)。

作者介紹

張晨,Zilliz 算法工程師

會(huì)議推薦

12 月 13 日至 14 日(下周五至周六),AICon 全球人工智能開(kāi)發(fā)與應(yīng)用大會(huì)將在北京盛大開(kāi)幕!本次大會(huì)匯聚 70+ 位 AI 及技術(shù)領(lǐng)域的頂尖專(zhuān)家,深入探討大模型與推理、AI Agent、多模態(tài)、具身智能等前沿話(huà)題。此外還有豐富的圓桌論壇、以及展區(qū)活動(dòng),帶你深入探索大模型的最新實(shí)踐與未來(lái)趨勢(shì)。年度最后一次 AI 盛宴,讓我們一起見(jiàn)證 AI 未來(lái)。