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

目的

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

本指南将向您展示如何仅使用笔记本电脑和您最喜欢的书在 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
列表和阵列之间的选择如何影响涉及大型数据集的Python应用程序的整体性能?列表和阵列之间的选择如何影响涉及大型数据集的Python应用程序的整体性能?May 03, 2025 am 12:11 AM

ForhandlinglargedatasetsinPython,useNumPyarraysforbetterperformance.1)NumPyarraysarememory-efficientandfasterfornumericaloperations.2)Avoidunnecessarytypeconversions.3)Leveragevectorizationforreducedtimecomplexity.4)Managememoryusagewithefficientdata

说明如何将内存分配给Python中的列表与数组。说明如何将内存分配给Python中的列表与数组。May 03, 2025 am 12:10 AM

Inpython,ListSusedynamicMemoryAllocationWithOver-Asalose,而alenumpyArraySallaySallocateFixedMemory.1)listssallocatemoremoremoremorythanneededinentientary上,respizeTized.2)numpyarsallaysallaysallocateAllocateAllocateAlcocateExactMemoryForements,OfferingPrediCtableSageButlessemageButlesseflextlessibility。

您如何在Python数组中指定元素的数据类型?您如何在Python数组中指定元素的数据类型?May 03, 2025 am 12:06 AM

Inpython,YouCansspecthedatatAtatatPeyFelemereModeRernSpant.1)Usenpynernrump.1)Usenpynyp.dloatp.dloatp.ploatm64,formor professisconsiscontrolatatypes。

什么是Numpy,为什么对于Python中的数值计算很重要?什么是Numpy,为什么对于Python中的数值计算很重要?May 03, 2025 am 12:03 AM

NumPyisessentialfornumericalcomputinginPythonduetoitsspeed,memoryefficiency,andcomprehensivemathematicalfunctions.1)It'sfastbecauseitperformsoperationsinC.2)NumPyarraysaremorememory-efficientthanPythonlists.3)Itoffersawiderangeofmathematicaloperation

讨论'连续内存分配”的概念及其对数组的重要性。讨论'连续内存分配”的概念及其对数组的重要性。May 03, 2025 am 12:01 AM

Contiguousmemoryallocationiscrucialforarraysbecauseitallowsforefficientandfastelementaccess.1)Itenablesconstanttimeaccess,O(1),duetodirectaddresscalculation.2)Itimprovescacheefficiencybyallowingmultipleelementfetchespercacheline.3)Itsimplifiesmemorym

您如何切成python列表?您如何切成python列表?May 02, 2025 am 12:14 AM

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

在Numpy阵列上可以执行哪些常见操作?在Numpy阵列上可以执行哪些常见操作?May 02, 2025 am 12:09 AM

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,减法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Python的数据分析中如何使用阵列?Python的数据分析中如何使用阵列?May 02, 2025 am 12:09 AM

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)

See all articles

热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

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

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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