Tag: Embedding

  • แปลงข้อความเป็นเวกเตอร์ด้วย Embedding & Vector Store

    แปลงข้อความเป็นเวกเตอร์ด้วย Embedding & Vector Store


    🧠 ตอนนี้เรากำลังทำอะไร?

    หลังจากตอนก่อนหน้านี้ เราได้:

    1. โหลดเอกสาร เช่น data.txt ที่มีข้อมูลขององค์กร
    2. แบ่งข้อความ ในเอกสารออกเป็นชิ้นเล็กๆ (เรียกว่า chunks)

    ในตอนนี้ เราจะ:

    🔁 แปลงข้อความแต่ละ chunk เป็นตัวเลข (Vector)
    🧠 เพื่อให้ AI เข้าใจข้อมูล
    💾 แล้วนำไปเก็บไว้ใน Vector Store เพื่อใช้ค้นหาและตอบคำถามภายหลัง


    💡 แล้ว Vector คืออะไร?

    ให้นึกง่ายๆ ว่า:

    • ข้อความ = สิ่งที่มนุษย์เข้าใจ
    • Vector = ตัวเลขหลายๆ ตัวที่ AI เข้าใจ

    เช่น
    ข้อความ: "กล้องถ่ายรูป" → ถูกแปลงเป็นตัวเลขแบบนี้:
    [0.384, -0.277, 0.008, ..., 0.695]

    AI ไม่เข้าใจคำว่า “กล้อง” แต่เข้าใจว่ามันคือชุดตัวเลขที่มีความหมาย


    🔧 ขั้นตอนการทำ Embedding & Vector Store

    ✅ 1. แปลงข้อความเป็นเวกเตอร์ (Embeddings)

    Library ที่ใช้:

    from langchain.embeddings import OpenAIEmbeddings
    

    สร้างตัวแปลง:

    embedding = OpenAIEmbeddings()
    

    💡 ใช้บริการของ OpenAI ซึ่งต้องมี API Key
    (สามารถโหลดจาก .env ได้โดยใช้ load_dotenv())

    เมื่อเราแปลงข้อความแล้ว ผลลัพธ์ที่ได้จะเป็น “ชุดตัวเลข” หรือ “เวกเตอร์”
    ลองส่งคำว่า "กล้อง" เข้าไป ก็จะได้เวกเตอร์ยาวๆ กลับมา


    ✅ 2. สร้าง Vector Store สำหรับเก็บเวกเตอร์

    Library ที่ใช้:

    from langchain.vectorstores import FAISS
    

    FAISS เป็นเครื่องมือจาก Facebook สำหรับจัดเก็บและค้นหาเวกเตอร์อย่างรวดเร็ว

    ติดตั้งแบบใช้ CPU (แนะนำสำหรับผู้เรียนทั่วไป):

    pip install faiss-cpu
    

    ถ้าใช้ GPU (กรณีมีการ์ดจอ NVIDIA):

    pip install faiss-gpu
    

    ✅ 3. แปลง chunks ทั้งหมดเป็นเวกเตอร์ และเก็บลง Vector Store

    สมมุติว่าเราแบ่งข้อความไว้ในตัวแปร chunks

    vectorstore = FAISS.from_documents(
        documents=chunks,
        embedding=embedding
    )
    

    📦 chunks คือข้อมูลที่เราต้องการให้ AI เข้าใจ
    🧠 embedding คือสิ่งที่แปลงข้อความเป็นตัวเลข
    💾 vectorstore คือคลังเก็บเวกเตอร์


    ✅ 4. ดึงข้อมูลจาก Vector Store (Retrieval)

    หากผู้ใช้มีคำถาม เช่น
    “ปีที่ก่อตั้งของบริษัท ABC คือเมื่อไร?”

    เราต้องการดึงเวกเตอร์จากคำถามนี้ แล้วไปเปรียบเทียบกับสิ่งที่เคยเก็บไว้

    retriever = vectorstore.as_retriever()
    

    ต่อไป เราก็จะใช้ retriever ใน Chain เพื่อให้ AI ค้นหาข้อมูลที่ใกล้เคียง แล้วตอบกลับได้อย่างแม่นยำ


    🧭 Workflow สรุปอีกครั้ง

    ขั้นตอนคำอธิบาย
    1. โหลดเอกสารเช่น data.txt
    2. แบ่งข้อความแบ่งเป็น chunks ยาว 100 ตัวอักษร
    3. สร้าง Embeddingใช้ OpenAIEmbeddings แปลงเป็นเวกเตอร์
    4. เก็บเวกเตอร์ใช้ FAISS เก็บไว้ใน vectorstore
    5. ดึงข้อมูลใช้ retriever ค้นหาเวกเตอร์ที่ใกล้กับคำถามที่ได้รับ

    🧪 ทดลอง: แปลงคำว่า “กล้อง” เป็นเวกเตอร์

    result = embedding.embed_query("กล้อง")
    print(result)
    

    ผลลัพธ์คือเวกเตอร์ยาวๆ เช่น:

    [0.384, -0.277, 0.008, ..., 0.695]
    

    🔄 ประโยชน์ของการมี Vector Store

    • ช่วยให้ AI “จดจำ” และ “อ้างอิง” ข้อมูลภายในองค์กรได้
    • รองรับการค้นหาข้อมูลตามคำถาม (Question → Search → Answer)
    • ไม่ต้องเทรนโมเดลใหม่ เพียงแค่เพิ่มเอกสารและสร้างเวกเตอร์
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!