知识图谱
基本概念
知识图谱构建三要素:实体、关系与属性技术与实战全解析_知识图谱三要素-CSDN博客
如果两个节点之间存在关系,他们就会被一条无向边连接在一起,那么这个节点,我们就称为实体(Entity),它们之间的这条边,我们就称为关系(Relationship)。
步骤
1.数据源选择
2.数据清洗
3.实体识别(算法)
实体边界识别和实体类别分类
知识图谱构建技术
原始数据
结构化数据
定义: 结构化数据是指严格遵循数据模型、易于搜索和组织的数据,通常存储在关系数据库中。
特点:
明确的数据模型和结构,如表格格式。
易于进行标准查询和分析。
数据通常是高度组织和格式化的。
例子:
关系数据库中的数据表。
Excel电子表格。
SQL数据库中的数据。
半结构化数据
定义: 半结构化数据不遵循严格的数据模型,但仍具有一定的组织结构,使其便于处理。
特点:
数据不符合严格的数据模型,但包含标签或其他标记来分隔数据元素。
数据结构灵活,可以存储复杂的数据。
介于结构化数据和非结构化数据之间。
例子:
JSON和XML文件。
JSON 和 XML的定义、优缺点、区别、比较_json xml-CSDN博客
JSON:JSON使用键-值对来存储数据,数据结构更加紧凑
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
XML标记化的结构通过嵌套的标签形式展示数据:
<person>
<name>John Doe</name>
<age>30</age>
<email>john.doe@example.com</email>
</person>
邮件和HTML文档。
日志文件。
非结构化数据
定义: 非结构化数据没有预定义的数据模型,通常是文本或多媒体内容。
特点:
没有固定的格式或结构。
难以用传统的数据库和数据分析工具处理。
通常需要高级处理方法,如自然语言处理或图像分析。
例子:
社交媒体帖子。
视频和音频文件。
文档和PDF文件。
实体对齐:什么是实体对齐、实体消歧、属性对齐?_实体对齐和实体消歧-CSDN博客
传统RAG的步骤
传统RAG方法主要遵循以下三个步骤:
- 索引(Indexing):
- 将文档分割成多个数据块(chunk),通常根据文本长度或特定规则进行分割。
- 将每个数据块编码成向量,通常使用嵌入模型(如Word2Vec、BERT等)来实现。
- 将编码后的向量和对应的文本块存储在向量数据库中,以便后续快速检索。
- 检索(Retrieval):
- 当用户提出查询时,使用与索引相同的嵌入模型将查询语句转换为向量表示。
- 在向量数据库中计算查询向量与存储的向量之间的相似度,找出最相似的前K个数据块。
- 生成(Generation):
- 将原始查询和检索到的数据块合并为一个新的提示信息。
- 使用大型语言模型(LLM)根据这个提示信息生成最终的回答。
GraphRAG的步骤
GraphRAG在传统RAG的基础上引入了图索引和社区检测等新技术,其步骤包括:
- 文本提取和分块:
- 与传统RAG类似,将源文档分割成较小的文本块。但GraphRAG可能更注重块之间的重叠和语义完整性。
- 元素实例化:
- 使用LLM(如GPT-4)提取文本块中的实体及其关系,生成描述性的实体和关系数据。
- 这一步是GraphRAG特有的,它构建了文本块之间的图结构,为后续的图索引和社区检测打下基础。
- 元素摘要:
- 将相同实体的描述汇总成单个摘要,以减少冗余和提高检索效率。
- 社区检测:
- 使用聚类算法(如Leiden算法)将图分割成多个社区,每个社区代表一组相关的实体和关系。
- 社区摘要:
- 对每个社区生成报告式的摘要,这些摘要包含了社区内实体的关键信息和它们之间的关系。
- 查询处理:
- 当用户提出查询时,GraphRAG首先识别查询中涉及的实体和关系。
- 然后,在知识图谱中检索与这些实体和关系最相关的社区和摘要。
- 最后,使用LLM根据检索到的社区摘要生成回答。
GraphRag
原理
基于图结构的知识图谱增强生成(Graph RAG)方法
聚焦问题:传统的RAG方法适用于局部文本检索任务,但不适用于全局性的查询聚焦摘要任务。
步骤:
源文档到文本块:将源文档分割成文本块
文本块到元素实例:识别并提取每个文本块中的图节点和边、协变量
使用一个多部分的LLM提示来首先识别文本中的所有实体,包括它们的名称、类型和描述,然后识别所有明确相关实体之间的关系,包括源实体和目标实体以及它们关系的描述。为了更好地表示这些实例(节点和边),可能会使用嵌入模型来生成它们的向量表示。这些嵌入可以是文本嵌入(如BERT生成的词嵌入),也可以是图嵌入(如果节点和边已经被表示为图结构)。
元素实例到元素摘要:使用LLM将实例级摘要转换为每个图元素的描述性文本块。要将所有这些实例级摘要转换为每个图元素(即实体节点、关系边和声明协变量)的单一描述性文本块,需要进一步通过匹配实例组进行LLM摘要。
元素摘要到图社区:使用社区检测算法将图划分为模块化社区
NLP--社区检测算法(Community Detection)总结【原理】-CSDN博客
社区检测(community detection)又被称为是社区发现,它是用来揭示网络聚集行为的一种技术。社区检测实际就是一种网络聚类的方法,这里的“社区”,我们可以将其理解为一类具有相同特性的节点的集合。
图社区到社区摘要:为Leiden层次结构中的每个社区创建报告式摘要
查询
04-graphrag的查询流程原理介绍_哔哩哔哩_bilibili
局部查询
local模式查询的主要方法是结合相关的知识图谱结构化信息与原始文档的非结构化数据,构建用于增强生成的上下文,直接根据上下文给出回复,并借助LLM获得响应。 因此非常适合回答关于特定事实的问题(比如某个实体的信息与关系等)。大致过程如下:
1.在进行查询时,首先根据输入的查询问题与对话历史,从知识图谱中识别出最相关的实体。这一步主要借助实体节点的描述信息(description)的嵌入向量来实现。
2.从这些实体开始,提取更多的相关信息。包括:
- 关联的原始文本块。提取其文本内容
- 关联的社区。提取其社区报告
- 关联的实体。提取其实体描述信息
- 关联的关系。提取其关系描述信息
- 关联的协变量。由于默认不生成,这里忽略
并对这些提取的信息进行排序与筛选,最终形成参考的上下文。
借助LLM与提示模板,输入上下文与原始问题,生成最终响应。
全局查询方法通过以 map-reduce 方式搜索所有 AI 生成的社区报告来生成答案
用使用节点处理后的社区报告和实体生成上下文,然后在每一个chunk内根据query来然后对每个批次的数据进行大型语言模型(LLM)的调用,以生成针对该批次数据的答案。
# Step 1: Generate answers for each batch of community short summaries
#并行地对社区简短摘要进行大型语言模型(LLM)调用以生成每个批次的答案
# Step 2: Combine the intermediate answers from step 2 to generate the final answer
#将步骤1中生成的答案合并以生成最终答案