Resolución de entidades basada en grafos
¡Vaya! Incluso con un prompt a prueba de balas, ejemplos few-shot y los dedos cruzados, el LLM ha alucinado un personaje llamado Romeo Capulet y le ha asignado algunas líneas en la base de datos.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Por suerte, puedes usar las relaciones del grafo de conocimiento para decidir si este nodo es probablemente un duplicado accidental de otro llamado Romeo Montague.
La sentencia Cypher similarity_cypher usa las relaciones MEMBER_OF e INTERACTS_WITH para construir una puntuación de similitud arbitraria con las siguientes propiedades:
| Condición | Cypher | Modificador de puntos |
|---|---|---|
Una relación MEMBER_OF a la misma familia |
af = bf |
+1 |
| La misma propiedad de nombre | a.name = b.name |
+2 |
Porcentaje de personajes con los que interactúan a y b |
size(inCommon) / size(aInteractsWith) |
Multiplicado por el porcentaje de b con el que interactúa a |
Por tu conocimiento del dominio, sabes que una puntuación de 2 indica una fuerte correlación.
Este ejercicio forma parte del curso
Graph RAG con LangChain y Neo4j
Instrucciones del ejercicio
- Consulta
graphcon la consulta Cypher (similarity_cypher) para calcular las puntuaciones de similitud entre"romeo-capulet"y los otros nodos de personajes. - Extrae
"bId","bFamily"y"score", en ese orden, de cadarowenresults.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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['____'])