Rezoluția entităților bazată pe graf
Vai! Chiar și cu un prompt infailibil, exemple few-shot și degetele încrucișate, LLM-ul a halucinat un personaj pe nume Romeo Capulet și i-a atribuit câteva replici în baza de date.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Din fericire, poți folosi relațiile din graful de cunoștințe pentru a decide dacă acest nod este probabil un duplicat accidental al nodului Romeo Montague.
Instrucțiunea Cypher similarity_cypher folosește relațiile MEMBER_OF și INTERACTS_WITH pentru a calcula un scor de similaritate arbitrar, cu următoarele proprietăți:
| Condiție | Cypher | Modificator de punctaj |
|---|---|---|
Relație MEMBER_OF cu aceeași familie |
af = bf |
+1 |
| Aceeași proprietate de nume | a.name = b.name |
+2 |
Procentul de personaje cu care interacționează a și b |
size(inCommon) / size(aInteractsWith) |
Înmulțit cu procentul din b cu care interacționează a |
Din cunoștințele tale despre domeniu, știi că un scor de 2 indică o corelație puternică.
Acest exercițiu face parte din cursul
Graph RAG cu LangChain și Neo4j
Instrucțiuni pentru exercițiu
- Interoghează
graphcu interogarea Cypher (similarity_cypher) pentru a calcula scorurile de similaritate dintre"romeo-capulet"și celelalte noduri de personaje. - Extrage
"bId","bFamily"și"score", în această ordine, din fiecarerowdinresults.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# Query the graph with similarity_cypher
result = ____
# Extract and print the results
for row in result:
print(row['____'], 'from', row['____'], 'has similarity score of ', row['____'])