TF-IDF (en inglés "Term Frequency – Inverse Document Frequency") es una técnica utilizada en procesamiento de lenguaje natural (NLP) y recuperación de información (IR) para representar documentos como vectores numéricos. Está diseñada para reflejar la importancia de una palabra en un documento en relación con un conjunto de documentos o corpus.
Sus dos componentes son:
Frecuencia de Término (TF):
Inversa de la Frecuencia del Documento (IDF):
El valor TF-IDF para un término en un documento es simplemente el producto de TF e IDF:
TF-IDF(t,d,D)=TF(t,d)×IDF(t,D)¿Por qué es útil? Palabras como "y", "de", "en", etc., aparecerán con mucha frecuencia en muchos documentos (alto TF), pero no son únicas o relevantes para un documento en particular, por lo que su IDF será bajo, reduciendo su relevancia. Por otro lado, si una palabra aparece frecuentemente en un documento, pero raramente en otros documentos del corpus, tendrá un alto valor TF-IDF, indicando que es una palabra clave importante para ese documento en particular.
En la práctica, TF-IDF es utilizado para tareas como la recuperación de información (por ejemplo, motores de búsqueda) y clasificación de documentos, entre otras. Permite que se pueda hacer una distinción entre los términos comunes y los términos relevantes en grandes conjuntos de datos textuales.
Veamos un ejemplo de cómo calcular el valor TF-IDF para una palabra dentro de un documento en un corpus de documentos sencillo:
import math
# Ejemplo de documentos
documents = [
"El sol brilla en el cielo",
"La lluvia cae sobre la ciudad",
"El gato duerme en el sofá"
]
# Calcular TF-IDF
def tf_idf(term, document, documents):
# TF
words = document.split() # Dividir el documento en palabras
tf = words.count(term) / len(words) # Calcular TF
print("TF:", tf)
# IDF
n_documents_with_term = 0 # Contador de documentos con el término
for document in documents:
words = document.split() # Dividir el documento en palabras
if term in words: # Si el término está en el documento
n_documents_with_term += 1 # Incrementar el contador
if n_documents_with_term != 0:
idf = math.log(len(documents) / n_documents_with_term) # Calcular IDF
else:
idf = 0
print("IDF:", idf)
# TF-IDF
tf_idf = tf * idf # Calcular TF-IDF
return tf_idf
tf_idf("gato", documents[1], documents)
TF: 0.0 IDF: 1.0986122886681098
0.0
PageRank es un algoritmo de clasificación de páginas web que fue introducido por Larry Page y Sergey Brin, los cofundadores de Google, mientras estaban en la Universidad de Stanford. Se convirtió en la base de la tecnología de búsqueda inicial de Google y representa uno de los primeros esfuerzos efectivos para clasificar y ordenar páginas web basadas en su importancia y relevancia, más allá de solo coincidencias de palabras clave.
El principio detrás de PageRank es que la importancia de una página web puede ser determinada por las páginas que enlazan a ella.
Vemos el concepto básico y cómo funciona:
Modelo de Navegación Aleatoria: PageRank se basa en la idea de un "navegante aleatorio". Imagina que un usuario comienza en una página web y selecciona aleatoriamente enlaces para saltar a otras páginas. Eventualmente, este usuario visitaría más a menudo algunas páginas que otras, basado en la cantidad y calidad de los enlaces a esas páginas. PageRank intenta modelar esta probabilidad.
Enlaces como Votos: Cada enlace de una página (A) a una página (B) se considera como un "voto" de (A) a (B). Sin embargo, no todos los votos tienen el mismo peso. Los votos de sitios que son ellos mismos "importantes" tienen más peso y contribuyen más a la clasificación de las páginas enlazadas.
Fórmula Básica: La fórmula básica para el PageRank de una página (P) es: PR(P)=1−dN+dn∑i=1PR(Pi)L(Pi)
Iteración: El algoritmo se inicia asignando a cada página un PageRank inicial, a menudo 1/N donde N es el número total de páginas. Luego, se aplica repetidamente la fórmula de PageRank a través de múltiples iteraciones hasta que los valores de PageRank converjan (es decir, no cambien significativamente entre iteraciones).
Teletransportación: El término 1−dN en la fórmula anterior representa la probabilidad de que el "navegante aleatorio" salte a una página al azar en lugar de seguir un enlace. Esto ayuda a asegurar que todas las páginas tengan un PageRank mínimo y soluciona el problema de "callejones sin salida" (páginas sin enlaces salientes).
Manipulaciones y Evolución: Dado que PageRank jugó un papel importante en la clasificación de resultados de búsqueda, hubo muchos intentos para manipular los rankings (por ejemplo, creando granjas de enlaces). Google ha implementado muchas actualizaciones y modificaciones para combatir el spam y asegurar resultados de calidad. Si bien PageRank es solo uno de los muchos algoritmos y señales que Google utiliza ahora, su introducción marcó un punto de inflexión en la búsqueda en la web.
Es importante señalar que, aunque la idea central de PageRank es simple, en la práctica, implementar y escalar el algoritmo para la vasta web es un desafío técnico considerable.