Sentence Similarity
sentence-transformers
ONNX
Safetensors
Spanish
bert
embeddings
contrastive-learning
e-commerce
semantic-search
product-recommendation
spanish
text-embeddings-inference
Instructions to use Mateo-Rua/embeddings-productos-ecommerce-es with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use Mateo-Rua/embeddings-productos-ecommerce-es with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("Mateo-Rua/embeddings-productos-ecommerce-es") sentences = [ "Esa es una persona feliz", "Ese es un perro feliz", "Esa es una persona muy feliz", "Hoy es un día soleado" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
File size: 4,535 Bytes
2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf 2dd6583 a367fcf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | ---
language:
- es
license: apache-2.0
base_model: intfloat/multilingual-e5-small
pipeline_tag: sentence-similarity
library_name: sentence-transformers
tags:
- sentence-transformers
- embeddings
- contrastive-learning
- e-commerce
- semantic-search
- product-recommendation
- spanish
datasets:
- Mateo-Rua/pares-productos-ecommerce-es
- Mateo-Rua/titulos-productos-ecommerce-es
---
# 🔍 Embeddings de Productos para E-commerce en Español
Modelo de embeddings que convierte **títulos de productos en vectores semánticos de 384 dimensiones**,
de forma que productos similares quedan cerca en el espacio vectorial. Diseñado para los tres
pilares de un marketplace moderno como Mercado Libre, Amazon o Falabella:
- 🔎 **Búsqueda semántica** — encuentra productos por significado, no solo por palabras exactas
- 🛒 **Recomendación** — "quien vio esto, también podría querer estos otros"
- 🔗 **Detección de duplicados y agrupación automática de catálogo**
## 💡 Por qué importa
Una búsqueda tradicional falla si el usuario escribe "zapatillas para correr" y el producto
dice "running Nike": no comparten palabras. Este modelo entiende que **significan lo mismo**.
En pruebas reales agrupó zapatillas de marcas distintas bajo el concepto "correr", reconoció
celulares Samsung sin ver la palabra "celular", y distinguió un teclado gamer (Razer, HyperX)
de un teclado musical — matiz que los modelos genéricos confunden.
## 📊 Rendimiento
Se compararon **dos modelos base multilingües**, cada uno antes y después del fine-tuning con
contrastive learning. Métricas de retrieval sobre un test independiente (¿los vecinos más
cercanos de un producto pertenecen a su misma categoría?):
| Modelo | Recall@1 | Recall@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| MiniLM base | 0.401 | 0.566 | 0.641 | 0.493 |
| MiniLM fine-tuned | 0.734 | 0.853 | 0.890 | 0.796 |
| E5 base | 0.562 | 0.753 | 0.802 | 0.656 |
| **E5 fine-tuned (este modelo)** 🏆 | **0.795** | **0.893** | **0.921** | **0.844** |
**Recall@10 de 0.921:** dado un producto, el 92% de las veces hay uno de su misma categoría
entre sus 10 vecinos más cercanos. El fine-tuning mejoró al modelo base en **+23 puntos** de Recall@1.
## 🚀 Uso
```python
from sentence_transformers import SentenceTransformer
modelo = SentenceTransformer("Mateo-Rua/embeddings-productos-ecommerce-es")
productos = [
"Celular Samsung Galaxy S10 128gb",
"Zapatillas Nike Running Air Max",
"Teclado Mecánico Gamer Razer",
]
embeddings = modelo.encode(productos, normalize_embeddings=True)
# Similitud entre productos
similitudes = modelo.similarity(embeddings, embeddings)
print(similitudes)
```
## 🔧 Cómo se entrenó
- **Modelo base:** [intfloat/multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small)
- **Método:** contrastive learning con `MultipleNegativesRankingLoss` — acerca productos de la
misma categoría y aleja los de categorías distintas (los negativos se generan in-batch)
- **Datos:** [100.000 títulos](https://huggingface.co/datasets/Mateo-Rua/titulos-productos-ecommerce-es)
en español del MeLi Data Challenge 2019, filtrados por calidad (`reliable`), en 682 categorías →
[25.797 pares de entrenamiento](https://huggingface.co/datasets/Mateo-Rua/pares-productos-ecommerce-es)
- **Configuración:** 1 época, batch 64 — suficiente para un salto grande de rendimiento sin
sobreajustar, priorizando la generalización a productos nuevos
## ⚙️ Especificaciones técnicas
- **Tipo:** Sentence Transformer
- **Dimensionalidad de salida:** 384 dimensiones
- **Longitud máxima de secuencia:** 512 tokens
- **Función de similitud:** coseno
- **Modalidad:** texto
```
SentenceTransformer(
(0): Transformer({'architecture': 'BertModel'})
(1): Pooling({'embedding_dimension': 384, 'pooling_mode': 'mean'})
(2): Normalize()
)
```
## ⚠️ Limitaciones
- Optimizado para **títulos cortos de productos** en español; puede rendir distinto en textos largos
- Hereda ambigüedades del catálogo de entrenamiento (términos con doble significado según dominio)
- Datos de 2019: categorías o marcas muy recientes pueden estar subrepresentadas
- Solo español; para portugués se recomienda re-entrenar con datos en ese idioma
## Autor
**Mateo Rúa** — Data Scientist · Medellín, Colombia
[GitHub](https://github.com/Mateo-Rua) · [LinkedIn](https://www.linkedin.com/in/mateo-londono-rua117) · [Hugging Face](https://huggingface.co/Mateo-Rua) |