Rumah >pembangunan bahagian belakang >Tutorial Python >Menavigasi dunia Harry Potter dengan Graf Pengetahuan

Menavigasi dunia Harry Potter dengan Graf Pengetahuan

Susan Sarandon
Susan Sarandonasal
2024-12-22 00:13:19839semak imbas

Matlamat

Adakah anda peminat Harry Potter yang ingin mempunyai segala-galanya tentang alam semesta Harry Potter di hujung jari anda? Atau adakah anda hanya mahu menarik perhatian rakan anda dengan carta yang menarik tentang bagaimana watak-watak yang berbeza dalam Harry Potter bersatu? Jangan lihat lebih jauh daripada graf pengetahuan.

Panduan ini akan menunjukkan kepada anda cara untuk mendapatkan graf pengetahuan dalam Neo4J hanya dengan komputer riba dan buku kegemaran anda.

Apakah itu graf pengetahuan

Menurut Wikipedia:

Graf pengetahuan ialah pangkalan pengetahuan yang menggunakan model data atau topologi berstruktur graf untuk mewakili dan mengendalikan data.

Apa yang anda perlukan

Dari segi perkakasan, anda hanya perlukan komputer, sebaik-baiknya yang mempunyai kad grafik Nvidia. Untuk berdikari sepenuhnya, saya akan menggunakan persediaan LLM tempatan, tetapi seseorang juga boleh menggunakan API OpenAI dengan mudah untuk tujuan yang sama.

Langkah-langkah dalam menyediakan

Anda memerlukan yang berikut:

  1. Ollama, dan model LLM kegemaran anda
  2. persekitaran ular sawa
  3. Neo4J

Ollama

Ketika saya mengekod pada Ubuntu 24.04 dalam WSL2, agar sebarang beban kerja GPU dapat dilalui dengan mudah, saya menggunakan Ollama docker. Menjalankan Ollama sebagai bekas docker adalah semudah memasang kit alat kontena Nvidia dahulu, dan kemudian yang berikut:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Jika anda tidak mempunyai GPU Nvidia, anda boleh menjalankan Ollama CPU sahaja menggunakan arahan berikut dalam CLI:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Setelah selesai, anda boleh menarik model LLM kegemaran anda ke dalam Ollama. Senarai model yang tersedia di Ollama ada di sini. Contohnya jika saya ingin menarik qwen2.5, saya boleh menjalankan arahan berikut dalam CLI:

docker exec -it ollama ollama run qwen2.5

Dan anda sudah selesai dengan Ollama!

Persekitaran Python

Anda mula-mula ingin mencipta persekitaran maya ular sawa, supaya mana-mana pakej yang anda pasang, atau sebarang perubahan konfigurasi yang anda buat, dihadkan dalam persekitaran, dan bukannya menggunakannya secara global. Perintah berikut akan mencipta persekitaran maya harry-potter-rag:

python -m venv harry-potter-rag

Anda kemudian boleh mengaktifkan persekitaran maya menggunakan arahan berikut:

source tutorial-env/bin/activate

Seterusnya, gunakan pip untuk memasang pakej yang berkaitan, terutamanya daripada LangChain:

%pip install --upgrade --quiet  langchain langchain-community langchain-openai langchain-experimental neo4j

Menyediakan Neo4J

Kami akan menyediakan Neo4J sebagai bekas docker. Untuk memudahkan penyediaan dengan konfigurasi tertentu, kami menggunakan karang docker. Anda hanya boleh menyalin yang berikut ke dalam fail yang dipanggil docker-compose.yaml, dan kemudian jalankan docker-compose up -d dalam direktori yang sama untuk menyediakan Neo4J.

Persediaan ini juga memastikan data, log dan pemalam dikekalkan dalam folder tempatan, iaitu /data. /log dan pemalam.

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Membina Graf Pengetahuan

Kini kita boleh mula membina Graf Pengetahuan dalam Buku Nota Jupyter! Kami mula-mula menyediakan tika Ollama LLM menggunakan yang berikut:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Seterusnya, kami menyambungkan LLM kami ke Neo4J:

docker exec -it ollama ollama run qwen2.5

Sekarang, tiba masanya untuk mengambil teks Harry Potter kegemaran anda, atau mana-mana buku kegemaran, dan kami akan menggunakan LangChain untuk membahagikan teks itu kepada beberapa bahagian. Chunking ialah strategi untuk memecahkan teks yang panjang kepada bahagian, dan kami kemudiannya boleh menghantar setiap bahagian ke LLM untuk menukarnya menjadi nod dan tepi, dan memasukkan setiap nod dan tepi bongkah dalam Neo4J. Hanya asas ringkas, nod ialah bulatan yang anda lihat pada graf dan setiap tepi bergabung dua nod bersama-sama.

