लेक्सिकल ग्राफ

LangChain और Neo4j के साथ Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

पुनर्कथन

परिणाम प्रॉम्प्ट में जोड़े जाते हैं और LLM को भेजने के लिए तैयार होते हैं

LangChain और Neo4j के साथ Graph RAG

लेक्सिकल ग्राफ

 

  • असंरचित टेक्स्ट और डॉक्यूमेंट का ग्राफ प्रतिनिधित्व
  • किसी किताब, रिसर्च पेपर आदि का हाइरार्किकल प्रतिनिधित्व स्टोर करता है
  • सूक्ष्म स्तर पर कच्चा टेक्स्ट स्टोर होता है

एक आरेख जो एक डॉक्यूमेंट की हाइरार्की दिखाता है: पेजों तक one-to-many रिश्ते, और हर पेज से जुड़े कई chunk नोड्स

LangChain और Neo4j के साथ Graph RAG

Romeo and Juliet

परिचय:

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

पात्र जानकारी:

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.
...

प्रोलॉग:

 Enter Chorus.

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

अंक और दृश्य:

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 और Neo4j के साथ Graph RAG

नॉलेज ग्राफ के रूप में Romeo and Juliet

 

  • नाटक में Acts होते हैं

एक नॉलेज ग्राफ आरेख जो Act नोड को हाइलाइट करता है

LangChain और Neo4j के साथ Graph RAG

नॉलेज ग्राफ के रूप में Romeo and Juliet

 

  • नाटक में Acts होते हैं
  • Acts में Scenes होते हैं

एक नॉलेज ग्राफ आरेख जो Act नोड से Scene नोड तक HAS_SCENE रिलेशनशिप को हाइलाइट करता है

LangChain और Neo4j के साथ Graph RAG

नॉलेज ग्राफ के रूप में Romeo and Juliet

 

  • नाटक में Acts होते हैं
  • Acts में Scenes होते हैं
  • Scenes में Lines होती हैं

एक नॉलेज ग्राफ आरेख जो Scene नोड से Line नोड तक HAS_LINE रिलेशनशिप को हाइलाइट करता है

LangChain और Neo4j के साथ Graph RAG

नॉलेज ग्राफ के रूप में Romeo and Juliet

 

  • नाटक में Acts होते हैं
  • Acts में Scenes होते हैं
  • Scenes में Lines होती हैं
  • Characters द्वारा Lines बोली जाती हैं

एक नॉलेज ग्राफ आरेख जो Line नोड से Character नोड तक SPOKEN_BY रिलेशनशिप को हाइलाइट करता है

LangChain और Neo4j के साथ Graph RAG

नॉलेज ग्राफ के रूप में Romeo and Juliet

 

  • नाटक में Acts होते हैं
  • Acts में Scenes होते हैं
  • Scenes में Lines होती हैं
  • Characters द्वारा Lines बोली जाती हैं

 

→ हर Line नोड में text और embedding प्रॉपर्टीज होंगी

एक ग्राफ आरेख जो ये रिश्ते दिखाता है: Act HAS_SCENE Scene, Scene HAS_LINE Line, Line SPOKEN_BY Character

LangChain और Neo4j के साथ Graph RAG

डॉक्यूमेंट लोड करना

डॉक्यूमेंट लोडर से डॉक्यूमेंट मेमोरी में लोड करें:

# PDF लोड करें
loader = PyPDFLoader("romeo-and-juliet.pdf")
pages = loader.load()
LangChain और Neo4j के साथ Graph RAG

डॉक्यूमेंट को बाँटना

act_splitter = RecursiveCharacterTextSplitter(
    # Split text into acts
    separators=[ r"\n\nTHE PROLOGUE.",  r"\n\nACT", r"\n\n\*\*\* END"],
    is_separator_regex=True
)

scene_splitter = RecursiveCharacterTextSplitter( # Split act into scenes separators=[r"\nSCENE "], is_separator_regex=True )
LangChain और Neo4j के साथ Graph RAG

नोड और रिलेशनशिप बनाना

play = Node(

type="Play",
id="romeo-and-juliet",
properties={ "title": "Romeo and Juliet", "playwright": "William Shakespeare", "genres": ["Romance", "Tragedy"] }
)
# ग्राफ डॉक्यूमेंट में स्टोर करें graph_doc = GraphDocument(nodes=[play], relationships=[])
LangChain और Neo4j के साथ Graph RAG

Acts निकालना

parts = act_splitter.split_text(text)

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

ACT I
ACT II
ACT III
LangChain और Neo4j के साथ Graph RAG

Acts निकालना

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 और Neo4j के साथ Graph RAG

Acts निकालना

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


# एक रिलेशनशिप बनाएँ relationship = Relationship(
source=play,
target=act_node,
type="HAS_ACT",
properties=dict(order=a)
)
graph_doc.relationships.append(relationship)
LangChain और Neo4j के साथ Graph RAG

नोड और रिलेशनशिप सेव करना

Neo4jGraph ऑब्जेक्ट का उपयोग करें:

graph = Neo4jGraph(
    url=NEO4J_URI, 
    username=NEO4J_USERNAME, 
    password=NEO4J_PASSWORD
)
graph.add_graph_documents([graph_doc])
LangChain और Neo4j के साथ Graph RAG

अभ्यास करते हैं!

LangChain और Neo4j के साथ Graph RAG

Preparing Video For Download...