Rozlišování entit pomocí grafu
Ale ne! I přes pečlivě sestavený prompt, few-shot příklady a zkřížené prsty si LLM vymyslel postavu jménem Romeo Capulet a přiřadil mu v databázi několik replik.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Naštěstí můžeš využít vztahy ve znalostním grafu k tomu, aby ses rozhodl/a, jestli je tento uzel pravděpodobně duplicitou uzlu s názvem Romeo Montague.
Cypherův příkaz similarity_cypher využívá vztahy MEMBER_OF a INTERACTS_WITH k výpočtu libovolného skóre podobnosti s těmito vlastnostmi:
| Podmínka | Cypher | Modifikátor bodů |
|---|---|---|
Vztah MEMBER_OF ke stejné rodině |
af = bf |
+1 |
| Stejná vlastnost name | a.name = b.name |
+2 |
Procento postav, se kterými interagují a i b |
size(inCommon) / size(aInteractsWith) |
Vynásobeno procentem b, se kterým interaguje a |
Z kontextu domény víš, že skóre 2 značí silnou korelaci.
Toto cvičení je součástí kurzu
Graph RAG s LangChain a Neo4j
Pokyny k cvičení
- Dotaž se na
graphpomocí Cypherova dotazu (similarity_cypher) a vypočítej skóre podobnosti mezi"romeo-capulet"a ostatními uzly postav. - Z každého
rowveresultsextrahuj hodnoty"bId","bFamily"a"score", v tomto pořadí.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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['____'])