back to top
Friday, May 16, 2025

เปิดประสบการณ์ใหม่ เล่น Gemini text embedding models กับภาษาไทย

Share

เมื่อไม่นาน (MAR 07, 2025)มานี้ทาง Google ได้ประกาศ Gemini text embedding models ตัวใหม่ออกมาให้ได้ใช้งานผ่าน API (ทั้งในรูปแบบของ Gemini API และ Vertex AI) ที่มีชื่อว่า gemini-embedding-exp-03-07 (ใน Vertex AI นั้นเราสามารถเรียกใช้ด้วยชื่อ text-embedding-large-exp-03-07.) Gemini text embedding models

โมเดลที่ถูกฝึกฝนมาจาก Gemini?

ซึ่งทาง Google เองก็ได้แสดงผลการทดสอบของโมเดลตัวนี้ว่าทำได้ดีมากกว่าโมเดลรุ่นก่อนหน้านั่นคือ text-embedding-004 รวมทั้งโมเดลสำหรับทำตัวอื่นด้วย ก่อนหน้านี้เวลาจะใช้งานโมเดลเพื่อใช้ทe นั้นถ้าเป็นภาษาอังกฤษเราสามารถใช้โมเดลที่ทางกูเกิ้ลเปิดให้ใช้ได้เลยอย่างเช่น text-embedding-gecko@001, เป็นต้น แต่ถ้าหากเป็นภาษาไทยแล้ว เราจำเป็นต้องเปลี่ยนมาใช้โมเดลอีกตัวที่มีชื่อกำกับว่า multilingual เช่น textembedding-gecko-multilingual@001, text-multilingual-embedding-002  ซึ่งแน่นอนว่าโมเดลตัวนี้รองรับหลายภาษาด้วย โดยปัจจุบันเราสามารถเรียกใช้งานด้วยชื่อโมเดลดังนี้Gemini text embedding models

AI Studiogemini-embedding-exp-03-07
VertexAItext-embedding-large-exp-03-07 (experimental)

กูเกิลบอกว่าจุดเด่นคือชุดฝึกฝนข้อมูลทำให้รองรับการแปลงข้อมูลเฉพาะหัวข้อที่หลากหลายตั้งแต่ การเงิน วิทยาศาสตร์ กฎหมาย การค้นข้อมูล และอื่น ๆgemini-text-embedding-modelsGemini Embedding

ทำไมเราจึงต้องการ embeddings?

ในการพัฒนาระบบ Retrieval Augmented Generation (RAG) หรือ Recommendation System ในการแยกและจัดกลุ่มข้อความนั้นจำเป็นที่จะต้องทำให้ LLM นั้นมีความเข้าใจถึงความหมายของคำคำนั้นว่ามีความหมายอย่างไร Gemini text embedding models

การทำ embeddings มีประโยชน์ในการหาความหมายที่แท้จริงหรือไม่

โดยจะทำการแปลงข้อมูลข้อความที่เป็นคำหรือประโยคให้อยู่ในรูปแบบของตัวเลข ถ้าคำไหนมีความหมายหรือลักษณะที่ใกล้เคียงกันแล้วตำแหน่งของคำก็จะอยู่ใกล้กันด้วย การทำนั้นช่วยให้การทำงานมีต้นทุนประมวลผลที่ลดลง แต่ยังได้ประสิทธิภาพผลลัพธ์ที่สูง โดยเราสามารถนำมาใช้ประโยชน์ในงาน Content AI

  • การค้นหาในฐานข้อมูลขนาดใหญ่ โดยจะเทียบ embeddings ของคำที่เราต้องการจะค้นหากับตัวเอกสารทั้งหมดว่า
  • การพัฒนา Retrieval Augmented Generation (RAG) เพิ่มประสิทธิภาพในการค้นหาแหล่งของข้อมูลก่อนที่จะนำสิ่งที่ได้จากการค้นหาไปให้ LLM ช่วยสร้างคำตอบออกมา
  • การจัดกลุ่ม (Clustering and Categorization) ช่วยในการจัดกลุ่มคำที่มีนัยหรือความหมายใกล้เคียงกัน
  • การแยกประเภท (Classification) ช่วยในการแยกประเภทของคำหรือข้อความอย่างเช่นถ้าเราต้องการจะตรวจสอบข้อความไหนเป็นข้อความหลอกลวง เป็นต้น
  • คำใกล้เคียงกัน ช่วยในการตรวจสอบว่าคำ ข้อมูล หรือเอกสารใดที่ซ้ำกันเพื่อลดการจัดเก็บข้อมูลที่ซ้ำซ้อนออกไป

