בדף הזה מוסבר למה כדאי להשתמש בתכונה MLTransform ואיך משתמשים בה כדי להכין את הנתונים לאימון מודלים של למידת מכונה (ML). בדף הזה מוסבר איך לעבד נתונים באמצעות יצירת הטמעות באמצעות MLTransform.
כשמשלבים כמה טרנספורמציות של עיבוד נתונים במחלקה אחת, MLTransformהתהליך של הפעלת פעולות עיבוד נתונים של Apache Beam ML על תהליך העבודה מתייעל.

MLTransform בשלב העיבוד המקדים של תהליך העבודה.
סקירה כללית על הטמעות
הטמעות חיוניות לחיפוש סמנטי מודרני ולאפליקציות של יצירה משולבת-אחזור (RAG). הטמעות מאפשרות למערכות להבין מידע ולקיים איתו אינטראקציה ברמה עמוקה יותר, ברמה מושגית. בחיפוש סמנטי, הטמעות הופכות שאילתות ומסמכים לייצוגים וקטוריים. הייצוגים האלה משקפים את המשמעות הבסיסית שלהם ואת קשרי הגומלין ביניהם. כתוצאה מכך, אפשר למצוא תוצאות רלוונטיות גם כשמילות המפתח לא תואמות באופן ישיר. זו התקדמות משמעותית מעבר לחיפוש רגיל שמבוסס על מילות מפתח. אפשר גם להשתמש בהטמעות להמלצות על מוצרים. השימוש הזה כולל חיפושים מולטימודאליים שמתבססים על תמונות וטקסט, Log Analytics ומשימות כמו ביטול כפילויות.
במסגרת RAG, הטמעות ממלאות תפקיד מכריע באחזור ההקשר הרלוונטי ביותר מבסיס ידע, כדי לבסס את התשובות של מודלים גדולים של שפה (LLM). על ידי הטמעת השאילתה של המשתמש וקטעי המידע בבסיס הידע, מערכות RAG יכולות לזהות ולאחזר ביעילות את החלקים הדומים ביותר מבחינה סמנטית. ההתאמה הסמנטית הזו מבטיחה שלמודל ה-LLM תהיה גישה למידע הדרוש כדי ליצור תשובות מדויקות ואינפורמטיביות.
הטמעה ועיבוד של נתונים להטמעות

