Sözcüksel grafikler

LangChain ve Neo4j ile Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

Özet

Sonuçlar, LLM’e gönderilmeye hazır şekilde isteme eklenir

LangChain ve Neo4j ile Graph RAG

Sözcüksel grafikler

 

  • Yapılandırılmamış metin ve belgelerin grafik temsili
  • Bir kitap, makale vb. için hiyerarşik yapı saklar
  • En alt düzeyde ham metin bulunur

Bir belgenin hiyerarşisini, sayfalara bire-çok ilişkileri ve her sayfaya bağlı çok sayıda parça düğümünü gösteren bir diyagram

LangChain ve Neo4j ile Graph RAG

Romeo ve Juliet

Giriş:

The Project Gutenberg eBook of Romeo and Juliet

This ebook is for the use of anyone anywhere in the United States and
most other parts of the world at no cost and with almost no restrictions

Title: Romeo and Juliet
Author: William Shakespeare

Karakter Bilgileri:

Dramatis Personæ

ESCALUS, Prince of Verona.
MERCUTIO, kinsman to the Prince, and friend to Romeo.
PARIS, a young Nobleman, kinsman to the Prince.
Page to Paris.
...

Prolog:

 Enter Chorus.

CHORUS.
Two households, both alike in dignity,
In fair Verona, where we lay our scene,
From ancient grudge break to new mutiny,
...

Perde ve Sahneler:

ACT I
SCENE I. A public place.
 Enter Sampson and Gregory armed with swords and bucklers.

SAMPSON.
Gregory, on my word, we’ll not carry coals.

GREGORY.
No, for then we should be colliers...
1 https://gutenberg.org/ebooks/1513
LangChain ve Neo4j ile Graph RAG

Bir bilgi grafiği olarak Romeo ve Juliet

 

  • Oyun, Perdelerden oluşur

Bir Perde düğümünü vurgulayan bir bilgi grafiği diyagramı

LangChain ve Neo4j ile Graph RAG

Bir bilgi grafiği olarak Romeo ve Juliet

 

  • Oyun, Perdelerden oluşur
  • Perdeler, Sahnelerden oluşur

Perde düğümünden Sahne düğümüne HAS_SCENE ilişkisinin vurgulandığı bir bilgi grafiği diyagramı

LangChain ve Neo4j ile Graph RAG

Bir bilgi grafiği olarak Romeo ve Juliet

 

  • Oyun, Perdelerden oluşur
  • Perdeler, Sahnelerden oluşur
  • Sahnelerde Replikler bulunur

Sahne düğümünden Replik düğümüne HAS_LINE ilişkisinin vurgulandığı bir bilgi grafiği diyagramı

LangChain ve Neo4j ile Graph RAG

Bir bilgi grafiği olarak Romeo ve Juliet

 

  • Oyun, Perdelerden oluşur
  • Perdeler, Sahnelerden oluşur
  • Sahnelerde Replikler bulunur
  • Replikler Karakterler tarafından söylenir

Replik düğümünden Karakter düğümüne SPOKEN_BY ilişkisinin vurgulandığı bir bilgi grafiği diyagramı

LangChain ve Neo4j ile Graph RAG

Bir bilgi grafiği olarak Romeo ve Juliet

 

  • Oyun, Perdelerden oluşur
  • Perdeler, Sahnelerden oluşur
  • Sahnelerde Replikler bulunur
  • Replikler Karakterler tarafından söylenir

 

→ Her Replik düğümünde metin ve gömme özellikleri bulunur

Şu ilişkileri gösteren bir grafik diyagramı: Perde HAS_SCENE Sahne, Sahne HAS_LINE Replik, Replik SPOKEN_BY Karakter

LangChain ve Neo4j ile Graph RAG

Belgeyi yükleme

Belgeyi bir belge yükleyiciyle belleğe alın:

# PDF’yi yükleyin
loader = PyPDFLoader("romeo-and-juliet.pdf")
pages = loader.load()
LangChain ve Neo4j ile Graph RAG

Belgeyi bölme

act_splitter = RecursiveCharacterTextSplitter(
    # Metni perdelere böl
    separators=[ r"\n\nTHE PROLOGUE.",  r"\n\nACT", r"\n\n\*\*\* END"],
    is_separator_regex=True
)

scene_splitter = RecursiveCharacterTextSplitter( # Perdeyi sahnelere böl separators=[r"\nSCENE "], is_separator_regex=True )
LangChain ve Neo4j ile Graph RAG

Düğümler ve ilişkiler oluşturma

play = Node(

type="Play",
id="romeo-and-juliet",
properties={ "title": "Romeo and Juliet", "playwright": "William Shakespeare", "genres": ["Romance", "Tragedy"] }
)
# Bir grafik belgesine kaydet graph_doc = GraphDocument(nodes=[play], relationships=[])
LangChain ve Neo4j ile Graph RAG

Perdeleri çıkarmak

parts = act_splitter.split_text(text)

for act in parts: print(act[:20])
THE PROLOGUE...

ACT I
ACT II
ACT III
LangChain ve Neo4j ile Graph RAG

Perdeleri çıkarmak

parts = act_splitter.split_text(text)

for a, act in enumerate(parts):

first_line = act_text.split("\n")[0].strip()
if first_line.startswith("ACT"):
act_node = Node(
type="Act",
id=first_line,
)
graph_doc.nodes.append(act_node)
LangChain ve Neo4j ile Graph RAG

Perdeleri çıkarmak

for a, act in enumerate(parts):
    # ...
    # act_node = Node(...)


# Bir ilişki oluştur relationship = Relationship(
source=play,
target=act_node,
type="HAS_ACT",
properties=dict(order=a)
)
graph_doc.relationships.append(relationship)
LangChain ve Neo4j ile Graph RAG

Düğümleri ve ilişkileri kaydetme

Neo4jGraph nesnesini kullanın:

graph = Neo4jGraph(
    url=NEO4J_URI, 
    username=NEO4J_USERNAME, 
    password=NEO4J_PASSWORD
)
graph.add_graph_documents([graph_doc])
LangChain ve Neo4j ile Graph RAG

Hadi pratik yapalım!

LangChain ve Neo4j ile Graph RAG

Preparing Video For Download...