传统RAG
LLM预训练和微调普通都是基于地下的互联网数据,无法能蕴含公司外部私有数据,假设你问无关某公司的经营状况,间接基于模型参数生成的回答或许和胡言乱语没什么两样。
RAG(Retrieval-Augmented Generation)的思维就是将私有数据作为参考消息传递给LLM。这些私有数据除了作为一种补充消息,也可以作为一种限度,能防止LLM发生幻觉。
参考消息普通以文本、图片等非结构化方式存在。
RAG的流程是:
1.首先要将文本划分红片段,而后将片段转换成向量存储到向量数据库中备用,这个向量就是这段文本语义消息的数字示意。
2.将用户查问转换成向量。并与一切文本片段向量启动相似度计算,取出top k个片段。
3.将用户查问和k个文本片段组织成特定prompt格局输入到LLM中。
(计算文本的向量可以调用API或许经常使用像llamaindex这样的库)
但传统的RAG仍有一些限度。
例如,基于某个公司的经营数据搭建RAG,由于LLM高低文大小的限度,划分的文本片段无法能太大,所以每个文本片段无法能蕴含太多消息。
假设你问某个员工去年的开售业绩,基于RAG,LLM很或许会给出准确回答,由于某个文本片段很或许蕴含了某个员工的消息。
但假设你问该员工所在团队去年的开售状况呢?就算某个文本片段蕴含了该团队的开售数据,LLM也很难经过该员工找到团队的其它成员。
微软最近提出的GraphRAG(Graph-based Retrieval Augmented Generation)就是处置这个疑问。
GraphRAG就是将图和传统的RAG联合了起来。
结构常识图谱
图是由节点和边组成的,节点可以示意各种实体,边示意实体之间的相关。
GraphRAG的**就是结构常识图谱,可以经过GPT4或许经常使用像llamaindex(KnowledgeGraphIndex)这样的库结构常识图谱。
将公司经营文档构形成常识图谱:
1.识别出文档中蕴含的实体以及实体之间的相关(员工,共事)
2.将实体启动聚类(同组共事)
3.对每个聚类启动总结(开售状况)
4.将实体启意向量化,转换到图向量空间
5.提取实体对应的原始文本,并转换成向量
当用户提问时,首先在常识图谱中找到与用户提问语义相关的实体,同时找到与实体相关的原始文本,最后将这些消息组织成特定prompt格局输入给LLM。
References
[1]
[2]
[3]
原文链接: