24 คะแนน โดย GN⁺ 2024-04-18 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

คู่มือการใช้งาน Embeddings สำหรับนักพัฒนาแอป

  • เวกเตอร์ Embeddings มีประสิทธิภาพในการวัดความคล้ายคลึงกันของข้อมูลนำเข้าหลากหลายประเภท จึงเหมาะกับฟีเจอร์ค้นหาและแนะนำ และยังทำงานได้ดีในภาษาอื่นอย่างภาษาฝรั่งเศสหรือภาษาญี่ปุ่นด้วย
  • Pgvector เป็นส่วนขยายของ Postgres สำหรับจัดเก็บและคิวรี Embeddings ทำให้สามารถผสานตรรกะ SQL กับการประมวลผล Embeddings ได้อย่างทรงพลังโดยไม่ต้องเพิ่มบริการใหม่
  • ต่างจาก LLM การใช้งาน Embeddings ให้ความรู้สึกคล้ายการเขียนโค้ดเชิงกำหนดผลลัพธ์แบบทั่วไป

การพัฒนาโปรเจกต์ค้นหาและแนะนำไอคอน

  • หลังตั้งค่า Pgvector แล้ว ได้วางกลยุทธ์ในการเข้ารหัสข้อมูลไอคอนเป็นเวกเตอร์ Embeddings
  • ใช้โมเดล text-embedding-3-small ของ OpenAI
  • วัดความคล้ายคลึงระหว่างคำค้นกับ Embeddings ของไอคอนแต่ละตัวด้วย cosine similarity
  • ผสานตรรกะทางธุรกิจ เช่น การกรองชุดไอคอน เข้ากับการค้นหาแบบ Embeddings
  • ยกตัวอย่างอัลกอริทึมจัดอันดับที่ใช้ข้อมูลการคลิกไอคอนสำหรับคำค้นนั้น ๆ
  • ใช้การเปรียบเทียบ Embeddings เพื่อแนะนำไอคอนที่คล้ายกับไอคอนที่เลือก

สรุปแนวทางการนำไปใช้

  • เลือกใช้ pgvector/Postgres เป็น vector DB โดยก็มีตัวเลือกอื่นอย่าง MongoDB เช่นกัน
  • พัฒนาด้วย Typescript และใช้ drizzle-orm โดยมีไลบรารีสำหรับภาษาและเฟรมเวิร์กอื่น ๆ ให้เลือกมากมาย
  • แอปโฮสต์อยู่บน Neon และยังสามารถใช้บริการโฮสต์ฐานข้อมูลแบบ managed อย่าง fly.io หรือ Supabase ได้
  • ใช้โมเดล Embeddings text-embedding-3-small ของ OpenAI และสามารถเลือกโมเดลอื่นได้จากลีดเดอร์บอร์ดของ Huggingface
  • นำคุณสมบัติของไอคอนที่เกี่ยวข้องกับการค้นหาสูงมาแปลงเป็น Embeddings ในรูปแบบคู่ key-value
  • ใช้ cosine similarity เป็นฟังก์ชันระยะทาง โดย Pgvector ยังรองรับ l2 distance และ inner product ด้วย
  • จำกัดผลการค้นหาไว้ที่ 50 อันดับแรก และหากใช้ช่วงระยะทาง แนะนำให้กำหนดให้กว้างแล้วใช้ร่วมกับ limit

ความเห็นของ GN⁺

  • สำหรับโปรเจกต์ส่วนใหญ่ แนวทางเพิ่มความสามารถด้านเวกเตอร์ให้ฐานข้อมูลเดิมด้วยเครื่องมืออย่าง pgvector น่าจะเพียงพอ และการใช้ vector DB แยกต่างหากคงจำเป็นเฉพาะในบริการขนาดใหญ่
  • จุดเด่นสำคัญคือสามารถผสานตรรกะทางธุรกิจเข้ากับการค้นหาแบบ Embeddings ได้อย่างเป็นธรรมชาติ และยังใช้พลังของ SQL ได้เต็มที่
  • ไอเดียการสะท้อนข้อมูลฟีดแบ็กจากผู้ใช้เข้าไปในอัลกอริทึมจัดอันดับนั้นน่าสนใจ และน่าจะช่วยปรับปรุงความแม่นยำของการค้นหาได้อย่างต่อเนื่อง
  • เมื่อเทียบกับ LLM บริการที่อิง Embeddings มีพฤติกรรมที่ชัดเจนกว่าและดีบักได้ง่ายกว่า จึงน่าจะนำไปใช้กับบริการจริงได้สะดวกกว่ามาก
  • มีโมเดล Embeddings แบบโอเพนซอร์สหลากหลายที่เปิดเผยอยู่แล้ว ทำให้แม้พัฒนาโมเดลเองได้ยาก ก็ยังนำ Embeddings คุณภาพสูงมาใช้งานได้อย่างไม่ยาก

