知识图谱已成为管理与分析复杂数据关系的强大工具。与传统的关系型数据库通过行和列在表格中存储数据不同,图数据库使用节点、边和属性来表示和存储数据,提供了一种更直观和高效的方式来构建、查看和查询复杂系统。本文将指导你了解、实现和利用知识图谱数据库。

理解知识图谱(关键概念)
节点:这些代表单个数据实体,如人、地点或物体。每个节点具有标识符、标签和若干属性。
边:这些代表节点之间的连接,显示它们之间的关系。每条边有一个起始节点、一个结束节点、一个类型和一些属性。
属性:与节点和边关联的属性或数据值。
为什么选择知识图谱数据库?
解决朴素RAG的问题 -> RAG(检索增强生成)是一种技术,它为大语言模型提供了外部知识或数据,这些数据是语言模型未曾训练过的。依赖于基于向量的检索的朴素RAG方法面临诸如缺乏深层次上下文理解和复杂推理能力等若干限制。为了解决这些问题,将知识图谱集成到RAG系统中。
传统的数据库,如关系数据库,将数据存储在结构化的表格中。尽管这种方法适用于许多应用程序,但在处理复杂关系时却显得不足。关系数据库需要复杂的连接和查询来导航关系,这使得它们效率较低且难以管理。

相比之下,知识图谱设计用于轻松处理复杂关系。它们能够实现:

简化数据建模:实体及其关系的自然表示。
高效的查询性能:更快地检索关联数据。
灵活性:轻松适应不断变化的数据结构。
使用知识图谱的场景
图数据库在数据点之间关系至关重要的场景中表现卓越。以下是一些常见的应用场景:

客户分析:通过映射交互和关系来理解客户行为。
推荐系统:通过分析用户和产品之间的连接提供个性化推荐。
分析复杂关系:探索数据中的复杂连接,如社交网络或组织结构。
构建知识图谱:逐步指南
在这个项目中,我使用了Neo4j图数据库、Langchain框架和AzureChat OpenAI模型(GPT 3.5 turbo)。在跳转到代码之前,我们首先在Neo4j上创建图数据库实例。

点击此链接并使用Google账户登录。登录后,点击创建免费实例,如下面的图片所示。然后,您将获得下载和继续按钮以获取Instance01的凭据。您可以将该凭据复制并粘贴到.env文件中。

步骤1:导入必要的包和凭证。

我将详细介绍每个包。

from langchain_openai` `import AzureChatOpenAI``from langchain_experimental.graph_transformers` `import LLMGraphTransformer``from langchain_core.documents` `import Documentfrom langchain.text_splitter` `import CharacterTextSplitter``from langchain_community.graphs` `import Neo4jGraphimport osfrom dotenv` `import load_dotenvllm_deployement_name = os.getenv("llm_deployement_name")``azure_endpoint = os.getenv("azure_endpoint")

第2步:初始化AzureChatOpenAI及Neo4jGraph
来自LangChain的AzureChatOpenAI类允许我们与部署在Azure上的OpenAI GPT模型进行交互。接下来,我们使用LangChain社区图模块中的Neo4jGraph类设置Neo4j图数据库,以存储和检索数据。Neo4j提供了Cypher查询语言,使得与图数据的交互和查询变得简单易行。

Cypher查询语言(Cypher)是一种专门用于查询和操作如Neo4j这样的图数据库的强大而表达力的语言。它允许用户以直观且高效的方式描述图中的模式。例如,一个简单的Cypher查询,用于查找名为Alice的所有朋友:

MATCH (alice:Person {name: ‘Alice’})-[:FRIEND]->(friend)
RETURN friend

此查询匹配名为“Alice”的人员节点,并查找与Alice通过“FRIEND”关系连接的所有节点,将这些节点作为朋友返回。

llm = AzureChatOpenAI(deployment_name=llm_deployement_name, model_name="gpt-35-turbo-16k", azure_endpoint=azure_endpoint)``graph = Neo4jGraph()

步骤3:数据摄取与预处理

我们从包含某科技公司员工信息的样本文本开始。将使用CharacterTextSplitter将该文本分割成可管理的块。

text = """Emily is an employee at TechNova, a leading technology company based in Silicon Heights.` `She has been working there for the past four years as a software developer. James is also an employee` `at TechNova, where he works as a data analyst. He joined the company three years ago after completing his` `undergraduate studies. TechNova is a renowned technology company that specializes in developing innovative` `software solutions and advanced artificial intelligence systems. The company boasts a diverse team of talented` `professionals from various fields. Both Emily and James are highly skilled experts who contribute significantly to``TechNova's achievements. They collaborate closely with their respective teams to create cutting-edge products and services``that cater to the dynamic needs of the company's clients."""``   ``documents = [Document(page_content=text)]``text_splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=20)``texts = text_splitter.split_documents(documents)

步骤4:将文本转换为图

LLMGraphTransformer类利用语言模型将文本转换为图文档,在语言模型的帮助下识别节点和关系。一旦我们有了图文档,就可以将其添加到Neo4j数据库中。

llm_transformer = LLMGraphTransformer(llm=llm)``graph_documents = llm_transformer.convert_to_graph_documents(texts)``   ``print(f"Nodes:{graph_documents[0].nodes}") # this is to see Nodes of generate graph``print("-----------------------------------------------------------------")``print(f"Relationships:{graph_documents[0].relationships}")` `   ``graph.add_graph_documents(graph_documents)``print("Documents successfully added to Graph DataBase")

请注意,由于构建图时使用了大型语言模型(LLM),因此每次构建的结果可能不同。您也可以根据需要指定要提取的节点和关系的类型。这里是如何设置仅允许特定的节点和关系:

llm_transformer_filtered = LLMGraphTransformer(`    `llm=llm,`    `allowed_nodes=["Author", "Book", "Publisher"],`    `allowed_relationships=["WRITTEN_BY", "PUBLISHED_BY"],``)``graph_documents_filtered = llm_transformer_filtered.convert_to_graph_documents(`    `documents``)

步骤5:查询图数据库

要查询图数据库,我们使用来自LangChain的GraphCypherQAChain。这条链允许我们使用自然语言查询从图中提取信息。GraphCypherQAChain是一个工具,它可以根据用户的问题生成针对Neo4j图数据库的Cypher查询,从而轻松获取所需的信息。

chain = GraphCypherQAChain.from_llm(`    `llm, graph=graph, verbose=True``)``result = chain.invoke({"query": "Where does James work?"})``   ``print(result)

演示项目的代码Github链接在这里(https://github.com/Samargithubb/GenAI-Projects/tree/main/RAG%20on%20Knowledge%20Graph)。希望你喜欢阅读这篇文章。如果有任何见解、建议或问题,请随时联系。

在这里插入图片描述

如何学习AI大模型?

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

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

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