O mundo da IA está se movendo a um ritmo empolgante, e as incorporações estão no centro de muitos aplicativos modernos, como a pesquisa semântica e a geração aumentada via recuperação (RAG, na sigla em inglês). Hoje, temos o prazer de mostrar como você pode aproveitar o novo modelo de incorporação aberto com 308 milhões de parâmetros e altamente eficiente do Google, o EmbeddingGemma. Embora seu tamanho pequeno o torne perfeito para aplicativos no dispositivo, essa mesma eficiência abre novas e poderosas possibilidades para a nuvem, especialmente quando se trata da personalização via ajuste. Mostraremos como usar o EmbeddingGemma com o Dataflow do Google Cloud e com bancos de dados vetoriais, como o AlloyDB, para criar um pipeline de ingestão de conhecimento escalonável e em tempo real.
As incorporações são representações vetoriais numéricas de dados que capturam as relações subjacentes entre palavras e conceitos. Elas são a pedra angular de aplicativos que precisam entender informações em um nível conceitual mais profundo, desde a pesquisa de documentos semanticamente semelhantes a uma consulta até o fornecimento de contexto relevante para modelos de linguagem grandes (LLMs) em sistemas de RAG.
Para habilitar esses aplicativos, você precisa de um pipeline robusto de ingestão de conhecimento que possa processar dados não estruturados, convertê-los em incorporações e carregá-los em um banco de dados vetorial especializado. É aqui que o Dataflow pode ajudar, encapsulando essas etapas em um único pipeline gerenciado.
O uso de um modelo aberto pequeno e altamente eficiente, como o EmbeddingGemma, no centro do pipeline torna todo o processo independente, o que pode simplificar o gerenciamento porque elimina a necessidade de chamadas de rede externas para outros serviços na etapa de incorporação. Por ser um modelo aberto, ele pode ser hospedado inteiramente dentro do Dataflow. Isso ajuda a processar conjuntos de dados privados em larga escala com segurança.
Além desses benefícios operacionais, o EmbeddingGemma também é ajustável, permitindo que você o personalize para suas necessidades específicas de incorporação de dados; você pode encontrar um exemplo de ajuste aqui. A qualidade é tão importante quanto a escalonabilidade, e o EmbeddingGemma também se destaca nisso. Ele é o modelo de incorporação multilíngue somente de texto com a mais alta classificação na categoria de até 500 milhões de parâmetros no placar Multilingual do Massive Text Embedding Benchmark (MTEB).
O Dataflow é uma plataforma de escalonamento automático totalmente gerenciada para processamento unificado de dados em lotes e streaming. Ao incluir um modelo como o EmbeddingGemma diretamente em um pipeline do Dataflow, você tem várias vantagens:
Um pipeline de ingestão de conhecimento típico consiste em quatro fases: leitura de uma origem de dados, pré-processamento dos dados, geração de incorporações e gravação em um banco de dados vetorial.
Vejamos como usar o novo modelo Gemma para gerar incorporações de texto. Este exemplo, adaptado do notebook do EmbeddingGemma, mostra como configurar o MLTransform
para usar um modelo do Hugging Face e, em seguida, gravar os resultados no AlloyDB, onde as incorporações podem ser usadas para a pesquisa semântica. Bancos de dados como o AlloyDB nos permitem combinar essa pesquisa semântica com uma pesquisa estruturada adicional para fornecer resultados relevantes e de alta qualidade.
Primeiro, definimos o nome do modelo que vamos usar para as incorporações, juntamente com uma transformação que especifica as colunas que queremos incorporar e o tipo de modelo que estamos usando.
import tempfile
import apache_beam as beam
from apache_beam.ml.transforms.base import MLTransform
from apache_beam.ml.transforms.embeddings.huggingface import SentenceTransformerEmbeddings
# The new Gemma model for generating embeddings. You can replace this with your fine tuned model just by changing this path.
text_embedding_model_name = 'google/embeddinggemma-300m'
# Define the embedding transform with our Gemma model
embedding_transform = SentenceTransformerEmbeddings(
model_name=text_embedding_model_name, columns=['x']
)
Depois de gerarmos as incorporações, canalizamos a saída diretamente para nosso coletor, que geralmente é um banco de dados vetorial. Para gravar essas incorporações, definimos um VectorDatabaseWriteTransform
orientado por configuração.
Neste caso, usamos o AlloyDB como coletor, transmitindo um objeto AlloyDBVectorWriterConfig
. O Dataflow dá suporte à gravação em muitos bancos de dados vetoriais, incluindo AlloyDB, CloudSQL e BigQuery, usando apenas objetos de configuração.
# Define the config used to write to AlloyDB
alloydb_writer_config = AlloyDBVectorWriterConfig(
connection_config=connection_config,
table_name=table_name
)
# Build and run the pipeline
with beam.Pipeline() as pipeline:
_ = (
pipeline
| "CreateData" >> beam.Create(content) # In production could be replaced by a transform to read from any source
# MLTransform generates the embeddings
| "Generate Embeddings" >> MLTransform(
write_artifact_location=tempfile.mkdtemp()
).with_transform(embedding_transform)
# The output is written to our vector database
| 'Write to AlloyDB' >> VectorDatabaseWriteTransform(alloydb_writer_config)
)
Esse padrão simples, mas poderoso, permite processar conjuntos de dados enormes em paralelo, gerar incorporações com o EmbeddingGemma — 308 milhões de parâmetros — e preencher o banco de dados vetorial, tudo em um único pipeline escalonável, econômico e gerenciado.
Ao combinar os modelos Gemma mais recentes com a escalonabilidade do Dataflow e o poder de pesquisa vetorial dos bancos de dados vetoriais, como o AlloyDB, você pode criar aplicativos de IA sofisticados e de última geração com facilidade.
Para saber mais, explore a documentação do Dataflow ML, especialmente a documentação sobre preparação de dados e geração de incorporações. Você também pode experimentar um pipeline simples usando o EmbeddingGemma seguindo este notebook.
Para aplicativos de larga escala do lado do servidor, explore nosso modelo de incorporação do Gemini de última geração por meio da API Gemini para obter o máximo de desempenho e capacidade.
Para saber mais sobre o EmbeddingGemma, leia nosso anúncio de lançamento no blog do Google for Developers.