好的,这是对您提供的文章的分析和总结:
关键字:
- 知识图谱 (Knowledge Graphs)
- 大型语言模型 (LLMs)
- LangChain
- LLM Graph Transformer
- 信息提取 (Information Extraction)
概述:
本文深入探讨了如何使用 LangChain 的 LLM Graph Transformer 从非结构化文本中构建知识图谱。文章详细介绍了 LLM Graph Transformer 的两种主要模式:工具模式和提示模式,并解释了如何通过定义图谱模式(包括节点类型、关系类型和属性)来提高信息提取的准确性和一致性。此外,文章还讨论了如何将提取的图谱数据导入 Neo4j 等图数据库,并提供了多种导入选项以满足不同的应用场景。文章强调了知识图谱在增强检索增强生成(RAG)应用中的重要性,并展示了如何利用结构化数据来回答复杂的多跳问题。
分节阅读:
- Setting up Neo4j environment:
- 文章介绍了使用 Neo4j 作为底层图存储的方法,并提供了两种选择:使用 Neo4j Aura 的免费云实例或下载 Neo4j Desktop 设置本地实例。
- 文章提供了使用
langchain_community.graphs
模块连接 Neo4j 数据库的代码示例。 - 文章强调了 Neo4j 提供的开箱即用的图可视化功能。
- LLM Graph Transformer:
- LLM Graph Transformer 旨在为使用任何 LLM 构建图谱提供灵活的框架,并利用 LangChain 来处理标准化过程。
- 该 Transformer 有两种独立的操作模式:工具模式和提示模式,以适应不同的 LLM 能力。
- 工具模式利用 LLM 的结构化输出或函数调用,而提示模式则使用少样本提示来定义输出格式。
- Tool-based extraction:
- 工具模式通过定义 Pydantic 对象(如 Node 和 Relationship 类)来结构化输出,从而减少了提示工程和自定义解析函数的需求。
- 文章详细介绍了 Node 和 Relationship 类的结构,包括 id、label、properties 等属性,并强调了使用人类可读的唯一标识符作为 id 的重要性。
- 文章还介绍了如何使用 Property 类定义节点和关系的属性,并指出当前实现的一些限制,如无法为每个属性提供唯一描述。
- Prompt-based extraction:
- 提示模式作为工具模式的后备方案,适用于不支持工具或函数调用的 LLM,也可以通过设置
ignore_tool_usage
属性强制使用。 - 文章概述了提示模式的系统提示,该提示要求 LLM 以 JSON 格式提取实体和关系,并强调了实体一致性的重要性。
- 文章还提供了少样本示例,并指出当前不支持添加自定义少样本示例或额外指令。
- 提示模式作为工具模式的后备方案,适用于不支持工具或函数调用的 LLM,也可以通过设置
- Defining the graph schema:
- 文章强调了定义图谱模式对于指导 LLM 构建有意义的结构化知识表示的重要性,并使用 Marie Curie 的维基百科页面作为测试示例。
- 文章展示了在不定义任何图谱模式的情况下,LLM 的输出可能存在差异,并强调了定义模式的必要性。
- 文章还介绍了如何使用
allowed_nodes
参数定义允许提取的节点类型,以及如何使用allowed_relationships
参数定义允许提取的关系类型。
- Defining allowed nodes:
- 文章介绍了如何使用
allowed_nodes
参数来约束提取的节点类型,从而提高节点提取的一致性。 - 文章通过示例展示了定义节点类型后,节点提取的一致性有所提高,但仍可能存在一些变化。
- 文章指出,由于没有定义关系,关系类型在不同运行中仍然可能存在差异。
- 文章介绍了如何使用
- Defining allowed relationships:
- 文章介绍了如何使用
allowed_relationships
参数来定义允许的关系类型,从而进一步提高提取的一致性。 - 文章通过示例展示了定义节点和关系类型后,输出的一致性显著提高,但由于关系是作为通用列表指定的,仍然存在一些变化。
- 文章还介绍了使用三元组格式定义关系的方法,该方法可以指定关系连接的节点类型,并强制执行关系方向。
- 文章介绍了如何使用
- Defining properties:
- 文章介绍了如何为节点和关系定义属性,并提供了两种选择:允许 LLM 自主决定提取哪些属性,或定义要提取的特定属性。
- 文章通过示例展示了 LLM 如何提取节点和关系的属性,并指出当前实现的一些限制,如属性只能使用工具模式提取,所有属性都作为字符串提取,以及属性只能全局定义等。
- Strict mode:
- 文章介绍了
strict_mode
参数,该参数用于删除任何不符合定义的图谱模式的信息,从而确保更干净、更一致的结果。 - 文章指出,默认情况下
strict_mode
设置为True
,但可以通过将其设置为False
来禁用。 - 文章强调,禁用
strict_mode
后,可能会得到超出定义的图谱模式的节点或关系类型。
- 文章介绍了
- Importing graph documents into graph database:
- 文章介绍了如何使用
add_graph_documents
方法将提取的图谱文档导入到 Neo4j 等图数据库中。 - 文章提供了三种导入选项:默认导入、使用
baseEntityLabel
参数添加辅助标签,以及使用include_source
参数导入源文档。 - 文章强调了使用
baseEntityLabel
参数可以利用索引优化数据导入和检索,以及使用include_source
参数可以构建利用结构化和非结构化搜索方法的检索器。
- 文章介绍了如何使用
相关工具:
- Neo4j Aura: https://neo4j.com/cloud/platform/aura-graph-database/
- Neo4j Desktop: https://neo4j.com/download/
- LLM Graph Builder: https://llm-graph-builder.neo4jlabs.com/
参考文献:
- Knowledge Graphs, LLMs & Multi-Hop Question Answering
- Limitations of Text Embeddings in RAG Applications
- Constructing Knowledge Graphs from Text Using OpenAI Functions
- LLM Graph Transformer
- Detailed system prompt
- Whole prompt
- Marie Curie’s Wikipedia page
- Enhancing the Accuracy of RAG Applications With Knowledge Graphs
原文链接:
https://towardsdatascience.com/building-knowledge-graphs-with-llm-graph-transformer-a91045c49b59
source: https://towardsdatascience.com/building-knowledge-graphs-with-llm-graph-transformer-a91045c49b59