Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

NLP desde cero, Unidad 5 — Representación numérica del texto, 5.2 — TF-IDF ·

Intuición estadística

Intuición estadística

Introducción

El TF-IDF es una técnica fundamental en el procesamiento del lenguaje natural (NLP) que se utiliza para medir la importancia de una palabra en un documento. Es especialmente útil porque proporciona una forma matemática clara y comprensible de evaluar cuánto contribuye cada palabra a la temática de un documento. En este artículo, exploraremos la intuición estadística detrás del TF-IDF, cómo se calcula, sus aplicaciones y algunos errores comunes para evitar.

Explicación principal

Conceptos clave

TF (Term Frequency): Se refiere al número de veces que una palabra aparece en un documento. Es una medida simple pero efectiva de cuánto "importancia" tiene la palabra en ese contexto.

IDF (Inverse Document Frequency): Se calcula basándose en cuántas veces aparece una palabra en todo el corpus. Una palabra con IDFs alto es rara en todo el corpus, mientras que una palabra común tendrá un valor bajo de IDF.

Cálculo del TF-IDF

La fórmula general para calcular el TF-IDF es: \[ \text{TF-IDF}(t,d,D) = \text{TF}(t,d) \times \text{IDF}(t, D) \]

Donde:

  • \( t \) es la palabra.
  • \( d \) es un documento en particular.
  • \( D \) es el conjunto de todos los documentos.

\[ \text{TF}(t,d) = \frac{\text{número de veces que aparece } t \text{ en } d}{\text{longitud total del documento } d} \]

\[ \text{IDF}(t, D) = \log(\frac{\text{número total de documentos}}{\text{número de documentos con } t}) \]

Ejemplo práctico

Supongamos que tenemos un corpus con 10 documentos y queremos calcular el TF-IDF para la palabra "Python":

| Documento | Contenido | |-----------|----------| | Doc1 | Aprende Python en comoprogramar.es... | | Doc2 | Programación en Java... | | ... | ... | | Doc10 | Trabaja con Python... |

  • TF: Para "Python" en Doc1, TF("Python", Doc1) = 3 / 58 (si la longitud total del documento es 58).
  • IDF: Si "Python" aparece solo en Doc1 y Doc4, entonces \( \text{IDF}("Python", D) = \log(\frac{10}{2}) \).

La matriz TF-IDF quedaría algo así:

| Documento | Python | |-----------|--------| | Doc1 | 3/58 × log(5) ≈ 0.094 | | Doc2 | 0 | | ... | ... | | Doc10 | 2/60 × log(5) ≈ 0.076 |

Bloque de código

import math
from collections import Counter

def tf(word, doc):
    return (doc.count(word)) / len(doc)

def n_containing(word, corpus):
    return sum(1 for doc in corpus if word in doc)

def idf(word, corpus):
    return math.log(len(corpus) / (1 + n_containing(word, corpus)))

def tfidf(word, doc, corpus):
    return (tf(word, doc) * idf(word, corpus))

# Ejemplo de uso
corpus = ["Aprende Python en comoprogramar.es...",
          "Programación en Java...",
          "Cursos avanzados de Python",
          "Python es un lenguaje multiparadigma"]

doc1 = "Aprende Python en comoprogramar.es..."
print(tfidf("Python", doc1, corpus))

Errores típicos / trampas

1. Falta de normalización

No normalizar las palabras puede afectar la precisión del TF-IDF. Por ejemplo, "python" y "PYTHON" no deben considerarse diferentes.

# Ejemplo incorrecto
doc2 = "Programación en Java..."
print(tfidf("Python", doc1 + doc2, corpus))

2. Ignorar el contexto

El TF-IDF no tiene en cuenta el contexto de una palabra. Por ejemplo, la frecuencia de palabras como "la" y "y" puede ser alta pero innecesaria.

# Ejemplo incorrecto
print(tfidf("la", doc1, corpus))

3. Olvidar considerar el tamaño del documento

Documentos más largos tienden a tener términos con mayor TF-IDF, lo cual no necesariamente significa que sean más relevantes.

# Ejemplo incorrecto
doc_long = "Aprende Python en comoprogramar.es... Repite esto varias veces."
print(tfidf("Python", doc_long, corpus))

Checklist accionable

  1. Normalizar las palabras: Convierte todo a minúsculas para evitar duplicados.
  2. Seleccionar términos relevantes: Excluye stop-words (palabras como "la", "y") que no aportan significado.
  3. Considera el tamaño del documento: Usa TF-IDF en lugar de solo TF si los documentos tienen diferentes longitudes.
  4. Calcular IDF correctamente: Asegúrate de que se cuenta el número correcto de documentos en D.
  5. Usar un corpus representativo: El TF-IDF es mejor cuando refleja bien la distribución del lenguaje.

Cierre

El TF-IDF es una herramienta poderosa para medir la importancia de las palabras en documentos, pero también tiene sus limitaciones y trampas a evitar. Al seguir los consejos proporcionados y tener en cuenta el contexto adecuado, puedes usar TF-IDF eficazmente para mejorar tus análisis de texto.

Siguientes pasos

  • Explora Word Embeddings: Métodos como Word2Vec o FastText pueden ofrecer una representación más semánticamente significativa de las palabras.
  • Utiliza modelos más avanzados: Transformadores como BERT pueden capturar mejor el contexto del lenguaje, superando a TF-IDF en muchos casos.
  • Aprende Deep Learning para NLP: Modelos como RNN y LSTM pueden ser útiles para tareas que requieren un entendimiento profundo del contexto.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).