ความสามารถของ Gemini embedding model

  • รองรับอินพุตได้สูงถึง 8,000 tokens: เพิ่มความยาวของ context จากรุ่นก่อน ทำให้สามารถฝังข้อความ, โค้ด หรือข้อมูลขนาดใหญ่ได้ในครั้งเดียว
  • เวกเตอร์เอาต์พุตมีความละเอียดสูงถึง 3,000 dimension : ให้ embedding ที่มีมิติมากขึ้นเกือบ 4 เท่าเมื่อเทียบกับโมเดลก่อนหน้า
  • Matryoshka Representation Learning (MRL): เทคนิคที่ช่วยให้สามารถตัดทอนมิติของเวกเตอร์จาก 3,000 dimension เหลือน้อยลงตามความต้องการ เพื่อลดต้นทุนในการจัดเก็บ
  • รองรับหลายภาษามากขึ้น: ขยายการรองรับภาษามากกว่าเดิมเป็นกว่า 100 ภาษา
  • โมเดลรวมแบบ Unified: เป็นโมเดลที่ให้คุณภาพเหนือกว่าโมเดลแบบเฉพาะทางเดิมๆ ทั้งที่ใช้กับหลายภาษา, ภาษาอังกฤษเท่านั้น หรือโค้ดโดยเฉพาะ

ตัวอย่างการใช้งาน

ในบทความนี้จะยกตัวอย่างการใช้งานโมเดล บน VertexAI

** ณ เวลาที่เขียนบทความนี้ ตัวโมเดล ยังอยู่ในช่วงทดสอบโมเดล ดังนั้นเราจึงยังไม่สามารถใส่ข้อความหรือคำหลายๆ คำเข้าไปจำเป็นต้องใส่ได้ครั้ง 1 ข้อความต่อการเรียกใช้ เท่านั้น

  1. ติดตั้ง library และ dependencies ที่เกี่ยวข้อง
! pip3 install --upgrade google-cloud-aiplatform \
 google-genai
  1. ประกาศตัวแปรชื่อโปรเจกต์และ location ที่จะใช้
PROJECT_ID = "my-test-project" 
LOCATION = "us-central1" 

from google.cloud import aiplatform
aiplatform.init(project=PROJECT_ID, location=LOCATION)
  1. ทำการ export variable ในกรณีที่เราจะใช้งาน VertexAI
!export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
!export GOOGLE_CLOUD_LOCATION=$LOCATION
!export GOOGLE_GENAI_USE_VERTEXAI=True
  1. Initial client
import numpy as np
from google import genai
from google.genai.types import EmbedContentConfig


client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)
  1. สร้างตัวอย่างกลุ่มประโยค
