Grafgebaseerde entity resolution
O nee! Zelfs met een ijzersterke prompt, few-shotvoorbeelden en duimen draaien heeft de LLM alsnog een personage bij elkaar gehallucineerd met de naam Romeo Capulet, en hij heeft zelfs een paar regels in de database gekregen.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Gelukkig kun je de relaties in de kennisgrafiek gebruiken om te bepalen of deze node waarschijnlijk per ongeluk een duplicaat is van een andere met de naam Romeo Montague.
De Cypher-instructie similarity_cypher gebruikt de relaties MEMBER_OF en INTERACTS_WITH om een willekeurige similariteitsscore te bouwen met de volgende eigenschappen:
| Voorwaarde | Cypher | Puntenmodifier |
|---|---|---|
Een MEMBER_OF-relatie met dezelfde familie |
af = bf |
+1 |
| Dezelfde name-eigenschap | a.name = b.name |
+2 |
Percentage personages waarmee a en b interactie hebben |
size(inCommon) / size(aInteractsWith) |
Vermenigvuldigd met het percentage van b waarmee a interactie heeft |
Op basis van je domeinkennis weet je dat een score van 2 wijst op een sterke correlatie.
Deze oefening maakt deel uit van de cursus
Graph RAG met LangChain en Neo4j
Oefeninstructies
- Voer de Cypher-query (
similarity_cypher) uit opgraphom similariteitsscores te berekenen tussen"romeo-capulet"en de andere personage-nodes. - Haal uit elke
rowinresultsachtereenvolgens"bId","bFamily"en"score"op.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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['____'])