Mateo-Rua's picture
Update README.md
a367fcf verified
|
Raw
History Blame Contribute Delete
4.54 kB
---
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)