แปลงข้อความเป็นเวกเตอร์ด้วย 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)
  • ไม่ต้องเทรนโมเดลใหม่ เพียงแค่เพิ่มเอกสารและสร้างเวกเตอร์
📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *