首頁 > 後端開發 > Python教學 > 用知識圖探索哈利波特的世界

用知識圖探索哈利波特的世界

Susan Sarandon
發布: 2024-12-22 00:13:19
原創
876 人瀏覽過

目的

您是哈利波特迷,想要掌握哈利波特宇宙的一切嗎?或者您只是想用一張很酷的圖表來展示《哈利波特》中不同角色如何組合在一起,給您的朋友留下深刻印象?看看知識圖就知道了。

本指南將向您展示如何僅使用筆記型電腦和您最喜歡的書在 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板