Graphbasierte Entitätsauflösung
Oh nein! Selbst mit einer wasserdichten Prompt, Few-Shot-Beispielen und gedrückten Daumen hat das LLM immer noch eine Figur namens Romeo Capulet halluziniert und ihr ein paar Zeilen in der Datenbank zugewiesen.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Zum Glück kannst du die Beziehungen im Knowledge Graph nutzen, um zu entscheiden, ob dieser Knoten wahrscheinlich ein versehentlicher Duplikat eines anderen namens Romeo Montague ist.
Die Cypher-Anweisung similarity_cypher verwendet die Beziehungen MEMBER_OF und INTERACTS_WITH, um eine frei definierte Similarity-Score mit folgenden Eigenschaften zu berechnen:
| Bedingung | Cypher | Punkte-Modifikator |
|---|---|---|
Eine MEMBER_OF-Beziehung zur gleichen Familie |
af = bf |
+1 |
| Dasselbe Namensattribut | a.name = b.name |
+2 |
Prozentsatz der Figuren, mit denen a und b interagieren |
size(inCommon) / size(aInteractsWith) |
Multipliziert mit dem Prozentsatz von b, mit dem a interagiert |
Aus deiner Domänenkenntnis weißt du, dass ein Score von 2 auf eine starke Korrelation hinweist.
Diese Übung ist Teil des Kurses
<Kurs>Graph RAG mit LangChain und Neo4j</Kurs>Übungsanweisungen
- Führe auf
graphdie Cypher-Abfrage (similarity_cypher) aus, um Similarity-Scores zwischen"romeo-capulet"und den anderen Figuren-Knoten zu berechnen. - Extrahiere aus jeder
rowinresultsdie Werte"bId","bFamily"und"score"– in genau dieser Reihenfolge.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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['____'])