Auf dieser Seite wird erläutert, warum und wie Sie mit dem MLTransform Feature Daten für das Trainieren von ML-Modellen (Machine Learning) vorbereiten. Insbesondere wird hier beschrieben, wie Sie Daten verarbeiten, indem Sie mit MLTransform Einbettungen generieren.
Durch die Kombination mehrerer Datenverarbeitungstransformationen in einer Klasse optimiert MLTransform die Anwendung von Apache Beam ML-Datenverarbeitungsvorgängen auf Ihren Workflow.

MLTransform im Vorverarbeitungsschritt des Workflows.
Übersicht über Einbettungen
Einbettungen sind für moderne semantische Such- und RAG-Anwendungen (Retrieval-Augmented Generation) unerlässlich. Mit Einbettungen können Systeme Informationen auf einer tieferen, konzeptionelleren Ebene verstehen und mit ihnen interagieren. Bei der semantischen Suche werden Abfragen und Dokumente durch Einbettungen in Vektordarstellungen umgewandelt. Diese Darstellungen erfassen die zugrunde liegende Bedeutung und Beziehungen. So können Sie relevante Ergebnisse finden, auch wenn die Keywords nicht direkt übereinstimmen. Das ist ein deutlicher Fortschritt gegenüber der standardmäßigen keywordbasierten Suche. Sie können Einbettungen auch für Produktempfehlungen verwenden. Dazu gehören multimodale Suchanfragen mit Bildern und Text, Loganalysen und Aufgaben wie die Deduplizierung.
Bei RAG spielen Einbettungen eine entscheidende Rolle beim Abrufen des relevantesten Kontexts aus einer Wissensdatenbank, um die Antworten von LLMs (Large Language Models) zu untermauern. Durch das Einbetten sowohl der Abfrage des Nutzers als auch der Informationsblöcke in der Wissensdatenbank können RAG-Systeme die semantisch ähnlichsten Teile effizient identifizieren und abrufen. Diese semantische Übereinstimmung sorgt dafür, dass das LLM Zugriff auf die erforderlichen Informationen hat, um genaue und informative Antworten zu generieren.
Daten für Einbettungen aufnehmen und verarbeiten

