從零實現(xiàn)大模型-GraphRAG,構(gòu)建LLM中的關(guān)系數(shù)據(jù)庫 原創(chuàng)
傳統(tǒng)RAG
LLM預(yù)訓(xùn)練和微調(diào)一般都是基于公開的互聯(lián)網(wǎng)數(shù)據(jù),不可能包含公司內(nèi)部私有數(shù)據(jù),如果你問有關(guān)某公司的運營情況,直接基于模型參數(shù)生成的回答可能和胡說八道沒什么兩樣。
RAG(Retrieval-Augmented Generation)的思想就是將私有數(shù)據(jù)作為參考信息傳遞給LLM。這些私有數(shù)據(jù)除了作為一種補充信息,也可以作為一種限制,能避免LLM產(chǎn)生幻覺。
參考信息一般以文本、圖片等非結(jié)構(gòu)化形式存在。
RAG的流程是:
1.首先要將文本劃分成片段,然后將片段轉(zhuǎn)換成向量存儲到向量數(shù)據(jù)庫中備用,這個向量就是這段文本語義信息的數(shù)字表示。
2.將用戶查詢轉(zhuǎn)換成向量。并與所有文本片段向量進行相似度計算,取出top k個片段。
3.將用戶查詢和k個文本片段組織成特定prompt格式輸入到LLM中。
(計算文本的向量可以調(diào)用API或者使用像llamaindex這樣的庫)
GraphRAG
但傳統(tǒng)的RAG仍有一些限制。
例如,基于某個公司的運營數(shù)據(jù)搭建RAG,由于LLM上下文大小的限制,劃分的文本片段不可能太大,所以每個文本片段不可能包含太多信息。
如果你問某個員工去年的銷售業(yè)績,基于RAG,LLM很可能會給出準確回答,因為某個文本片段很可能包含了某個員工的年終總結(jié)信息。
但如果你問該員工所在團隊去年的銷售情況呢?就算某個文本片段包含了該團隊的銷售數(shù)據(jù),LLM也很難通過該員工找到團隊的其它成員。
微軟最近提出的GraphRAG(Graph-based Retrieval Augmented Generation)就是解決這個問題。
GraphRAG就是將圖和傳統(tǒng)的RAG結(jié)合了起來。
構(gòu)造知識圖譜
圖是由節(jié)點和邊組成的,節(jié)點可以表示各種實體,邊表示實體之間的關(guān)系。
GraphRAG的核心就是構(gòu)造知識圖譜,可以通過GPT4或者使用像llamaindex(KnowledgeGraphIndex)這樣的庫構(gòu)造知識圖譜。
將公司運營文檔構(gòu)造成知識圖譜:
1.識別出文檔中包含的實體以及實體之間的關(guān)系(員工,同事)
2.將實體進行聚類(同組同事)
3.對每個聚類進行總結(jié)(銷售情況)
4.將實體進行向量化,轉(zhuǎn)換到圖向量空間
5.提取實體對應(yīng)的原始文本,并轉(zhuǎn)換成向量
Query
當用戶提問時,首先在知識圖譜中找到與用戶提問語義相關(guān)的實體,同時找到與實體相關(guān)的原始文本,最后將這些信息組織成特定prompt格式輸入給LLM。
References
[1] https://github.com/microsoft/graphrag
[2] https://microsoft.github.io/graphrag/
本文轉(zhuǎn)載自公眾號人工智能大講堂
原文鏈接:??https://mp.weixin.qq.com/s/q2BRAiivIFNXWyQIbwx18Q??
