您是一名哈利波特迷,想要掌握哈利波特宇宙的一切吗?或者您只是想用一张很酷的图表来展示《哈利·波特》中不同角色如何组合在一起,给您的朋友留下深刻印象?看看知识图就知道了。
本指南将向您展示如何仅使用笔记本电脑和您最喜欢的书在 Neo4J 中获取知识图。
根据维基百科:
知识图谱是使用图结构数据模型或拓扑来表示和操作数据的知识库。
硬件方面,你只需要一台电脑,最好是Nvidia显卡。为了完全自给自足,我将选择本地法学硕士设置,但也可以轻松使用 OpenAI API 来实现相同目的。
您将需要以下内容:
当我在 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 虚拟环境,以便您安装的任何软件包或您所做的任何配置更改都仅限于该环境内,而不是全局应用。以下命令将创建一个虚拟环境 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 设置为 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 个独特的节点!下面提供了快速预览。你可以看到这张图真的很拥挤,而且很难区分谁与谁相关,以及以什么方式相关。
我们现在可以利用密码查询来查看邓布利多!
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
好吧,现在我们只剩下邓布利多本人了。来看看他和哈利波特有什么关系。
docker exec -it ollama ollama run qwen2.5
好的,现在我们对哈利和邓布利多所说的话感兴趣。
python -m venv harry-potter-rag
我们可以看到该图仍然非常混乱,需要查阅许多文档才能真正找到我们要找的东西。我们可以看到,文档作为节点的建模并不理想,还可以在 LLMGraphTransformer 上做进一步的工作,使图使用起来更加直观。
您可以看到在自己的本地计算机上设置知识图是多么容易,甚至不需要连接到互联网。
github 存储库,其中还包含哈利波特宇宙的整个知识图谱,可在此处获取。
要将 harry_potter.graphml 文件导入 Neo4J,请将 graphml 文件复制到 neo4j /import 文件夹中,然后在 Neo4J 浏览器上运行以下命令:
source tutorial-env/bin/activate
以上是用知识图探索哈利波特的世界的详细内容。更多信息请关注PHP中文网其他相关文章!