使用 Neo4j 和 Langchain 进行知识图谱创建:详细指南

使用 Neo4j 和 Langchain 进行知识图谱创建:详细指南

知识图谱在人工智能和数据管理中的力量和潜力

知识图谱是组织和整合信息的强大工具。它们提供了一种以实体为节点、以关系为边的结构化表示知识的方式。这种结构化表示允许进行高效的查询、分析和推理,使知识图谱在各种应用中非常有价值,从搜索引擎和推荐系统到自然语言处理和人工智能。

在人工智能领域,例如,知识图谱可以通过提供额外的上下文信息来增强机器学习模型的性能。它们可以帮助改善对自然语言的理解,通过映射不同单词或短语之间的关系。此外,它们可以通过提供丰富的结构化信息源来帮助创建更具交互性和智能的人工智能系统。

以电影数据库为例。在知识图谱中,每部电影都将是一个节点。电影的属性,如标题、上映日期和导演,将是节点的属性。其他实体,如演员,也将是节点,并且它们与电影的连接将表示为边。例如,一条边可以将一个演员节点与一个电影节点连接起来,并标有演员在电影中扮演的角色。这种结构允许高效地回答复杂的查询,例如“找出所有在[年份]发布的电影,其中包含演员X”,还允许深入的分析,例如识别演员职业生涯中的模式或了解电影类型随时间的变化趋势。因此,知识图谱不仅组织数据,还揭示了关系和见解,这些见解很难通过传统的数据分析方法发现。

然而,构建和维护知识图谱并不是一项琐碎的任务。它涉及从各种来源提取信息,确保这些信息的准确性,并在新信息可用时更新图谱。尽管存在这些挑战,但知识图谱所提供的潜在好处使它们成为活跃研究和开发的领域。

使用 Neo4j 创建和实施知识图谱

创建知识图谱遵循一个结构化的过程,从建立最小可行图(MVG)开始,然后逐步扩展。让我们以从 Form 10-K 报告中提取信息的示例来看看这个过程是如何展开的:

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

    1. 提取:最初,从 Form 10-K 报告中提取相关信息,这是上市公司向证券交易委员会(SEC)提交的一份全面年度报告。这些数据被解析并结构化为可管理的块,这些块作为知识图谱中的节点。

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

    1. 增强:在提取后,数据经过增强以丰富其价值。为每个块添加嵌入,为信息提供额外的上下文和深度。这一步对于使图形更加健壮并能够产生更丰富的见解至关重要。

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

    1. 扩展:一旦数据得到增强,图就准备好扩展了。这涉及将节点连接到彼此,以扩展图内的上下文和关系。通过在 Form 10-K 报告中建立信息片段之间的关系,图变得更加复杂,并更好地表示数据的相互关系。

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

    1. 迭代细化:提取、增强和扩展的过程可以根据需要重复进行,纳入额外的 Form 10-K 报告、外部数据源和用户反馈,持续细化和改进图的相关性和准确性。这种迭代方法确保了知识图谱随着时间的推移而发展,以纳入新信息并满足不断变化的分析需求。

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’

    1. 视觉分析:在最后阶段,可以向图添加地址节点,实现对 Form 10-K 报告的空间关系进行视觉分析和探索。这允许回答更多问题,例如识别彼此相邻的公司或分析投资公司相对于它们投资的公司的地理分布。由此产生的知

识图谱为公司披露和财务报告的各个方面提供了宝贵的见解。

通过遵循这种结构化方法,并从 Form 10-K 报告中纳入相关数据,创建一个全面且动态的知识图谱是可行的。这样的图谱不仅有助于深入了解公司披露,还能在各个领域支持知情决策。

使用 Neo4j 和 Langchain 从《吠陀·歌》评论 PDF 中创建基本知识图谱

让我们详细说明如何使用《吠陀·歌》数字副本,这是一部著名的精神文本,创建一个基本的知识图谱。这部文本是由斯里·斯瓦米·西瓦南达编写的,充满了丰富的信息,我们可以利用知识图谱进行组织。我们将使用 Neo4j,它帮助我们管理和结构化我们的图形,以及 Langchain,它帮助我们处理文本。

首先,使用 Neo4j 创建一个免费帐户。对于本例,我们将使用免费层,允许创建一个实例。

凭证文件将包含以下细节,您将需要在随后的代码中使用这些细节:

# 在使用这些详细信息进行连接之前等待 60 秒,或登录 https://console.neo4j.io 验证 Aura 实例是否可用   NEO4J_URI=值   NEO4J_USERNAME=neo4j   NEO4J_PASSWORD=值   AURA_INSTANCEID=值   AURA_INSTANCENAME=Instance01

现在让我们创建知识图谱。

    1. 安装库
