Résolution d'entités basée sur le graphe
Oh non ! Même avec un prompt infaillible, des exemples few-shot et les doigts croisés, le LLM a tout de même halluciné un personnage nommé Romeo Capulet et lui a attribué quelques répliques dans la base de données.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Heureusement, vous pouvez utiliser les relations du graphe de connaissances pour déterminer si ce nœud est probablement un doublon accidentel d'un autre nommé Romeo Montague.
La requête Cypher similarity_cypher utilise les relations MEMBER_OF et INTERACTS_WITH pour construire un score de similarité arbitraire avec les propriétés suivantes :
| Condition | Cypher | Modificateur de points |
|---|---|---|
Une relation MEMBER_OF vers la même famille |
af = bf |
+1 |
| La même propriété de nom | a.name = b.name |
+2 |
Pourcentage de personnages avec lesquels a et b interagissent |
size(inCommon) / size(aInteractsWith) |
Multiplié par le pourcentage de b avec lequel a interagit |
D'après votre connaissance du domaine, vous savez qu'un score de 2 indique une forte corrélation.
Cet exercice fait partie du cours
<cours>Graph RAG avec LangChain et Neo4j</cours>Instructions de l’exercice
- Interrogez
graphavec la requête Cypher (similarity_cypher) pour calculer les scores de similarité entre"romeo-capulet"et les autres nœuds de personnages. - Extrayez, dans cet ordre,
"bId","bFamily"et"score"depuis chaquerowdansresults.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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['____'])