Bei den wichtigsten Anwendungsfällen für Einbettungen ist entscheidend, wie Wissen aufgenommen und verarbeitet wird. Die Aufnahme kann im Batch- oder Streamingmodus erfolgen. Die Quelle dieses Wissens kann sehr unterschiedlich sein. Diese Informationen können beispielsweise aus in Cloud Storage gespeicherten Dateien oder aus Streamingquellen wie Pub/Sub oder Google Cloud Managed Service for Apache Kafka stammen.
Bei Streamingquellen können die Daten selbst der Rohinhalt (z. B. Nur-Text) oder URIs sein, die auf Dokumente verweisen. Unabhängig von der Quelle umfasst die erste Phase in der Regel die Vorverarbeitung der Informationen. Bei Rohtext kann dies minimal sein, z. B. eine einfache Datenbereinigung. Bei größeren Dokumenten oder komplexeren Inhalten ist jedoch ein entscheidender Schritt das Chunking. Dabei wird das Ausgangsmaterial in kleinere, überschaubare Einheiten unterteilt. Die optimale Chunking-Strategie ist nicht standardisiert und hängt von den jeweiligen Daten und der Anwendung ab. Plattformen wie Dataflow bieten integrierte Funktionen für verschiedene Chunking-Anforderungen, wodurch diese wichtige Vorverarbeitungsphase vereinfacht wird.
Vorteile
Die Klasse MLTransform bietet folgende Vorteile:
- Einbettungen erstellen, mit denen Sie Daten in Vektordatenbanken verschieben oder Inferenzen ausführen können.
- Transformieren Sie Daten, ohne komplexen Code zu schreiben oder zugrundeliegende Bibliotheken zu verwalten.
- Mehrere Arten von Verarbeitungsvorgängen lassen sich mit einer Schnittstelle effizient verketten.
Unterstützung und Einschränkungen
Für die Klasse MLTransform gelten die folgenden Einschränkungen:
- Verfügbar für Pipelines, die das Apache Beam Python SDK Version 2.53.0 und höher verwenden.
- Pipelines müssen Standard fenster verwenden.
Texteinbettungstransformationen :
- Unterstützung von Python 3.8, 3.9, 3.10, 3.11 und 3.12.
- Sie unterstützen sowohl Batch- als auch Streamingpipelines.
- Unterstützt die Gemini Enterprise Agent Platform Text-Einbettungs-API und das Hugging Face Sentence Transformers-Modul.
Anwendungsfälle
In den Beispielnotebooks wird gezeigt, wie Sie MLTransform für bestimmte Anwendungsfälle verwenden.
- Ich möchte Texteinbettungen für mein LLM mit Agent Platform Pipelines generieren
- Verwenden Sie die Apache Beam-Klasse
MLTransformmit der Text-Einbettungs-API von Agent Platform Pipelines , um Texteinbettungen zu generieren. Texteinbettungen sind eine Möglichkeit, Text als numerische Vektoren darzustellen, was für viele NLP-Aufgaben (Natural Language Processing) erforderlich ist. - Ich möchte mithilfe von Hugging Face Texteinbettungen für mein LLM generieren
- Verwenden Sie die Apache Beam-Klasse
MLTransformmit Hugging Face Hub-Modellen, um Texteinbettungen zu generieren. Das Hugging FaceSentenceTransformers-Framework verwendet Python, um Satz-, Text- und Bildeinbettungen zu generieren. - Ich möchte Texteinbettungen generieren und in AlloyDB for PostgreSQL aufnehmen
- Verwenden Sie Apache Beam, insbesondere die Klasse
MLTransformmit Hugging Face Hub-Modellen, um Texteinbettungen zu generieren. Verwenden Sie dannVectorDatabaseWriteTransform, um diese Einbettungen und die zugehörigen Metadaten in AlloyDB for PostgreSQL zu laden. In diesem Notebook wird gezeigt, wie Sie skalierbare Batch- und Streaming-Beam-Datenpipelines erstellen, um eine AlloyDB for PostgreSQL-Vektordatenbank zu füllen. Dazu gehören die Verarbeitung von Daten aus verschiedenen Quellen wie Pub/Sub oder vorhandenen Datenbanktabellen, das Erstellen benutzerdefinierter Schemas und das Aktualisieren von Daten. - Ich möchte Texteinbettungen generieren und in BigQuery aufnehmen
- Verwenden Sie die Apache Beam-Klasse
MLTransformmit Hugging Face Hub-Modellen, um Texteinbettungen aus Anwendungsdaten wie einem Produktkatalog zu generieren. Dazu wird die Apache Beam-TransformationHuggingfaceTextEmbeddingsverwendet. Diese Transformation verwendet das Hugging Face-Framework SentenceTransformers, das Modelle zum Generieren von Satz- und Texteinbettungen bietet. Diese generierten Einbettungen und ihre Metadaten werden dann mit der Apache Beam-TransformationVectorDatabaseWriteTransformin BigQuery aufgenommen. Das Notebook zeigt außerdem Vektorähnlichkeitssuchen in BigQuery mit der Anreicherungstransformation.
Eine vollständige Liste der verfügbaren Transformationen finden Sie in der Apache Beam-Dokumentation unter Transformationen.
MLTransform für die Einbettungsgenerierung verwenden
Wenn Sie die Klasse MLTransform verwenden möchten, um Informationen in Blöcke zu unterteilen und Einbettungen zu generieren, fügen Sie den folgenden Code in Ihre Pipeline ein:
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)
)
Im vorherigen Beispiel wird pro Element ein einzelner Block erstellt. Sie können aber auch LangChain verwenden, um Blöcke zu erstellen:
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()
Nächste Schritte
- Lesen Sie den Blogpost "How to enable real time semantic search and RAG applications with Dataflow ML".
- Weitere Informationen zu
MLTransformfinden Sie unter Daten vorverarbeiten in der Apache Beam-Dokumentation. - Weitere Beispiele finden Sie unter
MLTransformfür die Datenverarbeitung im Apache Beam-Transformationskatalog. - Führen Sie ein interaktives Notebook in Colab aus.