Skip to content

What are vector databases?#

Vector database คือฐานข้อมูลที่เก็บข้อมูลเป็นตัวเลข:

Vector database คือฐานข้อมูลที่เก็บข้อมูลเป็นเวกเตอร์มิติสูง (high-dimensional vectors) ซึ่งเป็นตัวแทนเชิงคณิตศาสตร์ของคุณสมบัติหรือ attribute ต่างๆ (source)

ข้อดีคือสามารถค้นหาข้อมูลที่คล้ายกันได้อย่างรวดเร็วและแม่นยำ ด้วย vector database คุณจะค้นหาข้อมูลที่เกี่ยวข้องจากความหมายหรือ context แทนที่จะใช้ query แบบดั้งเดิม

A simplified example#

สมมติว่า vector database เก็บประโยค "n8n is a source-available automation tool that you can self-host" แทนที่จะเก็บเป็นข้อความ จะเก็บเป็น array ของตัวเลข (แต่ละตัวเลขอยู่ระหว่าง 0 ถึง 1) ที่แทนคุณสมบัติต่างๆ ของประโยคนี้ ไม่ใช่การแปลงแต่ละตัวอักษรเป็นตัวเลข แต่เวกเตอร์จะอธิบายเนื้อหาของประโยค

เช่น ใน vector store ถ้า 0.1 แทน automation tool, 0.2 แทน source available, 0.3 แทน can be self-hosted จะได้เวกเตอร์แบบนี้:

Sentence Vector (array of dimensions)
n8n is a source-available automation tool that you can self-host [0.1, 0.2, 0.3]
Zapier is an automation tool [0.1]
Make is an automation tool [0.1]
Confluence is a wiki tool that you can self-host [0.3]

ตัวอย่างนี้ง่ายมาก

ในความเป็นจริง เวกเตอร์จะซับซ้อนกว่านี้มาก ขนาดของเวกเตอร์อาจมีตั้งแต่หลักสิบถึงหลักพันมิติ และแต่ละมิติไม่ได้แทน feature เดียวแบบตรงๆ ตัวอย่างนี้แค่ช่วยให้เห็นภาพรวม ไม่ใช่ความเข้าใจเชิงเทคนิคจริงๆ ///

Qdrant มี vector search demos ให้ลองเล่นเพื่อเข้าใจพลังของ vector database เช่น food discovery demo ที่โชว์การจับคู่รูปอาหารจากความคล้ายกันของภาพ

เดโมนี้ใช้ข้อมูลจาก Delivery Service ผู้ใช้สามารถกด like/dislike รูปอาหาร แล้วแอปจะแนะนำเมนูที่คล้ายกันตามหน้าตา หรือเลือกดูเฉพาะร้านในระยะส่งได้ (source)

ดูรายละเอียดเทคนิคเต็มๆ ได้ที่ Qdrant demo-food-discovery GitHub repository

Embeddings, retrievers, text splitters, and document loaders#

Vector database ต้องใช้เครื่องมืออื่นร่วมด้วย:

  • Document loaders และ text splitters: document loader จะดึงข้อมูลหรือเอกสารเข้ามาและเตรียมไว้สำหรับ embedding โดยอาจใช้ text splitter แบ่งเอกสารเป็นชิ้นๆ
  • Embeddings: เป็นเครื่องมือที่แปลงข้อมูล (ข้อความ, รูปภาพ ฯลฯ) เป็นเวกเตอร์ และแปลงกลับเป็นข้อมูลดิบ n8n รองรับเฉพาะ text embedding
  • Retrievers: ใช้ดึงข้อมูลจาก vector database ต้องใช้ร่วมกับ embedding เพื่อแปลงเวกเตอร์กลับเป็นข้อมูล