Grafbaserad entitetsupplösning
Nej då! Trots ett välformulerat prompt, few-shot-exempel och korsade fingrar har LLM:en ändå hittat på en karaktär vid namn Romeo Capulet och tilldelat honom några repliker i databasen.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Tur då att du kan använda relationerna i kunskapsgrafen för att avgöra om den här noden troligtvis är ett oavsiktligt duplikat av en annan nod med namnet Romeo Montague.
Cypher-satsen similarity_cypher använder relationerna MEMBER_OF och INTERACTS_WITH för att beräkna ett godtyckligt likhetspoäng med följande egenskaper:
| Villkor | Cypher | Poängmodifierare |
|---|---|---|
En MEMBER_OF-relation till samma familj |
af = bf |
+1 |
| Samma name-egenskap | a.name = b.name |
+2 |
Andel karaktärer som både a och b interagerar med |
size(inCommon) / size(aInteractsWith) |
Multipliceras med andelen av b som a interagerar med |
Baserat på din domänkunskap vet du att ett poäng på 2 indikerar en stark korrelation.
Den här övningen är en del av kursen
Graph RAG med LangChain och Neo4j
Övningsinstruktioner
- Fråga
graphmed Cypher-frågan (similarity_cypher) för att beräkna likhetspoäng mellan"romeo-capulet"och de övriga karaktärsnoderna. - Extrahera
"bId","bFamily"och"score", i den ordningen, från varjerowiresults.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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['____'])