15 · Vectores de documento con Word2Vec promediado
Promedia los vectores de palabras de un documento para obtener un solo vector de documento — el embedding de oración más simple que a menudo supera a TF-IDF en corpus pequeños.
Promedia los vectores de palabras de un documento para obtener un solo vector de documento — el 'sentence embedding' más simple que a menudo supera a TF-IDF.
Sin esto:
Los embeddings a nivel de palabra están atascados; necesitas una representación a nivel de DOCUMENTO para alimentar un clasificador.
Los word embeddings son representaciones a nivel de palabra. Un clasificador necesita un vector a nivel de documento — un único vector de tamaño fijo para cada reseña, correo electrónico o artículo. ¿Cómo pasas de una secuencia de longitud variable de vectores de palabras a un solo vector?
El enfoque más simple: promedia todos los vectores de palabras del documento.
def avg_word_vec(tokens, embeddings, vocab_index):
vecs = [embeddings[vocab_index[t]] for t in tokens if t in vocab_index]
return np.mean(vecs, axis=0) if vecs else np.zeros(embedding_dim)
Eso es todo. Recorre los tokens, busca la fila de cada palabra en la matriz de embedding, apila las filas, toma la media por columna. El resultado es un único vector de la misma dimensionalidad que los word embeddings (p. ej. 300-D), sin importar cuántas palabras contenía el documento.
Este vector promediado captura el centro de masa semántico del documento. Una reseña sobre "great food and friendly service" aterrizará en una región diferente del espacio de 300-D que una reseña sobre "terrible quality and broken product".
¿Por qué esto a menudo supera a TF-IDF? TF-IDF es una representación dispersa de coincidencia exacta — si el documento de prueba usa "poor" pero el corpus de entrenamiento usó "terrible", TF-IDF no ve ninguna superposición. El Word2Vec promediado es una representación densa y semántica — "poor" y "terrible" tienen vectores similares (aparecen en contextos similares), por lo que los vectores de documento terminan cercanos aunque los tokens exactos difieran.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
avg-Word2Vec: fortalezas y modos de fallo
Alternativas modernas: SIF, Doc2Vec, Sentence-Transformers (SBERT)
¿Por qué promediar vectores de palabras pierde información?
- avg-Word2Vec colapsa un documento de longitud variable en un vector de tamaño fijo: busca la fila de embedding de cada token, apila, toma la media por columna. Los tokens faltantes se descartan silenciosamente, así que maneja OOV con elegancia con un fallback de cero.
- Promediar pierde el orden de palabras y la negación — 'dog bites man' y 'man bites dog' producen vectores idénticos. Usa esta técnica para tareas donde la bolsa de semántica es suficiente (clasificación de temas, detección de intención, similitud aproximada).
- avg-Word2Vec supera a TF-IDF cuando existe desajuste de vocabulario entre entrenamiento y prueba — las palabras semánticamente similares tienen vectores cercanos, por lo que los vectores de documento se mantienen cercanos incluso si los tokens exactos difieren.
- Ruta de actualización moderna: ponderación SIF para una ligera mejora; sentence-transformers (`paraphrase-MiniLM-L6-v2`) para calidad de vanguardia con cambio mínimo de código.
avg-Word2Vec fue el método estándar de embedding de documentos en pipelines NLP pre-transformer (2014–2018). Todavía aparece en sistemas de producción donde la latencia de inferencia es crítica: una media de numpy simple es órdenes de magnitud más rápida que un forward pass de transformer. La búsqueda semántica antes de las bases de datos vectoriales, el análisis de clústeres de respuestas de encuestas y la deduplicación de documentos todos usaron avg-Word2Vec como capa de representación.
Si lo quitas: Sin avg-Word2Vec, los sentence-transformers y las salidas BERT agrupadas parecen arbitrarios. Todos son variaciones de 'colapsar vectores de token en un único vector de documento' — avg-Word2Vec es la versión más simple de este patrón. Entenderlo desmitifica las estrategias de pooling [CLS], mean-pooling y max-pooling en encoders de transformers modernos.