בתרחישי שימוש מרכזיים בהטמעה, השיקול העיקרי הוא איך להזין ולעבד ידע. ההעברה הזו יכולה להתבצע באצווה או בסטרימינג. המקור של הידע הזה יכול להיות מגוון מאוד. לדוגמה, המידע הזה יכול להגיע מקבצים ששמורים ב-Cloud Storage, או ממקורות סטרימינג כמו Pub/Sub או השירות המנוהל של Google Cloud ל-Apache Kafka.
במקורות סטרימינג, הנתונים עצמם יכולים להיות התוכן הגולמי (לדוגמה, טקסט פשוט) או כתובות URI שמפנות למסמכים. לא משנה מה המקור, השלב הראשון בדרך כלל כולל עיבוד מקדים של המידע. במקרה של טקסט חופשי, יכול להיות שהפעולה תהיה מינימלית, כמו טיוב בסיסי של נתונים. עם זאת, כשמדובר במסמכים גדולים יותר או בתוכן מורכב יותר, שלב חיוני הוא חלוקה לחלקים. חלוקה לחלקים קטנים היא תהליך של פירוק חומר המקור ליחידות קטנות ופשוטות יותר. אין אסטרטגיה אופטימלית אחידה לחלוקה למקטעים, והיא תלויה בנתונים ובאפליקציה הספציפיים. פלטפורמות כמו Dataflow מציעות יכולות מובנות לטיפול בצורכי חלוקה מגוונים, וכך מפשטות את שלב העיבוד המקדים החיוני הזה.
יתרונות
היתרונות של סוג האחסון MLTransform:
- ליצור הטמעות שאפשר להשתמש בהן כדי להעביר נתונים למסדי נתונים וקטוריים או כדי להריץ הסקה.
- להפוך את הנתונים בלי לכתוב קוד מורכב או לנהל ספריות בסיסיות.
- אפשר לשרשר ביעילות כמה סוגים של פעולות עיבוד בממשק אחד.
תמיכה ומגבלות
יש הגבלות על המחלקה MLTransform:
- האפשרות הזו זמינה לצינורות שמשתמשים בגרסאות 2.53.0 ואילך של Apache Beam Python SDK.
- בצינורות צריך להשתמש בחלונות ברירת המחדל.
טרנספורמציות של הטמעת טקסט:
- תמיכה ב-Python 3.8, 3.9, 3.10, 3.11 ו-3.12.
- תמיכה בצינורות לעיבוד נתונים באצווה ובסטרימינג.
- תמיכה ב-Vertex AI text-embeddings API וב-Hugging Face Sentence Transformers module.
תרחישים לדוגמה
במחברות לדוגמה אפשר לראות איך משתמשים ב-MLTransform לתרחישי שימוש ספציפיים.
- אני רוצה ליצור הטמעות טקסט עבור מודל LLM באמצעות Vertex AI
- משתמשים במחלקה
MLTransformשל Apache Beam עם Vertex AI text-embeddings API כדי ליצור הטמעות של טקסט. הטמעות טקסט הן דרך לייצג טקסט כווקטורים מספריים, וזה נחוץ להרבה משימות של עיבוד שפה טבעית (NLP). - אני רוצה ליצור הטמעות טקסט עבור מודל שפה גדול (LLM) באמצעות Hugging Face
- שימוש במחלקת Apache Beam
MLTransformעם מודלים של Hugging Face Hub כדי ליצור הטמעות של טקסט. Hugging FaceSentenceTransformersמשתמש ב-Python כדי ליצור הטבעות של משפטים, טקסט ותמונות. - אני רוצה ליצור הטמעות של טקסט ולהטמיע אותן ב-AlloyDB ל-PostgreSQL
- שימוש ב-Apache Beam, במיוחד במחלקה
MLTransformעם מודלים של Hugging Face Hub כדי ליצור הטמעות של טקסט. לאחר מכן, משתמשים ב-VectorDatabaseWriteTransformכדי לטעון את ההטבעות האלה ואת המטא-נתונים המשויכים ל-AlloyDB ל-PostgreSQL. במחברת הזו מוצגות דוגמאות לבנייה של צינורות עיבוד נתונים ב-Beam לעיבוד נתונים באצווה ובסטרימינג, לצורך מילוי של מסד נתונים וקטורי ב-AlloyDB ל-PostgreSQL. הפעולות האלה כוללות טיפול בנתונים ממקורות שונים כמו Pub/Sub או טבלאות קיימות במסד נתונים, יצירת סכימות מותאמות אישית ועדכון נתונים. - אני רוצה ליצור הטבעות טקסט ולייבא אותן ל-BigQuery
- שימוש במחלקת Apache Beam
MLTransformעם מודלים של Hugging Face Hub כדי ליצור הטמעות טקסט מנתוני אפליקציה, כמו קטלוג מוצרים. לצורך זה משתמשים בטרנספורמציהHuggingfaceTextEmbeddingsשל Apache Beam. הטרנספורמציה הזו משתמשת ב-framework SentenceTransformers של Hugging Face, שמספק מודלים ליצירת הטמעה של משפטים וטקסט. ההטמעות שנוצרו והמטא-נתונים שלהן מוזנים ל-BigQuery באמצעות Apache BeamVectorDatabaseWriteTransform. במחברת מוצגים גם חיפושים של דמיון בין וקטורים ב-BigQuery באמצעות טרנספורמציית ההעשרה.
רשימה מלאה של טרנספורמציות זמינה במאמר Transforms במסמכי Apache Beam.
שימוש ב-MLTransform ליצירת הטמעה
כדי להשתמש במחלקה MLTransform כדי לחלק מידע וליצור הטמעות, צריך לכלול את הקוד הבא בצינור העיבוד:
def create_chunk(product: Dict[str, Any]) -> Chunk:
return Chunk(
content=Content(
text=f"{product['name']}: {product['description']}"
),
id=product['id'], # Use product ID as chunk ID
metadata=product, # Store all product info in metadata
)
[...]
with beam.Pipeline() as p:
_ = (
p
| 'Create Products' >> beam.Create(products)
| 'Convert to Chunks' >> beam.Map(create_chunk)
| 'Generate Embeddings' >> MLTransform(
write_artifact_location=tempfile.mkdtemp())
.with_transform(huggingface_embedder)
| 'Write to AlloyDB' >> VectorDatabaseWriteTransform(alloydb_config)
)
בדוגמה הקודמת נוצר צ'אנק אחד לכל רכיב, אבל אפשר גם להשתמש ב-LangChain כדי ליצור צ'אנקים:
splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=20)
provider = beam.ml.rag.chunking.langchain.LangChainChunker(
document_field='content', metadata_fields=[], text_splitter=splitter)
with beam.Pipeline() as p:
_ = (
p
| 'Create Products' >> beam.io.textio.ReadFromText(products)
| 'Convert to Chunks' >> provider.get_ptransform_for_processing()
המאמרים הבאים
- מומלץ לקרוא את פוסט הבלוג "How to enable real time semantic search and RAG applications with Dataflow ML" (איך מפעילים חיפוש סמנטי בזמן אמת ויישומי RAG באמצעות Dataflow ML).
- לפרטים נוספים על
MLTransform, אפשר לעיין במאמר Preprocess data (עיבוד מקדים של נתונים) במסמכי התיעוד של Apache Beam. - דוגמאות נוספות זמינות במאמר
MLTransformבנושא עיבוד נתונים בקטלוג הטרנספורמציות של Apache Beam. - הפעלת notebook אינטראקטיבי ב-Colab.