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