from dotenv import load_dotenv   import os      # 常见的数据处理   import textwrap      # Langchain   from langchain_community.graphs import Neo4jGraph   from langchain_community.vectorstores import Neo4jVector   from langchain.text_splitter import RecursiveCharacterTextSplitter   from langchain.chains import RetrievalQAWithSourcesChain   from langchain.llms import OpenAI   from langchain.embeddings import OpenAIEmbeddings   from langchain.document_loaders import PyPDFLoader
  1. 1. _从 PDF 中提取文本_:第一步是加载 PDF 文件并将其页面拆分为可管理的文本块。我们利用 langchain 库中的 PyPDFLoader 模块来完成这项任务。
# 加载 PDF 文件   loader = PyPDFLoader("您的/pdf/文件路径.pdf")   pages = loader.load_and_split()
  1. 1. _将文本拆分为块_:接下来,我们将提取的文本拆分为更小的块,以便进一步处理。我们使用 langchain 中的 RecursiveCharacterTextSplitter 类来实现此目的。
# 将页面拆分为块   text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)   chunks = text_splitter.split_documents(pages)
  1. 1. _创建向量存储,生成嵌入并存储在 Neo4j 中_:我们创建一个 Neo4jVector 对象,将文本块的嵌入存储在 Neo4j 图数据库中。这使我们能够以后有效地检索和操作嵌入。
# 警告控制   import warnings   warnings.filterwarnings("ignore")      # 从凭证文件中加载环境变量   load_dotenv('.env', override=True)   NEO4J_URI = os.getenv('NEO4J_URI')       NEO4J_USERNAME = os.getenv('NEO4J_USERNAME')      NEO4J_PASSWORD = os.getenv('NEO4J_PASSWORD')      NEO4J_DATABASE = os.getenv('NEO4J_DATABASE') or 'neo4j'   NEO4J_DATABASE = 'neo4j'   # 全局常量   VECTOR_INDEX_NAME = 'pdf_chunks'   VECTOR_NODE_LABEL = 'Chunk'   VECTOR_SOURCE_PROPERTY = 'text'   VECTOR_EMBEDDING_PROPERTY = 'textEmbedding'      kg = Neo4jGraph(       url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD, database=NEO4J_DATABASE   )
# 创建 Neo4j 向量存储   neo4j_vector_store = Neo4jVector.from_documents(       embedding=OpenAIEmbeddings(),       documents=chunks,       url=NEO4J_URI,       username=NEO4J_USERNAME,       password=NEO4J_PASSWORD,       index_name=VECTOR_INDEX_NAME,       text_node_property=VECTOR_SOURCE_PROPERTY,       embedding_node_property=VECTOR_EMBEDDING_PROPERTY,   )
  1. 1. _构建关系_:我们在图中建立文本块之间的关系,指示它们的顺序和与父 PDF 文档的关联。
# 创建一个 PDF 节点   cypher = """   MERGE (p:PDF {name: $pdfName})   RETURN p   """   kg.query(cypher, params={'pdfName': "您的/pdf/文件路径.pdf"})      # 使用 PART_OF 关系将块连接到其父 PDF   cypher = """   MATCH (c:Chunk), (p:PDF)   WHERE p.name = $pdfName   MERGE (c)-[newRelationship:PART_OF]->(p)   RETURN count(newRelationship)   """   kg.query(cypher, params={'pdfName': "您的/pdf/文件路径.pdf"})      # 在后续块之间创建 NEXT 关系   cypher = """   MATCH (c1:Chunk), (c2:Chunk)   WHERE c1.chunkSeqId = c2.chunkSeqId - 1   MERGE (c1)-[r:NEXT]->(c2)   RETURN count(r)   """   kg.query(cypher)
  1. 1. _问答_:最后,我们可以利用构建的知识图谱执行问答任务。我们从向量存储创建一个检索器,并从 PDF 文档的内容基于问题回答链创建一个聊天问答链。
# 从向量存储创建一个检      索器   retriever = neo4j_vector_store.as_retriever()      # 从检索器创建一个聊天问答链   chain = RetrievalQAWithSourcesChain.from_chain_type(       OpenAI(temperature=0),        chain_type="stuff",       retriever=retriever   )      # 提出一个问题   question = "这份 PDF 文档的主题是什么?"   answer = chain(       {"question": question},       return_only_outputs=True,   )   print(textwrap.fill(answer["answer"]))

以下是检查 Neo4j 中数据的一些查询

节点计数

# 返回节点计数   kg.query("""            MATCH (n)            RETURN count(n) as nodeCount            """)

打印模式

kg.refresh_schema()   print(kg.schema)

显示索引

kg.query("SHOW INDEXES")

样本输出

Neo4j 仪表板

作者在 neo4j 上的仪表板

Q&A 输出

作者的笔记本

作者的笔记本

使用知识图谱以及像 Neo4j 和 Langchain 这样的工具,我们可以将复杂的、非结构化的文本转换为易于分析的结构化、相互连接的数据。这个过程可以应用于各种类型的信息,从财务报告到精神文本。这个示例是创建知识图谱的基本说明。随着我们继续探索和发展这项技术,我们可以发现理解和解释数据的新方法。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

  • 27
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值