5 · Perfiles de ítem con TF-IDF
Cuando los ítems se describen con texto o etiquetas, no toda palabra es igual de informativa. TF-IDF reduce el peso de las etiquetas que todos comparten y aumenta el de las raras y distintivas — y luego la similitud coseno encuentra ítems genuinamente similares.
TF-IDF convierte el texto/etiquetas de cada ítem en un vector ponderado: el peso de una etiqueta sube con cuán a menudo aparece en ese ítem (frecuencia de término) y baja con cuántos ítems la contienen (frecuencia inversa de documento). Las etiquetas genéricas que todos comparten obtienen peso casi cero; las raras y distintivas dominan. La similitud coseno sobre estos vectores encuentra ítems verdaderamente similares.
Sin esto:
Usa conteos crudos de palabras y una etiqueta genérica como 'movie' (presente en cada descripción) cuenta tanto como una etiqueta rara y reveladora como 'heist'. Tus similitudes colapsan hacia 'todo es similar' porque las palabras comunes ahogan la señal.
Los one-hots de género son limpios pero gruesos — los ítems reales vienen con texto libre: una sinopsis, una nube de etiquetas, una lista de palabras clave. Para convertir eso en un vector de características necesitas una forma de ponderar cada palabra, porque no todas las palabras llevan igual señal. La palabra 'movie' aparece en la descripción de cada película y no te dice nada; la palabra 'heist' aparece en un puñado y es muy discriminativa.
TF-IDF (Frecuencia de Término × Frecuencia Inversa de Documento) es la ponderación clásica que captura justo esta intuición:
- TF — cuán a menudo aparece un término en este ítem. Más menciones → más relevante para este ítem.
- IDF —
log(N / df), dondeNes el número de ítems ydfes en cuántos ítems aparece el término. Un término en todos los ítems tienedf = N, así queIDF ≈ 0y su peso se aplasta; un término en un solo ítem tiene un IDF grande y conserva su peso.
El producto da a cada (ítem, término) un peso que es alto solo cuando el término es frecuente aquí pero raro en general — el sello de una característica distintiva. Apila estos en una matriz (filas = ítems, columnas = vocabulario) y tienes vectores de contenido ricos. Luego, igual que en la lección anterior, la similitud coseno entre dos vectores de ítem mide cuánto se solapa su vocabulario distintivo — y ordena los ítems más similares para cualquier consulta.
El TfidfVectorizer de scikit-learn hace la tokenización, el conteo y la ponderación IDF en una llamada, y cosine_similarity da la matriz completa de similitud ítem a ítem. Abajo describimos seis películas con cadenas cortas de etiquetas — poniendo deliberadamente la palabra genérica 'movie' en todas — y vemos a TF-IDF quitarle el peso mientras los vecinos de ciencia ficción de una película consulta suben a lo más alto.
Python (in browser)
TfidfVectorizer + cosine_similarity: la etiqueta genérica 'movie' (en cada ítem) obtiene un peso diminuto, así que los verdaderos vecinos de ciencia ficción de la consulta quedan arriba.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Lectura: cómo lo escala un sistema real — stop-words, min_df, n-gramas y un índice cosine NearestNeighbors pre-ajustado para un 'más como esto' rápido.
Una etiqueta aparece en la descripción de CADA ítem. ¿Qué le hace TF-IDF a su peso, y por qué?
- TF-IDF pondera alto un término solo cuando es frecuente en este ítem (TF) pero raro en el catálogo (IDF = log(N/df)).
- Las etiquetas genéricas compartidas por todos los ítems obtienen peso casi cero, así que no dominan la similitud — lo hacen las etiquetas distintivas.
- TfidfVectorizer + cosine_similarity de sklearn convierten texto/etiquetas cortas en vectores de ítem y encuentran los más cercanos para 'más como esto'.
'Porque leíste este artículo', los 'productos relacionados' por etiquetas y las filas de 'más como esto' por sinopsis son todos TF-IDF (o sus sucesores de embeddings) sobre el texto del ítem.
Si lo quitas: Pondera todas las palabras por igual (conteos crudos) y el texto repetido y común domina la similitud, así que cada ítem parece similar a todos los demás — las recomendaciones se vuelven inútiles.