Auf dieser Seite wird erläutert, warum und wie Sie mit dem Feature MLTransform
Daten für das Trainieren von ML-Modellen vorbereiten. Auf dieser Seite wird beschrieben, wie Sie Daten verarbeiten, indem Sie mit MLTransform
Einbettungen generieren.
Durch die Kombination mehrerer Datenverarbeitungstransformationen in einer Klasse optimiert MLTransform
den Prozess der Anwendung von Apache Beam ML-Datenverarbeitungsabläufe auf Ihren Workflow.
MLTransform
im Vorverarbeitungsschritt des Workflows.
Einbettungen – Übersicht
Einbettungen sind für moderne Anwendungen für die semantische Suche und Retrieval-Augmented Generation (RAG) unerlässlich. Mithilfe von Einbettungen können Systeme Informationen auf einer tieferen, konzeptionelleren Ebene verstehen und mit ihnen interagieren. Bei der semantischen Suche werden Anfragen und Dokumente mithilfe von Einbettungen in Vektordarstellungen umgewandelt. Diese Darstellungen erfassen die zugrunde liegende Bedeutung und die Beziehungen. So können Sie relevante Ergebnisse finden, auch wenn die Keywords nicht direkt übereinstimmen. Das ist ein großer Fortschritt gegenüber der standardmäßigen keywordbasierten Suche. Sie können auch Embeddings für Produktempfehlungen verwenden. Dazu gehören multimodale Suchanfragen mit Bildern und Text, Log-Analysen und Aufgaben wie die Deduplizierung.
Bei RAG spielen Einbettungen eine entscheidende Rolle beim Abrufen des relevantesten Kontexts aus einer Wissensdatenbank, um die Antworten von Large Language Models (LLMs) zu fundieren. Durch das Einbetten sowohl der Nutzeranfrage als auch der Informationsblöcke in der Wissensdatenbank können RAG-Systeme die semantisch ähnlichsten Teile effizient identifizieren und abrufen. Durch diesen semantischen Abgleich wird sichergestellt, 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 geht es darum, wie Wissen aufgenommen und verarbeitet wird. Die Aufnahme kann entweder im Batch- oder im Streaming-Verfahren erfolgen. Die Quelle dieses Wissens kann sehr unterschiedlich sein. Diese Informationen können beispielsweise aus Dateien stammen, die in Cloud Storage gespeichert sind, oder aus Streamingquellen wie Pub/Sub oder Google Cloud Managed Service for Apache Kafka.
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 das Aufteilen in Chunks ein wichtiger Schritt. Beim Chunking 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 Anforderungen an die Aufteilung in Chunks, 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 Standardfenster 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 Vertex AI Text-Einbettungs-API und das Hugging Face Sentence Transformers-Modul.
Anwendungsfälle
Die Beispiel-Notebooks zeigen, wie MLTransform
für bestimmte Anwendungsfälle verwendet wird.
- Ich möchte Texteinbettungen für mein LLM mit Vertex AI generieren
- Verwenden Sie die Apache Beam-Klasse
MLTransform
mit der Vertex AI Text-Einbettungs-API, 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
MLTransform
mit Hugging Face Hub-Modellen, um Texteinbettungen zu generieren. Das Hugging Face-FrameworkSentenceTransformers
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
MLTransform
mit Hugging Face Hub-Modellen, um Texteinbettungen zu generieren. Verwenden Sie dannVectorDatabaseWriteTransform
, um diese Einbettungen und zugehörigen Metadaten in AlloyDB for PostgreSQL zu laden. In diesem Notebook wird gezeigt, wie skalierbare Batch- und Streaming-Beam-Datenpipelines erstellt werden, um eine AlloyDB for PostgreSQL-Vektordatenbank zu füllen. Dazu gehört die Verarbeitung von Daten aus verschiedenen Quellen wie Pub/Sub oder vorhandenen Datenbanktabellen, die Erstellung benutzerdefinierter Schemas und die Aktualisierung von Daten. - Ich möchte Texteinbettungen generieren und in BigQuery aufnehmen.
- Verwenden Sie die Apache Beam-Klasse
MLTransform
mit Hugging Face Hub-Modellen, um Texteinbettungen aus Anwendungsdaten wie einem Produktkatalog zu generieren. Dazu wird die Apache Beam-TransformationHuggingfaceTextEmbeddings
verwendet. Für diese Transformation wird das Hugging Face-Framework SentenceTransformers verwendet, das Modelle zum Generieren von Satz- und Texteinbettungen bietet. Diese generierten Einbettungen und ihre Metadaten werden dann mit dem Apache Beam-VectorDatabaseWriteTransform
in BigQuery aufgenommen. Das Notebook enthält außerdem Beispiele für die Suche nach Vektorähnlichkeiten in BigQuery mit der Enrichment-Transformation.
Eine vollständige Liste der verfügbaren Transformationen finden Sie unter Transformationen in der Apache Beam-Dokumentation.
MLTransform für die Generierung von Einbettungen verwenden
Wenn Sie die Klasse MLTransform
verwenden möchten, um Informationen in Chunks aufzuteilen 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 ein einzelner Chunk pro Element erstellt. Sie können aber auch LangChain verwenden, um Chunks 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
- Weitere Informationen zu
MLTransform
finden Sie in der Apache Beam-Dokumentation unter Daten vorverarbeiten. - Weitere Beispiele finden Sie im Apache Beam-Transformationskatalog unter MLTransform für die Datenverarbeitung
MLTransform
. - Führen Sie ein Interaktives Notebook in Colab aus.