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
| 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) |