Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Tokenización, embeddings y vectores, Unidad 5 — De tokens a vectores, 5.1 — One-hot encoding ·

Representación básica

Representación básica: One-hot encoding

Introducción

La representación de texto en formato numérico es una etapa crucial en la transformación del lenguaje a geometría, permitiendo que las máquinas interpreten y procesen información textual. En esta unidad, exploraremos el concepto de one-hot encoding, una técnica sencilla pero fundamental para convertir tokens en representaciones numéricas vectoriales.

One-hot encoding es un método que transforma cada token único en un vector binario de alta dimensión, donde solo un elemento del vector se encuentra en 1 y los demás en 0. Es particularmente útil en tareas donde se requiere distinguir entre diferentes elementos sin asignarles una posición relativa o importancia numérica.

Explicación principal

Conceptos clave

El one-hot encoding se basa en la idea de que cada palabra en un vocabulario se representa como un vector binario. Si consideramos un vocabulario con \( n \) palabras, el vector resultante tendrá \( n \) dimensiones, donde solo una dimensión será 1 y las demás serán 0.

Ejemplo práctico

Supongamos que tenemos un vocabulario de 5 palabras: "apple", "banana", "cherry", "date" y "elderberry". Podemos representar cada palabra en uno-hot encoding como sigue:

  • apple: [1, 0, 0, 0, 0]
  • banana: [0, 1, 0, 0, 0]
  • cherry: [0, 0, 1, 0, 0]
  • date: [0, 0, 0, 1, 0]
  • elderberry: [0, 0, 0, 0, 1]

Ejemplo de código

A continuación, un ejemplo en Python utilizando la biblioteca pandas para generar one-hot encoding:

import pandas as pd

# Crear DataFrame con tokens
data = {'tokens': ['apple', 'banana', 'cherry']}
df = pd.DataFrame(data)

# Aplicar one-hot encoding usando get_dummies
one_hot_encoded = pd.get_dummies(df['tokens'])

print(one_hot_encoded)

Este código generará un DataFrame donde cada columna representa una de las palabras en el vocabulario, y los valores son 1 si la palabra está presente en la fila correspondiente y 0 en caso contrario.

Errores típicos / trampas

El one-hot encoding es simple pero tiene algunas limitaciones importantes a tener en cuenta:

Trampa 1: Alta dimensionalidad

Cada nueva palabra única en el vocabulario aumenta la dimensión del vector, lo que puede llevar a un espacio de alta dimensión. Esto se conoce como "curse of dimensionality" y puede dificultar el procesamiento.

# Ejemplo de alta dimensionalidad
vocabulary = ["apple", "banana", "cherry", "date", "elderberry", "fig"]
df_high_dim = pd.get_dummies(vocabulary)
print(df_high_dim)

Trampa 2: Falta de interpretación geométrica

One-hot encoding no proporciona ninguna información sobre las relaciones entre los términos. Por ejemplo, "apple" y "banana" están separados por una distancia de un solo bit en el espacio vectorial.

# Distancia en one-hot encoding
import numpy as np

vector1 = df_high_dim.loc['apple'].values
vector2 = df_high_dim.loc['banana'].values
distance = np.linalg.norm(vector1 - vector2)
print(f"Distancia entre 'apple' y 'banana': {distance}")

Trampa 3: Sobreajuste y mala generalización

One-hot encoding no se adapta a nuevos términos que no están presentes en el vocabulario de entrenamiento. Esto puede causar problemas de sobreajuste si los datos de prueba contienen palabras nuevas.

# Ejemplo de sobreajuste
new_word = "grape"
try:
    one_hot_encoded.loc[new_word]
except KeyError as e:
    print(f"Error: {e}")

Checklist accionable

  1. Verificar el tamaño del vocabulario: Asegúrate de que el tamaño del vocabulario no es excesivamente grande.
  2. Generar one-hot encoding adecuadamente: Utiliza las funciones proporcionadas por bibliotecas como pandas o scikit-learn.
  3. Interpretar correctamente la distancia entre vectores: Entiende que los ceros en el vector representan la ausencia de la palabra.
  4. Tratar nuevas palabras con cuidado: Implementa manejo adecuado para palabras no vistas durante el entrenamiento.
  5. Monitorear el rendimiento: Evalúa regularmente cómo el one-hot encoding afecta el rendimiento del modelo.

Siguientes pasos

  • Avanzar a representaciones distribuidas: Explora técnicas como Word2Vec o GloVe, que pueden capturar relaciones semánticas entre palabras.
  • Aprender sobre embeddings contextuales: Investiga modelos como BERT, que proporcionan vectores de palabras dependiendo del contexto en el que se utilizan.

Siguiendo estos pasos y teniendo en cuenta las trampas mencionadas, podrás implementar one-hot encoding de manera efectiva en tus proyectos de procesamiento de lenguaje natural.

Contacto

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