赞
踩
知识图谱是组织和整合信息的强大工具。它们提供了一种以实体为节点、以关系为边的结构化表示知识的方式。这种结构化表示允许进行高效的查询、分析和推理,使知识图谱在各种应用中非常有价值,从搜索引擎和推荐系统到自然语言处理和人工智能。
在人工智能领域,例如,知识图谱可以通过提供额外的上下文信息来增强机器学习模型的性能。它们可以帮助改善对自然语言的理解,通过映射不同单词或短语之间的关系。此外,它们可以通过提供丰富的结构化信息源来帮助创建更具交互性和智能的人工智能系统。
以电影数据库为例。在知识图谱中,每部电影都将是一个节点。电影的属性,如标题、上映日期和导演,将是节点的属性。其他实体,如演员,也将是节点,并且它们与电影的连接将表示为边。例如,一条边可以将一个演员节点与一个电影节点连接起来,并标有演员在电影中扮演的角色。这种结构允许高效地回答复杂的查询,例如“找出所有在[年份]发布的电影,其中包含演员X”,还允许深入的分析,例如识别演员职业生涯中的模式或了解电影类型随时间的变化趋势。因此,知识图谱不仅组织数据,还揭示了关系和见解,这些见解很难通过传统的数据分析方法发现。
然而,构建和维护知识图谱并不是一项琐碎的任务。它涉及从各种来源提取信息,确保这些信息的准确性,并在新信息可用时更新图谱。尽管存在这些挑战,但知识图谱所提供的潜在好处使它们成为活跃研究和开发的领域。
创建知识图谱遵循一个结构化的过程,从建立最小可行图(MVG)开始,然后逐步扩展。让我们以从 Form 10-K 报告中提取信息的示例来看看这个过程是如何展开的:
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
来源:DeepLearning AI 课程 ‘Knowledge Graphs for RAG’
识图谱为公司披露和财务报告的各个方面提供了宝贵的见解。
通过遵循这种结构化方法,并从 Form 10-K 报告中纳入相关数据,创建一个全面且动态的知识图谱是可行的。这样的图谱不仅有助于深入了解公司披露,还能在各个领域支持知情决策。
让我们详细说明如何使用《吠陀·歌》数字副本,这是一部著名的精神文本,创建一个基本的知识图谱。这部文本是由斯里·斯瓦米·西瓦南达编写的,充满了丰富的信息,我们可以利用知识图谱进行组织。我们将使用 Neo4j,它帮助我们管理和结构化我们的图形,以及 Langchain,它帮助我们处理文本。
首先,使用 Neo4j 创建一个免费帐户。对于本例,我们将使用免费层,允许创建一个实例。
凭证文件将包含以下细节,您将需要在随后的代码中使用这些细节:
# 在使用这些详细信息进行连接之前等待 60 秒,或登录 https://console.neo4j.io 验证 Aura 实例是否可用 NEO4J_URI=值 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=值 AURA_INSTANCEID=值 AURA_INSTANCENAME=Instance01
现在让我们创建知识图谱。
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
# 加载 PDF 文件 loader = PyPDFLoader("您的/pdf/文件路径.pdf") pages = loader.load_and_split()
# 将页面拆分为块 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0) chunks = text_splitter.split_documents(pages)
# 警告控制 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, )
# 创建一个 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)
# 从向量存储创建一个检 索器 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有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。