การแก้ไข Entity ด้วยกราฟ
อุ๊ย! แม้จะมีพรอมต์ที่รัดกุม ตัวอย่าง few-shot และความหวังดีเต็มเปี่ยม แต่ LLM ก็ยังสร้างตัวละครที่ไม่มีอยู่จริงขึ้นมา ชื่อ Romeo Capulet และกำหนดบทพูดให้กับตัวละครนี้ในฐานข้อมูลด้วย
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
โชคดีที่สามารถใช้ความสัมพันธ์ใน knowledge graph เพื่อตัดสินว่า node นี้น่าจะเป็น duplicate โดยบังเอิญของ node ที่ชื่อ Romeo Montague หรือไม่
คำสั่ง Cypher ชื่อ similarity_cypher ใช้ความสัมพันธ์ MEMBER_OF และ INTERACTS_WITH เพื่อคำนวณคะแนนความคล้ายคลึงแบบกำหนดเอง โดยมีเงื่อนไขดังนี้
| เงื่อนไข | Cypher | ตัวปรับคะแนน |
|---|---|---|
มีความสัมพันธ์ MEMBER_OF กับตระกูลเดียวกัน |
af = bf |
+1 |
| มี property name เหมือนกัน | a.name = b.name |
+2 |
เปอร์เซ็นต์ของตัวละครที่ a และ b มีปฏิสัมพันธ์ร่วมกัน |
size(inCommon) / size(aInteractsWith) |
คูณด้วยเปอร์เซ็นต์ของ b ที่ a มีปฏิสัมพันธ์ด้วย |
จากความรู้ในโดเมนนี้ คะแนนที่ได้ 2 ขึ้นไปบ่งชี้ว่ามีความสัมพันธ์กันสูง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Graph RAG ด้วย LangChain และ Neo4j
คำแนะนำการฝึกหัด
- Query
graphด้วยคำสั่ง Cypher (similarity_cypher) เพื่อคำนวณคะแนนความคล้ายคลึงระหว่าง"romeo-capulet"กับ node ตัวละครอื่น ๆ - ดึงข้อมูล
"bId","bFamily"และ"score"ตามลำดับนั้น จากแต่ละrowในresults
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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['____'])