sentences = [
   "วันนี้เป็นวันที่ดี ฉันมีความสุขมาก",
   "ฉันรู้สึกมีความสุขกับทุกอย่างในวันนี้",
   "ชีวิตเต็มไปด้วยเรื่องดีๆ ฉันยิ้มได้ทั้งวัน",
   "ทุกปัญหาที่เจอวันนี้ กลับทำให้ฉันยิ้มได้เสมอ",
   "หัวใจของฉันมีแต่ความสุข ไม่มีอะไรทำให้ฉันทุกข์ได้เลย",
   "วันนี้เป็นวันที่ฉันอารมณ์ดีเป็นพิเศษ",
   "ฉันรู้สึกเบิกบานใจเมื่อได้มองท้องฟ้าในวันนี้",
   "ทุกสิ่งรอบตัวดูสดใสและเต็มไปด้วยความสุข",
   "รอยยิ้มของเธอทำให้โลกของฉันดูสวยงามขึ้น",
   "วันนี้ฉันมีแต่ความสุขจนอยากแบ่งปันให้ทุกคน",
   "เขานั่งเศร้าอยู่ริมหน้าต่าง มองฝนตกเงียบๆ",
   "ความผิดหวังทำให้เขาไม่อยากพูดอะไรกับใครอีก",
   "ทุกอย่างดูหมดความหมายเมื่อความหวังได้พังลง",
   "เขารู้สึกเศร้าเหมือนหัวใจแตกเป็นเสี่ยงๆ",
   "ความรู้สึกโดดเดี่ยวกำลังกัดกินใจเขาอย่างเงียบๆ",
   "วันนี้เขารู้สึกแย่มากจนไม่อยากลุกขึ้นมาเผชิญโลก",
   "เขายืนเศร้ากลางสายฝนด้วยความรู้สึกที่ว่างเปล่า",
   "หัวใจของเขารู้สึกหนักอึ้งจากความผิดหวังที่ได้รับ",
   "น้ำตาของเธอไหลออกมาโดยไม่มีเสียงร้องไห้",
   "ความทุกข์ที่สะสมอยู่ในใจเขาเกินกว่าจะบรรยายออกมา",
   "ในห้องที่มีคนมากมาย แต่เขากลับรู้สึกเหงาที่สุด",
   "เขาเหมือนอยู่คนเดียว แม้จะมีเพื่อนล้อมรอบก็ตาม",
   "เขารู้สึกโดดเดี่ยวแม้ในฝูงชน",
   "ความเงียบในใจเขาดังกว่าเสียงผู้คนรอบข้าง",
   "เขารู้สึกเหมือนตัวเองเป็นส่วนเกินในโลกใบนี้",
   "แม้คนจะอยู่ใกล้แค่ไหน แต่ใจเขาก็ยังห่างไกลอยู่ดี",
   "เขาอยู่ท่ามกลางผู้คนแต่กลับรู้สึกเหมือนไม่มีใครเลย",
   "ความเหงากำลังค่อยๆ กัดกินใจเขาจากภายใน",
   "ในค่ำคืนที่เงียบสงัด เขารู้สึกโดดเดี่ยวที่สุด",
   "เขาพยายามจะหนีจากความเหงา แต่ยิ่งหนียิ่งเจอ",
   "ป่าเคยอุดมสมบูรณ์ แต่ตอนนี้กลับแห้งแล้งไร้ชีวิต",
   "ธรรมชาติที่เคยสวยงาม วันนี้กลับดูเศร้าหมองลงไป",
   "แม่น้ำยังคงไหลสงบ ไม่ว่ารอบข้างจะเปลี่ยนแปลงไปแค่ไหน",
   "ต้นไม้ที่เคยเขียวชอุ่มกลับโรยราในเวลาไม่นาน",
   "ความงามของธรรมชาติกำลังถูกทำลายไปทีละน้อย",
   "ภูเขายังคงนิ่งสงบ แม้จะผ่านกาลเวลามานานแค่ไหน",
   "ป่าที่เคยมีชีวิตชีวา วันนี้กลับเงียบสงัดอย่างน่ากลัว",
   "ทะเลที่เคยสดใสกลับหม่นหมองลงทุกวัน",
   "สายลมที่เคยพัดเย็นสบาย ตอนนี้กลับร้อนและแห้งแล้ง",
   "แม่น้ำสายเดิมที่ไหลเอื่อยๆ วันนี้น้ำลดลงจนแทบแห้งขอด",
   "ความเงียบดังยิ่งกว่าคำพูดที่ได้ยินชัดเจน",
   "สิ่งที่สำคัญที่สุดบางครั้งกลับมองไม่เห็นด้วยตาเปล่า",
   "ดวงดาวส่องสว่างชัดเจนเมื่อฟ้ามืดมิดที่สุด",
   "คำพูดมากมายแต่กลับไม่มีความจริงใจซ่อนอยู่เลย",
   "สิ่งที่เรามองข้ามอาจสำคัญกว่าสิ่งที่เราสนใจอยู่",
   "บางครั้งรอยยิ้มก็ซ่อนน้ำตาเอาไว้ภายในใจ",
   "คำตอบที่แท้จริงอาจไม่ได้อยู่ในคำถามที่ถูกถาม",
   "ยิ่งพูดมากเท่าไร กลับยิ่งห่างไกลจากความจริง",
   "แสงสว่างมีค่าก็ต่อเมื่ออยู่ในที่ที่มืดที่สุด",
   "คนที่พูดเสียงดังที่สุด อาจเป็นคนที่รู้เรื่องน้อยที่สุด"
]
  1. สร้างฟังก์ชันในการทำ embedding