Kod ini juga mencetak bongkah pertama untuk pratonton pantas tentang rupa ketulan itu.

python -m venv harry-potter-rag

Sekarang, tiba masanya untuk membiarkan GPU kami melakukan tugas berat dan menukar teks kepada Graf Pengetahuan! Sebelum kita menyelami keseluruhan buku, mari kita bereksperimen dengan gesaan untuk membimbing LLM dengan lebih baik dalam mengembalikan graf mengikut cara yang kita mahukan.

Gesaan pada asasnya ialah contoh perkara yang kami jangkakan atau arahan tentang perkara yang kami mahu dipaparkan dalam respons. Dalam konteks graf pengetahuan, kami boleh mengarahkan LLM untuk hanya mengekstrak orang dan organisasi sebagai nod, dan hanya menerima jenis perhubungan tertentu yang diberikan entiti. Sebagai contoh, kita boleh membenarkan hubungan pasangan hanya berlaku antara seseorang dengan orang lain, dan bukannya antara seseorang dan organisasi.

Kami kini boleh menggunakan LLMGraphTransformer pada bahagian pertama teks untuk melihat bagaimana graf itu boleh berubah. Ini adalah peluang yang baik untuk kita mengubah suai gesaan sehingga hasilnya mengikut citarasa kita.

Contoh berikut menjangkakan nod yang boleh menjadi Orang atau Organisasi, dan perhubungan_yang dibenarkan menentukan jenis perhubungan yang dibenarkan. Untuk membolehkan LLM menangkap kepelbagaian teks asal, saya juga menetapkan strict_mode kepada False, supaya sebarang perhubungan atau entiti lain yang tidak ditakrifkan di bawah juga boleh ditangkap. Jika anda sebaliknya menetapkan strict_mode kepada True, entiti dan perhubungan yang tidak mematuhi perkara yang dibenarkan boleh sama ada digugurkan atau dipaksa ke dalam perkara yang dibenarkan (yang mungkin tidak tepat).

source tutorial-env/bin/activate

Setelah anda berpuas hati dengan memperhalusi gesaan anda, kini tiba masanya untuk memasukkan ke dalam Graf Pengetahuan. Ambil perhatian bahawa percubaan - kecuali adalah untuk mengendalikan secara eksplisit sebarang respons yang tidak dapat dimasukkan dengan betul ke dalam Neo4J -- kod direka bentuk supaya sebarang ralat dilog, tetapi tidak menyekat gelung daripada meneruskan dengan menukar ketulan berikutnya kepada graf.

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Gelung di atas mengambil masa kira-kira 46 minit untuk menelan Harry Potter and the Philosopher's Stone, Harry Potter and the Chamber of Secrets, dan Harry Potter and the Prisoner of Azkaban. Saya mempunyai 4868 nod unik! Pratonton pantas tersedia di bawah. Anda dapat melihat bahawa graf itu benar-benar sesak dan sukar untuk membezakan siapa yang berkaitan dengan siapa lagi, dan dalam cara apa.

Navigating the world of Harry Potter with Knowledge Graphs

Kami kini boleh memanfaatkan pertanyaan cypher untuk melihat katakan, Dumbledore!

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Navigating the world of Harry Potter with Knowledge Graphs

Ok sekarang kita dapat Dumbledore sendiri. Mari lihat bagaimana dia berkaitan dengan Harry Potter.

docker exec -it ollama ollama run qwen2.5

Navigating the world of Harry Potter with Knowledge Graphs

Ok, sekarang kami berminat dengan perkara yang telah diperkatakan oleh Harry dan Dumbledore.

python -m venv harry-potter-rag

Navigating the world of Harry Potter with Knowledge Graphs

Kami dapat melihat bahawa graf masih benar-benar mengelirukan, dengan banyak dokumen perlu dilalui untuk benar-benar mencari apa yang kami cari. Kita dapat melihat bahawa pemodelan dokumen sebagai nod tidak sesuai dan kerja lanjut boleh dilakukan pada LLMGraphTransformer untuk menjadikan graf lebih intuitif untuk digunakan.

Kesimpulan

Anda boleh melihat betapa mudahnya untuk menyediakan Graf Pengetahuan pada komputer tempatan anda sendiri, tanpa perlu menyambung ke Internet.

Repo github, yang juga mengandungi keseluruhan Graf Pengetahuan alam semesta Harry Potter, tersedia di sini.

Postscript

Untuk mengimport fail harry_potter.graphml ke dalam Neo4J, salin fail graphml ke dalam folder neo4j /import dan jalankan yang berikut pada penyemak imbas Neo4J:

source tutorial-env/bin/activate

Atas ialah kandungan terperinci Menavigasi dunia Harry Potter dengan Graf Pengetahuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn