Esta página explica por que motivo e como usar a funcionalidade MLTransform
para preparar os seus dados para a preparação de modelos de aprendizagem automática. Em concreto, esta página
mostra-lhe como processar dados gerando incorporações através da MLTransform
.
Ao combinar várias transformações de processamento de dados numa classe, o MLTransform
simplifica o processo de aplicação de operações de processamento de dados de ML do Apache Beam ao seu fluxo de trabalho.
MLTransform
no passo de pré-processamento do fluxo de trabalho.
Vista geral das incorporações
As incorporações são essenciais para a pesquisa semântica moderna e as aplicações de geração aumentada de recuperação (RAG). As incorporações permitem que os sistemas compreendam e interajam com informações a um nível mais profundo e conceptual. Na pesquisa semântica, as incorporações transformam as consultas e os documentos em representações vetoriais. Estas representações captam o respetivo significado subjacente e relações. Consequentemente, isto permite-lhe encontrar resultados relevantes mesmo quando as palavras-chave não correspondem diretamente. Este é um avanço significativo em relação à pesquisa padrão baseada em palavras-chave. Também pode usar incorporações para recomendações de produtos. Isto inclui pesquisas multimodais que usam imagens e texto, registam estatísticas e para tarefas como a remoção de duplicados.
Na RAG, as incorporações desempenham um papel crucial na obtenção do contexto mais relevante de uma base de conhecimentos para fundamentar as respostas dos modelos de linguagem (conteúdo extenso) (MDIs/CEs). Ao incorporar a consulta do utilizador e os fragmentos de informações na base de conhecimentos, os sistemas RAG podem identificar e obter de forma eficiente as partes semanticamente mais semelhantes. Esta correspondência semântica garante que o GML tem acesso às informações necessárias para gerar respostas precisas e informativas.
Carregue e processe dados para incorporações
Para exemplos de utilização de incorporação essenciais, a principal consideração é como carregar e processar conhecimento. Este carregamento pode ser feito em lote ou por streaming. A origem deste conhecimento pode variar bastante. Por exemplo, estas informações podem ser provenientes de ficheiros armazenados no Cloud Storage ou de origens de streaming, como o Pub/Sub ou o Google Cloud Managed Service para Apache Kafka.
Para origens de streaming, os dados em si podem ser o conteúdo não processado (por exemplo, texto simples) ou URIs que apontam para documentos. Independentemente da origem, a primeira fase envolve normalmente o pré-processamento das informações. Para texto não processado, isto pode ser mínimo, como a limpeza básica de dados. No entanto, para documentos maiores ou conteúdo mais complexo, um passo crucial é a divisão em partes. A segmentação envolve dividir o material de origem em unidades mais pequenas e geríveis. A estratégia de divisão em partes ideal não é padronizada e depende dos dados e da aplicação específicos. As plataformas como o Dataflow oferecem capacidades integradas para processar diversas necessidades de divisão em partes, simplificando esta fase de pré-processamento essencial.
Vantagens
A classe MLTransform
oferece as seguintes vantagens:
- Gere incorporações que pode usar para enviar dados para bases de dados vetoriais ou para executar inferências.
- Transforme os seus dados sem escrever código complexo nem gerir bibliotecas subjacentes.
- Encadeie de forma eficiente vários tipos de operações de processamento com uma interface.
Apoio técnico e limitações
A classe MLTransform
tem as seguintes limitações:
- Disponível para pipelines que usam as versões 2.53.0 e posteriores do SDK Python do Apache Beam.
- Os pipelines têm de usar janelas predefinidas.
Transformações de incorporação de texto:
- Suporte do Python 3.8, 3.9, 3.10, 3.11 e 3.12.
- Suportam pipelines em lote e por streaming.
- Suporte da API Vertex AI text-embeddings e do módulo Hugging Face Sentence Transformers.
Exemplos de utilização
Os blocos de notas de exemplo demonstram como usar MLTransform
para casos de utilização específicos.
- Quero gerar incorporações de texto para o meu MDI/CE usando o Vertex AI
- Use a classe
MLTransform
do Apache Beam com a API Vertex AI text-embeddings para gerar incorporações de texto. As incorporações de texto são uma forma de representar texto como vetores numéricos, o que é necessário para muitas tarefas de processamento de linguagem natural (PNL). - Quero gerar incorporações de texto para o meu MDI/CE usando o Hugging Face
- Use a classe
MLTransform
do Apache Beam com modelos do Hugging Face Hub para gerar incorporações de texto. A framework Hugging FaceSentenceTransformers
usa o Python para gerar incorporações de frases, texto e imagens. - Quero gerar incorporações de texto e carregá-las no AlloyDB para PostgreSQL
- Use o Apache Beam, especificamente a classe
MLTransform
com os modelos do Hugging Face Hub para gerar incorporações de texto. Em seguida, use oVectorDatabaseWriteTransform
para carregar estas incorporações e os metadados associados no AlloyDB para PostgreSQL. Este bloco de notas demonstra a criação de pipelines de dados do Beam escaláveis em lote e por streaming para preencher uma base de dados vetorial do AlloyDB for PostgreSQL. Isto inclui o processamento de dados de várias origens, como o Pub/Sub ou tabelas de bases de dados existentes, a criação de esquemas personalizados e a atualização de dados. - Quero gerar incorporações de texto e carregá-las para o BigQuery
- Use a classe
MLTransform
do Apache Beam com modelos do Hugging Face Hub para gerar incorporações de texto a partir de dados de aplicações, como um catálogo de produtos. A transformaçãoHuggingfaceTextEmbeddings
do Apache Beam é usada para este fim. Esta transformação usa a framework SentenceTransformers da Hugging Face, que fornece modelos para gerar incorporações de frases e texto. Em seguida, estas incorporações geradas e os respetivos metadados são carregados para o BigQuery através do Apache BeamVectorDatabaseWriteTransform
. O bloco de notas demonstra ainda mais as pesquisas de semelhança vetorial no BigQuery através da transformação de enriquecimento.
Para ver uma lista completa das transformações disponíveis, consulte o artigo Transformações na documentação do Apache Beam.
Use o MLTransform para a geração de incorporações
Para usar a classe MLTransform
para dividir as informações em partes e gerar incorporações,
inclua o seguinte código no seu 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)
)
O exemplo anterior cria um único fragmento por elemento, mas também pode usar o LangChain para criar fragmentos:
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()
O que se segue?
- Leia a publicação no blogue "Como ativar a pesquisa semântica em tempo real e as aplicações RAG com o Dataflow ML".
- Para mais detalhes sobre
MLTransform
, consulte Pré-processar dados na documentação do Apache Beam. - Para mais exemplos, consulte
MLTransform
para o processamento de dados no catálogo de transformações do Apache Beam. - Executar um bloco de notas interativo no Colab.