เมื่อไม่นาน (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
Table of Contents
โมเดลที่ถูกฝึกฝนมาจาก Gemini?
ซึ่งทาง Google เองก็ได้แสดงผลการทดสอบของโมเดลตัวนี้ว่าทำได้ดีมากกว่าโมเดลรุ่นก่อนหน้านั่นคือ text-embedding-004 รวมทั้งโมเดลสำหรับทำตัวอื่นด้วย ก่อนหน้านี้เวลาจะใช้งานโมเดลเพื่อใช้ทe นั้นถ้าเป็นภาษาอังกฤษเราสามารถใช้โมเดลที่ทางกูเกิ้ลเปิดให้ใช้ได้เลยอย่างเช่น text-embedding-gecko@001, เป็นต้น แต่ถ้าหากเป็นภาษาไทยแล้ว เราจำเป็นต้องเปลี่ยนมาใช้โมเดลอีกตัวที่มีชื่อกำกับว่า multilingual เช่น textembedding-gecko-multilingual@001, text-multilingual-embedding-002 ซึ่งแน่นอนว่าโมเดลตัวนี้รองรับหลายภาษาด้วย โดยปัจจุบันเราสามารถเรียกใช้งานด้วยชื่อโมเดลดังนี้Gemini text embedding models
AI Studio | gemini-embedding-exp-03-07 |
VertexAI | text-embedding-large-exp-03-07 (experimental) |
กูเกิลบอกว่าจุดเด่นคือชุดฝึกฝนข้อมูลทำให้รองรับการแปลงข้อมูลเฉพาะหัวข้อที่หลากหลายตั้งแต่ การเงิน วิทยาศาสตร์ กฎหมาย การค้นข้อมูล และอื่น ๆgemini-text-embedding-models
ทำไมเราจึงต้องการ 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 ข้อความต่อการเรียกใช้ เท่านั้น
- ติดตั้ง library และ dependencies ที่เกี่ยวข้อง
! pip3 install --upgrade google-cloud-aiplatform \
google-genai
- ประกาศตัวแปรชื่อโปรเจกต์และ location ที่จะใช้
PROJECT_ID = "my-test-project"
LOCATION = "us-central1"
from google.cloud import aiplatform
aiplatform.init(project=PROJECT_ID, location=LOCATION)
- ทำการ export variable ในกรณีที่เราจะใช้งาน VertexAI
!export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
!export GOOGLE_CLOUD_LOCATION=$LOCATION
!export GOOGLE_GENAI_USE_VERTEXAI=True
- 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)
- สร้างตัวอย่างกลุ่มประโยค
sentences = [
"วันนี้เป็นวันที่ดี ฉันมีความสุขมาก",
"ฉันรู้สึกมีความสุขกับทุกอย่างในวันนี้",
"ชีวิตเต็มไปด้วยเรื่องดีๆ ฉันยิ้มได้ทั้งวัน",
"ทุกปัญหาที่เจอวันนี้ กลับทำให้ฉันยิ้มได้เสมอ",
"หัวใจของฉันมีแต่ความสุข ไม่มีอะไรทำให้ฉันทุกข์ได้เลย",
"วันนี้เป็นวันที่ฉันอารมณ์ดีเป็นพิเศษ",
"ฉันรู้สึกเบิกบานใจเมื่อได้มองท้องฟ้าในวันนี้",
"ทุกสิ่งรอบตัวดูสดใสและเต็มไปด้วยความสุข",
"รอยยิ้มของเธอทำให้โลกของฉันดูสวยงามขึ้น",
"วันนี้ฉันมีแต่ความสุขจนอยากแบ่งปันให้ทุกคน",
"เขานั่งเศร้าอยู่ริมหน้าต่าง มองฝนตกเงียบๆ",
"ความผิดหวังทำให้เขาไม่อยากพูดอะไรกับใครอีก",
"ทุกอย่างดูหมดความหมายเมื่อความหวังได้พังลง",
"เขารู้สึกเศร้าเหมือนหัวใจแตกเป็นเสี่ยงๆ",
"ความรู้สึกโดดเดี่ยวกำลังกัดกินใจเขาอย่างเงียบๆ",
"วันนี้เขารู้สึกแย่มากจนไม่อยากลุกขึ้นมาเผชิญโลก",
"เขายืนเศร้ากลางสายฝนด้วยความรู้สึกที่ว่างเปล่า",
"หัวใจของเขารู้สึกหนักอึ้งจากความผิดหวังที่ได้รับ",
"น้ำตาของเธอไหลออกมาโดยไม่มีเสียงร้องไห้",
"ความทุกข์ที่สะสมอยู่ในใจเขาเกินกว่าจะบรรยายออกมา",
"ในห้องที่มีคนมากมาย แต่เขากลับรู้สึกเหงาที่สุด",
"เขาเหมือนอยู่คนเดียว แม้จะมีเพื่อนล้อมรอบก็ตาม",
"เขารู้สึกโดดเดี่ยวแม้ในฝูงชน",
"ความเงียบในใจเขาดังกว่าเสียงผู้คนรอบข้าง",
"เขารู้สึกเหมือนตัวเองเป็นส่วนเกินในโลกใบนี้",
"แม้คนจะอยู่ใกล้แค่ไหน แต่ใจเขาก็ยังห่างไกลอยู่ดี",
"เขาอยู่ท่ามกลางผู้คนแต่กลับรู้สึกเหมือนไม่มีใครเลย",
"ความเหงากำลังค่อยๆ กัดกินใจเขาจากภายใน",
"ในค่ำคืนที่เงียบสงัด เขารู้สึกโดดเดี่ยวที่สุด",
"เขาพยายามจะหนีจากความเหงา แต่ยิ่งหนียิ่งเจอ",
"ป่าเคยอุดมสมบูรณ์ แต่ตอนนี้กลับแห้งแล้งไร้ชีวิต",
"ธรรมชาติที่เคยสวยงาม วันนี้กลับดูเศร้าหมองลงไป",
"แม่น้ำยังคงไหลสงบ ไม่ว่ารอบข้างจะเปลี่ยนแปลงไปแค่ไหน",
"ต้นไม้ที่เคยเขียวชอุ่มกลับโรยราในเวลาไม่นาน",
"ความงามของธรรมชาติกำลังถูกทำลายไปทีละน้อย",
"ภูเขายังคงนิ่งสงบ แม้จะผ่านกาลเวลามานานแค่ไหน",
"ป่าที่เคยมีชีวิตชีวา วันนี้กลับเงียบสงัดอย่างน่ากลัว",
"ทะเลที่เคยสดใสกลับหม่นหมองลงทุกวัน",
"สายลมที่เคยพัดเย็นสบาย ตอนนี้กลับร้อนและแห้งแล้ง",
"แม่น้ำสายเดิมที่ไหลเอื่อยๆ วันนี้น้ำลดลงจนแทบแห้งขอด",
"ความเงียบดังยิ่งกว่าคำพูดที่ได้ยินชัดเจน",
"สิ่งที่สำคัญที่สุดบางครั้งกลับมองไม่เห็นด้วยตาเปล่า",
"ดวงดาวส่องสว่างชัดเจนเมื่อฟ้ามืดมิดที่สุด",
"คำพูดมากมายแต่กลับไม่มีความจริงใจซ่อนอยู่เลย",
"สิ่งที่เรามองข้ามอาจสำคัญกว่าสิ่งที่เราสนใจอยู่",
"บางครั้งรอยยิ้มก็ซ่อนน้ำตาเอาไว้ภายในใจ",
"คำตอบที่แท้จริงอาจไม่ได้อยู่ในคำถามที่ถูกถาม",
"ยิ่งพูดมากเท่าไร กลับยิ่งห่างไกลจากความจริง",
"แสงสว่างมีค่าก็ต่อเมื่ออยู่ในที่ที่มืดที่สุด",
"คนที่พูดเสียงดังที่สุด อาจเป็นคนที่รู้เรื่องน้อยที่สุด"
]
- สร้างฟังก์ชันในการทำ embedding
def embed_text(text):
result = client.models.embed_content(
model="text-embedding-large-exp-03-07",
contents=text,
)
return result.embeddings[0].values
- สร้าง embeddings ของแต่ละประโยค
embeddings = []
for word in sentences:
result = embed_text(word)
embeddings.append(result)
- เตรียมข้อมูลเพื่อนำไปแสดงผลใน 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)
- เมื่อรันแล้วเราจะได้ไฟล์ออกมาจำนวน 2 ไฟล์ตามภาพ (metadata.tsv และ tensors.tsv) ซึ่งเป็นไฟล์ที่เราจะใช้
- ไปที่ https://projector.tensorflow.org/ และทำการ upload ไฟล์ metadata.tsv และ tensor.tsv
- เมื่อคลิกที่พื้นที่ว่างของหน้าเว็บแล้ว ตัวเว็บจะโหลด embedding vector ของเราขึ้นมา
- ทดสอบประโยค “เขาเหมือนอยู่คนเดียว แม้จะมีเพื่อนล้อมรอบก็ตาม”
จะเห็นได้ว่าประโยคนี้มีประโยคที่มีความหมายใกล้เคียง 3 อันดับแรก เป็น
– เขารู้สึกโดดเดี่ยวแม้ในฝูงชน
– เขาอยู่ท่ามกลางผู้ค้นแต่กลับรู้สึกเหมือนไม่มีใครเลย
– ในห้องที่มีคนมากมาย แต่เขากลับรู้สึกเหงาที่สุด
ถือว่าเป็นประโยคที่เกี่ยวกับความเหงาและความโดดเดี่ยว - ทดสอบประโยค “ทุกปัญหาที่เจอวันนี้ กลับทำให้ฉันยิ้มได้เสมอ”
จะเห็นได้ว่าประโยคนี้มีประโยคที่มีความหมายใกล้เคียง 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