1 ความคิดเห็น

 
GN⁺ 2024-04-18
ความคิดเห็นบน Hacker News

สรุปความคิดเห็นจาก Hacker News

ความสะดวกของการทำ document embedding และ similarity search ด้วยโมเดล RAG

  • ใช้ไลบรารี sentence-transformers และ faiss ก็สามารถทำ document embedding และ similarity search ได้อย่างง่ายดาย
  • การทำโปรเจกต์สนุก ๆ ที่ให้ผลลัพธ์ดีกว่าระบบแนะนำของ New York Times ก็ดูน่าสนใจ
  • ช่อง YouTube ของ James Briggs อธิบายเรื่องที่เกี่ยวข้องนี้ไว้ได้ดี

ทำความเข้าใจแนวคิดพื้นฐานของ embedding

  • แม้ไม่มี AI/deep learning ก็สามารถสร้าง embedding ได้ด้วยการกำหนดดัชนีเฉพาะให้คำแต่ละคำ แล้วสะสมค่าตามความถี่
  • สามารถใช้ cosine similarity และวิธีคล้ายกันเพื่อทำ similarity search ได้
  • embedding ที่อิงกับ deep learning คือการต่อยอดจากแนวคิดพื้นฐานนี้ โดยเพิ่มความสามารถอย่างการกรองคำ/โทเค็น และการจัดการคำพ้องความหมาย

การอธิบายกระบวนการสร้าง embedding ยังไม่ละเอียดพอ

  • ในบทความพูดถึงกระบวนการสร้าง embedding เพียงว่า They're a bit of a black box โดยไม่ได้อธิบายรายละเอียด
  • การลองสร้าง word vector ด้วยตัวเองและทำความเข้าใจวิธีการอย่าง Word2Vec อาจช่วยได้

ความยากในการจัดการคำพ้องเสียง/หลายความหมาย

  • คำที่มีหลายความหมายอาจทำให้ผลการค้นหาออกมาไม่ตรงความตั้งใจ (เช่น ค้นหา "king" แล้วได้ไอคอน ruler(ไม้บรรทัด) เป็นต้น)
  • แต่ในอีกมุมหนึ่งก็เป็นโจทย์ท้าทายที่สนุก พร้อมข้อดีคืออาจค้นหาไอคอนที่เกี่ยวข้องเจอได้

ใช้ embedding ได้แม้ไม่มี vector store

  • ใน production ที่มีข้อมูลขนาดใหญ่ vector store สำคัญเพราะเรื่อง latency และปัจจัยอื่น ๆ แต่ถ้าเป็นโปรเจกต์เล็ก ๆ ก็ทำแบบง่าย ๆ ด้วย Numpy ได้
  • สามารถคำนวณความคล้ายกันได้ด้วยการใช้โอเปอเรเตอร์ @ ของ Numpy เพื่อหา inner product ระหว่าง normalized query vector กับ record matrix

วิธีรัน logic ของ embedding บนสภาพแวดล้อม local

  • มีการตั้งคำถามถึงวิธีสร้าง embedding โดยตรงในสภาพแวดล้อม local หรือในฐานข้อมูล โดยไม่ต้องพึ่ง OpenAI API

ความเป็นไปได้ของการใช้ embedding ในงานเขียนเอกสารเทคนิค

  • หลังจากการมาของ ChatGPT ก็มีการพูดคุยกันมากขึ้นในหมู่นักเขียนเอกสารเทคนิคถึงความเป็นไปได้ในการใช้เป็นเครื่องมือ semantic search
  • อาจช่วยเพิ่มประสิทธิภาพในขั้นตอนการค้นคว้าที่จำเป็นต่อการเขียนเอกสาร

วิธีจัดเก็บและใช้งาน embedding

  • โดยทั่วไปจะสร้าง embedding แล้วจัดเก็บไว้ จากนั้นค่อยโหลดมาใช้เมื่อจำเป็น
  • ในกรณีง่าย ๆ ก็อาจส่ง embedding เข้าไปใช้งานเป็น array ได้โดยตรง
  • จุดที่ยากคือการจัดเก็บ embedding แต่ไม่ได้จำเป็นต้องใช้ฐานข้อมูลพิเศษเสมอไป เพราะเก็บใน SQLite BLOB ก็ได้
  • embedding ไม่มีกรณีที่ "หมดอายุ"

การอธิบายความรู้พื้นฐานยังไม่เพียงพอสำหรับนักพัฒนาที่เพิ่งเริ่มต้นกับ AI

  • บทความใช้คำอย่าง embedding หรือ vector database โดยไม่อธิบายแนวคิดก่อน แล้วข้ามไปที่วิธีใช้งานทันที
  • สำหรับคนที่กำลังมองหาจุดเริ่มต้นที่ดีสำหรับนักพัฒนาแอปที่สนใจ AI ก็น่าจะอยากได้บทนำของแนวคิดที่เกี่ยวข้องเหล่านี้ด้วย