1.大模型与知识图谱
当下,国内外大模型落地时面临的主要问题之一是幻觉,幻觉是指大模型提供的一些不切实际或不准确的信息。解决幻觉的策略:策略一: 技术突破,提升大模型的能力。 策略二: 通过设定边界来限制大模型的输出,防止其产生不切实际的言论。知识图谱可以通过策略二改善大模型的幻觉问题。
知识图谱是一种存储信息的方式,采用实体和关系的方法来组织数据。
实体: 可以是人、地名、公司名等现实生活中的物体。 关系: 实体之间的潜在联系,如朋友关系、工作关系等。
图谱数据来源: 权威网站、 内部员工编写的文档、企业数据库等。
知识图谱的优势:直观性: 通过图谱可以直观地看到实体之间的关系。信息提取: 便于从文档中提取关键实体和关系,抓住文档的核心思想。
1.知识图谱+RAG+大模型
为什么要将知识图谱融入RAG流程?
在经典的RAG流程中,对于给定的问题,我们通常会在向量数据库中搜索与之相关的chunks信息,并将这些chunks信息放入prompt中,以便进行大模型的调用。然而,这种方法可能会出现一些问题:
1.如果用户问的问题没有明确的关键词,向量数据库可能无法找到匹配的chunks。
2.简单的关键词匹配无法抓住概念之间的相关性。
知识图谱可以帮助解决这些问题,因为它不仅包含了实体(如药物、疾病等)之间的关系,还提供了更多的语义信息。
举例说明知识图谱在RAG流程中的作用
假设用户问了一个问题:“感冒常见药物有哪些副作用?” 我们希望通过向量数据库来寻找相关信息。但是,如果问题没有出现“感冒”这个词,那么可能无法匹配到正确的chunks。如果我们的向量数据库中存在一段关于“感冒冲剂”的描述,我们希望能够搜索到这一段,即使问题里没有明确提及“感冒冲剂”。
在这里,知识图谱可以帮助我们,假如我们提前知道“感冒”与“感冒冲剂”的关系,便可以通过知识图谱将用户的问题延伸到相关的领域,找到所需的信息。
如何将知识图谱融入RAG流程
-
定义知识图谱:知识图谱由一系列实体和关系构成。例如:“药物1”和“药物2”可以治疗“感冒”,“感冒”有一些常见症状等等。
-
扩展问题:在收到用户问题后,首先利用知识图谱对问题进行扩展。例如,如果用户问到“感冒常见药物有哪些副作用?”,可以通过知识图谱找到“感冒”相关的药物,如“药物1”和“药物2”,从而扩展问题为“感冒常见的药物(药物1、药物2)有哪些副作用?”
-
检索子图:1.使用知识图谱检索关键实体相关的子图。例如,针对此问题,可以找到“感冒”、“药物1”、“药物2”等节点组成的子图。2.提取相关的三元组,这些三元组可以转换为自然语言文本,以便进一步处理。
-
合并信息:将提取出的三元组转换为文本形式,并合并成完整的上下文。这需要注意去除重复信息并保持连贯性。
-
处理和优化:1.考虑如何更好地抽取子图,如利用二度(k-hop)抽取方法。 2.优化结构信息与文本信息的融合,确保大模型能够理解并利用这些信息。
-
向量数据库检索优化:将知识图谱得到的信息再次进行向量数据库的检索,进一步丰富信息。
落地中的挑战
尽管这一流程在理论上非常有效,但在实践中还面临一些挑战:
-
构建和维护知识图谱的复杂性:知识图谱的构建和维护是一个耗时且复杂的过程。虽然可以利用大模型进行自动化图谱生成,但质量仍需人工审查。
-
信息冗余与过滤:合并信息时可能出现重复,需要有效的去重机制。
-
有效的子图抽取:抽取子图时,需要找到一个合适的平衡点,既能覆盖足够的信息,又不会造成冗余。
-
大模型对结构信息的理解:对大模型进行调优,使其更好地理解并利用结构化的信息。