首页 后端开发 Python教程 用知识图探索哈利波特的世界

用知识图探索哈利波特的世界

Dec 22, 2024 am 12:13 AM

目的

您是一名哈利波特迷,想要掌握哈利波特宇宙的一切吗?或者您只是想用一张很酷的图表来展示《哈利·波特》中不同角色如何组合在一起,给您的朋友留下深刻印象?看看知识图就知道了。

本指南将向您展示如何仅使用笔记本电脑和您最喜欢的书在 Neo4J 中获取知识图。

什么是知识图谱

根据维基百科:

知识图谱是使用图结构数据模型或拓扑来表示和操作数据的知识库。

你需要什么

硬件方面,你只需要一台电脑,最好是Nvidia显卡。为了完全自给自足,我将选择本地法学硕士设置,但也可以轻松使用 OpenAI API 来实现相同目的。

设置步骤

您将需要以下内容:

  1. Ollama,和你最喜欢的法学硕士
  2. Python 环境
  3. Neo4J

奥拉马

当我在 WSL2 中的 Ubuntu 24.04 上进行编码时,为了轻松传递任何 GPU 工作负载,我使用 Ollama docker。将 Ollama 作为 docker 容器运行非常简单,只需首先安装 Nvidia 容器工具包,然后执行以下操作:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

如果您没有 Nvidia GPU,您可以在 CLI 中使用以下命令运行仅 CPU 的 Ollama:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

完成后,您可以将您最喜欢的 LLM 模型拉入 Ollama。 Ollama 上可用的型号列表位于此处。例如,如果我想拉取 qwen2.5,我可以在 CLI 中运行以下命令:

docker exec -it ollama ollama run qwen2.5
登录后复制
登录后复制
登录后复制

Ollama 就完成了!

Python环境

您首先需要创建一个 python 虚拟环境,以便您安装的任何软件包或您所做的任何配置更改都仅限于该环境内,而不是全局应用。以下命令将创建一个虚拟环境 harry-potter-rag:

python -m venv harry-potter-rag
登录后复制
登录后复制
登录后复制

然后您可以使用以下命令激活虚拟环境:

source tutorial-env/bin/activate
登录后复制
登录后复制
登录后复制

接下来使用pip安装相关包,主要来自LangChain:

%pip install --upgrade --quiet  langchain langchain-community langchain-openai langchain-experimental neo4j
登录后复制

设置 Neo4J

我们将把 Neo4J 设置为 Docker 容器。为了便于设置特定配置,我们使用 docker compose。您只需将以下内容复制到名为 docker-compose.yaml 的文件中,然后在同一目录中运行 docker-compose up -d 即可设置 Neo4J。

此设置还确保数据、日志和插件保留在本地文件夹中,即 /data。 /日志和插件。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

构建知识图谱

我们现在可以开始在 Jupyter Notebook 中构建知识图了!我们首先使用以下命令设置 Ollama LLM 实例:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

接下来,我们将 LLM 连接到 Neo4J:

docker exec -it ollama ollama run qwen2.5
登录后复制
登录后复制
登录后复制

现在,是时候抓取你最喜欢的哈利波特文本,或者任何最喜欢的书了,我们将使用 LangChain 将文本分割成块。分块是一种将长文本分解为多个部分的策略,然后我们可以将每个部分发送到 LLM 将其转换为节点和边,并将每个块的节点和边插入到 Neo4J 中。只是一个快速入门,节点是您在图表上看到的圆圈,每条边将两个节点连接在一起。

代码还会打印第一个块,以便快速预览这些块的外观。

python -m venv harry-potter-rag
登录后复制
登录后复制
登录后复制

现在,是时候让我们的 GPU 完成繁重的工作并将文本转换为知识图了!在深入研究整本书之前,让我们尝试一下提示,以更好地指导 LLM 以我们想要的方式返回图表。

提示本质上是我们期望的示例,或者是我们希望在响应中出现的内容的说明。在知识图谱的背景下,我们可以指示法学硕士仅提取人员和组织作为节点,并且仅接受给定实体的某些类型的关系。例如,我们可以允许配偶关系只发生在一个人与另一个人之间,而不是发生在一个人与一个组织之间。

我们现在可以在第一个文本块上使用 LLMGraphTransformer 来查看图形的结果。这是我们调整提示的好机会,直到结果符合我们的喜好。

以下示例期望节点可以是个人或组织,并且 allowed_relationships 指定允许的关系类型。为了让LLM能够捕获原文的多样性,我还将strict_mode设置为False,这样下面未定义的任何其他关系或实体也可以被捕获。如果您将 strict_mode 设置为 True,则不符合允许的实体和关系可能会被删除,或强制进入允许的范围(这可能不准确)。

source tutorial-env/bin/activate
登录后复制
登录后复制
登录后复制

对提示的微调感到满意后,现在是时候摄取知识图了。请注意,try - except 是为了显式处理无法正确插入 Neo4J 的任何响应 - 代码的设计是为了记录任何错误,但不会阻止循环继续将后续块转换为图形。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

上面的循环花了我大约 46 分钟来消化《哈利·波特与魔法石》、《哈利·波特与密室》和《哈利·波特与阿兹卡班的囚徒》。我最终得到了 4868 个独特的节点!下面提供了快速预览。你可以看到这张图真的很拥挤,而且很难区分谁与谁相关,以及以什么方式相关。

Navigating the world of Harry Potter with Knowledge Graphs

我们现在可以利用密码查询来查看邓布利多!

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
登录后复制
登录后复制
登录后复制

Navigating the world of Harry Potter with Knowledge Graphs

好吧,现在我们只剩下邓布利多本人了。来看看他和哈利波特有什么关系。

docker exec -it ollama ollama run qwen2.5
登录后复制
登录后复制
登录后复制

Navigating the world of Harry Potter with Knowledge Graphs

好的,现在我们对哈利和邓布利多所说的话感兴趣。

python -m venv harry-potter-rag
登录后复制
登录后复制
登录后复制

Navigating the world of Harry Potter with Knowledge Graphs

我们可以看到该图仍然非常混乱,需要查阅许多文档才能真正找到我们要找的东西。我们可以看到,文档作为节点的建模并不理想,还可以在 LLMGraphTransformer 上做进一步的工作,使图使用起来更加直观。

结论

您可以看到在自己的本地计算机上设置知识图是多么容易,甚至不需要连接到互联网。

github 存储库,其中还包含哈利波特宇宙的整个知识图谱,可在此处获取。

后记

要将 harry_potter.graphml 文件导入 Neo4J,请将 graphml 文件复制到 neo4j /import 文件夹中,然后在 Neo4J 浏览器上运行以下命令:

source tutorial-env/bin/activate
登录后复制
登录后复制
登录后复制

以上是用知识图探索哈利波特的世界的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Web开发的Python:关键应用程序 Web开发的Python:关键应用程序 Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

See all articles