Questa pagina spiega perché e come utilizzare la funzionalità MLTransform
per preparare
i dati per l'addestramento di modelli di machine learning (ML). Nello specifico, questa pagina
mostra come elaborare i dati generando incorporamenti utilizzando MLTransform
.
Combinando più trasformazioni di elaborazione dei dati in una sola classe, MLTransform
semplifica il processo di applicazione delle operazioni di elaborazione dei dati ML di Apache Beam
al tuo flusso di lavoro.
MLTransform
nel passaggio di pre-elaborazione del flusso di lavoro.
Panoramica degli embedding
Gli incorporamenti sono essenziali per le moderne applicazioni di ricerca semantica e Retrieval Augmented Generation (RAG). Gli embedding consentono ai sistemi di comprendere e interagire con le informazioni a un livello più profondo e concettuale. Nella ricerca semantica, gli embedding trasformano le query e i documenti in rappresentazioni vettoriali. Queste rappresentazioni ne catturano il significato e le relazioni sottostanti. Di conseguenza, puoi trovare risultati pertinenti anche quando le parole chiave non corrispondono direttamente. Si tratta di un passo avanti significativo rispetto alla ricerca standard basata sulle parole chiave. Puoi anche utilizzare gli incorporamenti per i consigli sui prodotti. Sono incluse le ricerche multimodali che utilizzano immagini e testo, l'analisi dei log e attività come la deduplicazione.
All'interno della RAG, gli incorporamenti svolgono un ruolo cruciale nel recupero del contesto più pertinente da una knowledge base per basare le risposte dei modelli linguistici di grandi dimensioni (LLM). Incorporando sia la query dell'utente sia i blocchi di informazioni nella knowledge base, i sistemi RAG possono identificare e recuperare in modo efficiente i contenuti semanticamente più simili. Questa corrispondenza semantica garantisce che l'LLM abbia accesso alle informazioni necessarie per generare risposte accurate e informative.
Importare ed elaborare i dati per le incorporazioni
Per i casi d'uso principali dell'incorporamento, la considerazione chiave è come acquisire ed elaborare le conoscenze. L'importazione può avvenire in batch o in streaming. La fonte di queste conoscenze può variare notevolmente. Ad esempio, queste informazioni possono provenire da file archiviati in Cloud Storage o da origini di streaming come Pub/Sub o Google Cloud Managed Service per Apache Kafka.
Per le origini di streaming, i dati stessi potrebbero essere i contenuti non elaborati (ad esempio, testo normale) o URI che puntano a documenti. Indipendentemente dalla fonte, la prima fase in genere prevede il pretrattamento delle informazioni. Per il testo non formattato, questa operazione potrebbe essere minima, ad esempio una pulizia di base dei dati. Tuttavia, per documenti più grandi o contenuti più complessi, un passaggio fondamentale è la segmentazione. La suddivisione consiste nel suddividere il materiale di origine in unità più piccole e gestibili. La strategia di suddivisione ottimale non è standardizzata e dipende dai dati e dall'applicazione specifici. Piattaforme come Dataflow offrono funzionalità integrate per gestire diverse esigenze di suddivisione in blocchi, semplificando questa fase di pre-elaborazione essenziale.
Vantaggi
La classe MLTransform
offre i seguenti vantaggi:
- Genera embedding che puoi utilizzare per inserire dati in database vettoriali o per eseguire l'inferenza.
- Trasforma i dati senza scrivere codice complesso o gestire le librerie sottostanti.
- Concatenare in modo efficiente più tipi di operazioni di elaborazione con una sola interfaccia.
Supporto e limitazioni
La classe MLTransform
presenta le seguenti limitazioni:
- Disponibile per le pipeline che utilizzano le versioni dell'SDK Apache Beam Python 2.53.0 e successive.
- Le pipeline devono utilizzare finestre predefinite.
Text embedding transforms:
- Supporta Python 3.8, 3.9, 3.10, 3.11 e 3.12.
- Supportano le pipeline sia in batch che in streaming.
- Supporta l'API Vertex AI text-embeddings e il modulo Hugging Face Sentence Transformers.
Casi d'uso
I notebook di esempio mostrano come utilizzare MLTransform
per casi d'uso specifici.
- Voglio generare text embedding per il mio LLM utilizzando Vertex AI
- Utilizza la classe Apache Beam
MLTransform
con l'API Vertex AI text-embeddings per generare text embedding. Gli incorporamenti di testo sono un modo per rappresentare il testo come vettori numerici, il che è necessario per molte attività di elaborazione del linguaggio naturale (NLP). - Voglio generare incorporamenti di testo per il mio LLM utilizzando Hugging Face
- Utilizza la classe
MLTransform
Apache Beam con i modelli di Hugging Face Hub per generare incorporamenti di testo. Il framework Hugging FaceSentenceTransformers
utilizza Python per generare incorporamenti di frasi, testo e immagini. - Voglio generare incorporamenti di testo e importarli in AlloyDB per PostgreSQL
- Utilizza Apache Beam, in particolare la classe
MLTransform
con i modelli Hugging Face Hub per generare incorporamenti di testo. Poi, utilizzaVectorDatabaseWriteTransform
per caricare questi incorporamenti e i metadati associati in AlloyDB per PostgreSQL. Questo blocco note mostra la creazione di pipeline di dati batch e di streaming Beam scalabili per popolare un database vettoriale AlloyDB per PostgreSQL. Ciò include la gestione dei dati provenienti da varie origini, come Pub/Sub o tabelle di database esistenti, la creazione di schemi personalizzati e l'aggiornamento dei dati. - Voglio generare incorporamenti di testo e importarli in BigQuery
- Utilizza la classe
MLTransform
Apache Beam con i modelli di Hugging Face Hub per generare incorporamenti di testo dai dati dell'applicazione, ad esempio un catalogo prodotti. A questo scopo viene utilizzata la trasformazioneHuggingfaceTextEmbeddings
di Apache Beam. Questa trasformazione utilizza il framework SentenceTransformers di Hugging Face, che fornisce modelli per la generazione di incorporamenti di frasi e testi. Questi embedding generati e i relativi metadati vengono poi importati in BigQuery utilizzandoVectorDatabaseWriteTransform
di Apache Beam. Il blocco note mostra ulteriormente le ricerche sulla similarità vettoriale in BigQuery utilizzando la trasformazione di arricchimento.
Per un elenco completo delle trasformazioni disponibili, consulta Trasformazioni nella documentazione di Apache Beam.
Utilizza MLTransform per la generazione di incorporamenti
Per utilizzare la classe MLTransform
per dividere le informazioni in blocchi e generare incorporamenti,
includi il seguente codice nella pipeline:
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)
)
L'esempio precedente crea un singolo chunk per elemento, ma puoi anche utilizzare LangChain per creare i chunk:
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()
Passaggi successivi
- Per maggiori dettagli su
MLTransform
, consulta la sezione Pre-elaborazione dei dati nella documentazione di Apache Beam. - Per altri esempi, consulta
MLTransform
per l'elaborazione dei dati nel catalogo delle trasformazioni di Apache Beam. - Esegui un notebook interattivo in Colab.