Embeddings de textos
labdados.embeddings transforma cada texto em um vetor numérico. Textos de sentido parecido ficam com vetores próximos — base para busca semântica, agrupamento e classificação. Aceita .txt, .md, .docx, .csv e .xlsx (em CSV/XLSX, cada linha vira um documento).
Receita 1 — Planilha de ementas, na nuvem
import os
import labdados
df = labdados.embeddings(
"ementas.csv",
coluna_texto="ementa",
api_key=os.environ["LABDADOS_API_KEY"],
modelo="text-embedding-3-small", # padrão, o mais barato
saida="vetores/",
dataframe=True,
)
df[["arquivo", "doc_id", "chunk", "texto"]].head()
# vetores/embeddings.parquet, vetores/chunks.csv, vetores/_reproducibilidade/Textos longos são cortados em trechos de até max_chars caracteres (padrão 2.000, ~500 tokens), com sobreposicao caracteres repetidos entre trechos vizinhos. Cada trecho vira uma linha do parquet.
Receita 2 — Busca semântica
import numpy as np
v = np.array(df["embedding"].tolist())
v /= np.linalg.norm(v, axis=1, keepdims=True)
consulta = labdados.embeddings("consulta.txt", dataframe=True) # mesmo modelo!
q = np.array(consulta["embedding"][0])
q /= np.linalg.norm(q)
df["similaridade"] = v @ q
df.sort_values("similaridade", ascending=False).head(5)[["doc_id", "texto", "similaridade"]]
Aviso
Use sempre o mesmo modelo para os textos que serão comparados — vetores de modelos diferentes não são comparáveis.
Receita 3 — Local, sem API key
pip install "labdados[embeddings-local]"df = labdados.embeddings("textos/", local=True, dataframe=True)
# sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (384 dims, CPU)Também dá para usar um servidor OpenAI-compatível (Ollama, OpenAI, Azure) com base_url_local e modelo_local.
Modelos na nuvem
modelo |
Dimensões | US$ / 1M tokens | Observação |
|---|---|---|---|
text-embedding-3-small (padrão) |
1536 | 0,02 | Barato e bom para busca |
text-embedding-3-large |
3072 | 0,13 | Mais preciso, vetores maiores |
embed-v-4-0 |
1536 | 0,12 | Cohere, multilíngue, aceita textos longos |
Cohere-embed-v3-multilingual |
1024 | 0,10 | Cohere, multilíngue (trechos de até ~512 tokens) |
Parâmetros principais
| Parâmetro | Default | Quando mexer |
|---|---|---|
modelo |
"text-embedding-3-small" |
Ver tabela acima |
coluna_texto |
"" |
Nome da coluna do CSV/XLSX com o texto |
max_chars |
2000 |
Trechos maiores para documentos curtos e coesos |
sobreposicao |
200 |
0 para trechos independentes |
dataframe |
False |
True para receber um pandas.DataFrame |