def embed_text(text):
 result = client.models.embed_content(
       model="text-embedding-large-exp-03-07",
       contents=text,
 )
 return result.embeddings[0].values
  1. สร้าง embeddings ของแต่ละประโยค
embeddings = []
for word in sentences:
 result = embed_text(word)
 embeddings.append(result)
  1. เตรียมข้อมูลเพื่อนำไปแสดงผลใน tensorboard
from torch.utils.tensorboard import SummaryWriter

def save_tb(mat, words):
 writer = SummaryWriter()
 writer.add_embedding(mat, words)
 writer.close()

mat = np.vstack(embeddings)
save_tb(mat, sentences)
  1. เมื่อรันแล้วเราจะได้ไฟล์ออกมาจำนวน 2 ไฟล์ตามภาพ (metadata.tsv และ tensors.tsv) ซึ่งเป็นไฟล์ที่เราจะใช้

  1. ไปที่ https://projector.tensorflow.org/ และทำการ upload ไฟล์ metadata.tsv และ tensor.tsv
    Google ประกาศ Gemini text embedding models ตัวใหม่ออกมาให้ได้ใช้งานผ่าน API โมเดล เป็นโมเดลจากทาง Google โดยผลการทดสอบตัวนี้ว่าทำได้ดีมาก
  2. เมื่อคลิกที่พื้นที่ว่างของหน้าเว็บแล้ว ตัวเว็บจะโหลด embedding vector ของเราขึ้นมา
  3. ทดสอบประโยค “เขาเหมือนอยู่คนเดียว แม้จะมีเพื่อนล้อมรอบก็ตาม”


    จะเห็นได้ว่าประโยคนี้มีประโยคที่มีความหมายใกล้เคียง 3 อันดับแรก เป็น
    – เขารู้สึกโดดเดี่ยวแม้ในฝูงชน
    – เขาอยู่ท่ามกลางผู้ค้นแต่กลับรู้สึกเหมือนไม่มีใครเลย
    – ในห้องที่มีคนมากมาย แต่เขากลับรู้สึกเหงาที่สุด
    ถือว่าเป็นประโยคที่เกี่ยวกับความเหงาและความโดดเดี่ยว
  4. ทดสอบประโยค “ทุกปัญหาที่เจอวันนี้ กลับทำให้ฉันยิ้มได้เสมอ”

    จะเห็นได้ว่าประโยคนี้มีประโยคที่มีความหมายใกล้เคียง 3 อันดับแรก เป็น
    – ชีวิตเต็มไปด้วยเรื่องดีๆ ฉันยิ้มได้ทั้งวัน
    – ฉันรู้สึกมีความสุกกับทุกอย่างในวันนี้
    – วันนี้ฉันมีแต่ความสุขจนอยากแบ่งปันให้ทุกคน
    ถือว่าเป็นประโยคที่เกี่ยวกับความสุขและการมองโลกในแง่บวก

จะเห็นได้ว่าความสามารถของโมเดล นั้น รองรับความหลากหลายภาษารวมถึงภาษาไทยแล้วและยังเข้าใจความหมายของประโยคภาษาไทยได้อย่างดีอีกด้วย (ก่อนหน้านี้ก็ทำได้ดีเช่นกัน) นับว่าเป็นอีกก้าวที่ดีที่โมเดลเหล่านี้ได้รู้จักคำและความหมายของภาษาไทยมากขึ้นด้วย  Gemini text embedding models

References

– State-of-the-art text embedding via the Gemini API, https://developers.googleblog.com/en/gemini-embedding-text-model-now-available-gemini-api/

– Google เปิดตัวโมเดล AI ที่เทรนจาก Gemini, 
https://www.blognone.com/node/145156

Teerapat Khunpech
Teerapat Khunpech
Data and AI Solutions Technical Team Lead ดูแลทีมและโครงการ Data สนใจเทคโนโลโยด้าน LLMs และ Agentic AI มีประสบการณ์การจัดการ Data Pipeline Realtime, Near Realtime ข้อมูลขนาดใหญ่ให้กับองค์กรชั้นนำ

Read more

คุณน่าจะชอบบทความนี้