Curso de Matemáticas para IA · Lección 14 de 180

Vectores como datos de IA: cómo las características convierten un documento en números

Aprende a leer vectores fila y columna, a construir a mano y con NumPy un vector de características de un documento y a detectar errores de forma o de orden de características.

Comparte este artículo

“Los modelos de IA usan datos. Los modelos de IA usan vectores.” (traducción) El lector ve una frase. Un modelo numérico necesita un conjunto fijo de posiciones que contengan números. Una codificación sencilla cuenta palabras seleccionadas y produce

[2211].\begin{bmatrix} 2\\ 2\\ 1\\ 1 \end{bmatrix}.

Esos cuatro números no se explican por sí solos. Solo resultan útiles cuando una regla de codificación indica que la posición 1 cuenta ai, la posición 2 cuenta model, la posición 3 cuenta data y la posición 4 cuenta vector. Los números ordenados, junto con el significado de sus coordenadas, forman un vector de características.

Al terminar esta lección podrás leer vectores fila y columna, interpretar sus coordenadas como características, codificar a mano y con NumPy un documento pequeño y diagnosticar código cuyos valores son correctos pero cuyo orden de características o forma del array es incorrecto.

Resultado de aprendizaje: Leer vectores fila y columna e interpretar las coordenadas como características.

Esta lección retoma la Lección 5: índices de tensores para IA. Allí, un índice respondía «¿qué posición?». Aquí, las posiciones viajan juntas como una sola representación. El Mathematics for Machine Learning companion oficial desarrolla la notación de vectores fila y columna en la Sección 2.2. El documento, la regla de codificación, el cálculo, el código, el diagrama y las evaluaciones siguientes son originales.

Un vector necesita valores y significado de coordenadas

El superíndice T\mathsf{T} significa transpuesta: cambia una representación fila por una columna o una columna por una fila. La x\boldsymbol{x} en negrita nombra el vector completo; el símbolo normal xjx_j nombra una coordenada. Así,

x=[x1x2x3x4]yxT=[x1x2x3x4]\boldsymbol{x}=\begin{bmatrix}x_1\\x_2\\x_3\\x_4\end{bmatrix} \quad\text{y}\quad \boldsymbol{x}^{\mathsf{T}}=\begin{bmatrix}x_1&x_2&x_3&x_4\end{bmatrix}

contienen los mismos cuatro valores de coordenadas, pero tienen orientaciones distintas.

En los datos de IA, las coordenadas suelen representar características acordadas y no casillas anónimas. Una característica es una propiedad medible que se entrega a un modelo. Puede ser un recuento de palabras, la intensidad de un píxel, una lectura de temperatura o una señal aprendida. Si fjf_j nombra la característica jj, un codificador ϕ\phi puede asignar un elemento dd a

ϕ(d)=[f1(d)f2(d)⋮fn(d)]∈Rn.\phi(d)= \begin{bmatrix} f_1(d)\\ f_2(d)\\ \vdots\\ f_n(d) \end{bmatrix} \in\mathbb{R}^{n}.

Esta ecuación separa dos trabajos. El codificador decide cómo medir cada característica. El vector conserva las mediciones resultantes en un orden fijo. Cada documento debe usar la misma característica en la misma coordenada para que un modelo posterior pueda comparar o combinar esos valores de forma coherente.

Construir un vector de documento coordenada a coordenada

Codifica este documento:

AI models use data. AI models use vectors.

Usa el vocabulario ordenado

(ai,model,data,vector).(\texttt{ai},\texttt{model},\texttt{data},\texttt{vector}).

Para este ejemplo deliberadamente pequeño, la regla de normalización convierte el texto a minúsculas, elimina la puntuación, cambia models por model y cambia vectors por vector. Ignora use porque esa palabra no tiene coordenada en el vocabulario fijo. Los sistemas de texto reales necesitan un tokenizador y un vocabulario documentados; esta regla de juguete se muestra para que cada recuento pueda auditarse.

Los tokens normalizados son

ai, model, use, data, ai, model, use, vector

Ahora calcula una coordenada cada vez:

x1=count⁡(ai)=2,x2=count⁡(model)=2,x3=count⁡(data)=1,x4=count⁡(vector)=1.\begin{aligned} x_1&=\operatorname{count}(\texttt{ai})=2,\\ x_2&=\operatorname{count}(\texttt{model})=2,\\ x_3&=\operatorname{count}(\texttt{data})=1,\\ x_4&=\operatorname{count}(\texttt{vector})=1. \end{aligned}

Por tanto,

ϕ(d)=[2211]∈R4.\phi(d)= \begin{bmatrix} 2\\2\\1\\1 \end{bmatrix} \in\mathbb{R}^{4}.
Un orden fijo de características convierte cuatro recuentos de tokens con nombre en cuatro coordenadas. Las flechas conservan el contrato entre cada etiqueta y su valor.
Proceso de documento a vector de característicasEl documento AI models use data, AI models use vectors se normaliza y se cuenta según las características ordenadas ai, model, data y vector. El vector columna resultante contiene 2, 2, 1 y 1.1 · DocumentoAI models use data.AI models usevectors.minúsculasmodels → modelvectors → vector2 · Características ordenadas1 · ai22 · model23 · data14 · vector13 · Vector columna2211forma 4 × 1Los valores viajan con sus etiquetas: la coordenada 3 significa “recuento de data”.
Alternativa semántica: características ordenadas y recuentos del documento
CoordenadaCaracterísticaRecuentoSignificado
1ai2El token normalizado ai aparece dos veces.
2model2Las dos apariciones de models se convierten en model.
3data1El token normalizado data aparece una vez.
4vector1El token vectors se convierte en vector.

El diagrama hace visible el contrato de representación: cada recuento sigue la etiqueta de su característica hasta una coordenada. La columna tiene cuatro entradas, así que su forma es 4×14\times1. Sigue representando un documento, no cuatro documentos.

Por qué las coordenadas fijas hacen posible el aprendizaje numérico

Un modelo no puede asociar un comportamiento a la coordenada 3 si para un documento esa coordenada significa data y para otro significa vector. Por eso, un mapa de características fija dos cosas entre ejemplos:

  1. el número de coordenadas; y
  2. la característica asignada a cada coordenada.

Para dos documentos cualesquiera dad_a y dbd_b, el valor en la posición jj debe ser el mismo tipo de medición fjf_j:

ϕ(da)j=fj(da),ϕ(db)j=fj(db).\phi(d_a)_j=f_j(d_a), \qquad \phi(d_b)_j=f_j(d_b).

Este es el mecanismo que hay detrás del conocido software de vectorización de texto. La documentación oficial de scikit-learn CountVectorizer describe un vocabulario como un mapeo de términos a índices de características. Su método transform usa ese vocabulario para crear un array de recuentos documento-término con forma (n_samples, n_features): una fila por documento y una columna por característica del vocabulario.

El vector de recuentos es útil precisamente porque es selectivo. Conserva la frecuencia de las características elegidas. Descarta el orden original de las palabras, los límites entre frases y cualquier token ausente del vocabulario. Los dos documentos siguientes

ai model data
data model ai

se asignan ambos a [1,1,1,0]T[1,1,1,0]^\mathsf{T} con esta codificación. Los vectores iguales significan recuentos conservados iguales, no prosa ni significado iguales.

Fila y columna son formas, no direcciones de lectura

El vector abstracto x\boldsymbol{x} pertenece a R4\mathbb{R}^{4}. Las matemáticas suelen mostrar sus coordenadas como una matriz columna de 4×14\times1:

[2211]∈R4×1.\begin{bmatrix}2\\2\\1\\1\end{bmatrix}\in\mathbb{R}^{4\times1}.

Al transponer esa representación columna se obtiene un vector fila:

[2211]∈R1×4.\begin{bmatrix}2&2&1&1\end{bmatrix}\in\mathbb{R}^{1\times4}.

La primera forma tiene cuatro filas y una columna; la segunda, una fila y cuatro columnas. Ninguna orientación cambia la asignación de coordenadas a características. La primera entrada sigue perteneciendo a ai, la segunda a model, y así sucesivamente.

RepresentaciónForma escritaFormaOrientación
Vector columna[2,2,1,1]T[2,2,1,1]^\mathsf{T}4×14\times1cuatro filas, una columna
Vector fila[2,2,1,1][2,2,1,1]1×41\times4una fila, cuatro columnas
Array NumPy 1-Dnp.array([2, 2, 1, 1])(4,)todavía sin eje de fila/columna

La última línea marca un límite de implementación que conviene recordar. Un array NumPy unidimensional tiene un eje de longitud 4. No es un array fila o columna bidimensional. La documentación oficial de NumPy sobre ndarray define shape como una tupla que contiene el tamaño de cada dimensión del array, mientras que ndim cuenta los ejes. Para shape == (4,) solo hay un eje.

NumPy hace explícita la orientación al añadir un eje

Este ejemplo ejecutable reproduce el cálculo manual:

from collections import Counter

import numpy as np

document = "AI models use data. AI models use vectors."
vocabulary = ("ai", "model", "data", "vector")

raw_tokens = document.lower().replace(".", "").split()
normalization = {"models": "model", "vectors": "vector"}
tokens = [normalization.get(token, token) for token in raw_tokens]
counts = Counter(tokens)

x = np.array([counts[feature] for feature in vocabulary], dtype=np.int64)
column = x.reshape(-1, 1)
row = x.reshape(1, -1)

print("features:", vocabulary)
print("values:", x.tolist())
print("1-D shape:", x.shape)
print("column shape:", column.shape)
print("row shape:", row.shape)
print("x.T shape:", x.T.shape)

La salida verificada es:

features: ('ai', 'model', 'data', 'vector')
values: [2, 2, 1, 1]
1-D shape: (4,)
column shape: (4, 1)
row shape: (1, 4)
x.T shape: (4,)

La documentación oficial de numpy.reshape indica que un reshape compatible devuelve un array con una forma nueva sin cambiar sus datos. Aquí, reshape(-1, 1) pide a NumPy que infiera el número de filas y cree una columna; reshape(1, -1) pide una fila e infiere el número de columnas.

La última salida expone un error frecuente. La documentación oficial de numpy.transpose especifica que transponer un array 1-D devuelve una vista sin cambios. No existe un segundo eje que intercambiar. Usa x[:, np.newaxis] o x.reshape(-1, 1) para crear la forma (4, 1), y usa x[np.newaxis, :] o x.reshape(1, -1) para crear la forma (1, 4).

Tres arrays aparentemente correctos pueden describir datos distintos

La forma es solo la mitad del contrato. El orden de las características aporta la otra mitad. Supón que un pipeline declara

F=(ai,model,data,vector)F=(\texttt{ai},\texttt{model},\texttt{data},\texttt{vector})

y guarda [2,2,1,1]T[2,2,1,1]^\mathsf{T}. Otro pipeline declara

G=(data,vector,ai,model)G=(\texttt{data},\texttt{vector},\texttt{ai},\texttt{model})

pero pasa la misma secuencia numérica sin reordenarla. Bajo GG, la primera coordenada afirma que data aparece dos veces, lo cual es falso para el documento. El array tiene la longitud y el dtype esperados, así que la validación de forma por sí sola no detectará el error semántico.

Un cambio correcto de FF a GG debe mover cada valor junto con su etiqueta:

orden de caracterıˊsticas1234Fai:2model:2data:1vector:1Gdata:1vector:1ai:2model:2\begin{array}{c|cccc} \text{orden de características} & 1 & 2 & 3 & 4\\\hline F & \texttt{ai}:2 & \texttt{model}:2 & \texttt{data}:1 & \texttt{vector}:1\\ G & \texttt{data}:1 & \texttt{vector}:1 & \texttt{ai}:2 & \texttt{model}:2 \end{array}

Por tanto, el vector en el orden GG es [1,1,2,2]T[1,1,2,2]^\mathsf{T}.

Otros dos casos límite afinan la definición:

  • Si un documento no contiene ninguno de los términos del vocabulario, se asigna al vector cero [0,0,0,0]T[0,0,0,0]^\mathsf{T}. Su dimensión sigue siendo 4; los ceros son valores de coordenadas, no coordenadas ausentes.
  • Cuando n=1n=1, un vector fila y uno columna tienen ambos forma 1×11\times1 después de transponer. El caso de una sola coordenada oculta la diferencia de orientación visible, por lo que es un mal ejemplo para depurar formas.

La representación está lista solo cuando coinciden los valores, las etiquetas de características y la forma esperada. La Lección 15 sumará vectores componente a componente. Esa operación tendrá sentido porque la coordenada jj de ambas entradas se refiere al mismo tipo de señal: el invariante establecido aquí.

Comprueba tu comprensión

Pregunta 1

Sea x = [4, 0, −2]ᵀ, con características ordenadas (clicks, purchases, returns). Indica la dimensión del vector e interpreta cada coordenada.

Mostrar la solución paso a paso

Hay tres coordenadas ordenadas, así que x∈R3\boldsymbol{x}\in\mathbb{R}^{3} y la dimensión del vector es 3.

Relaciona las posiciones con las etiquetas de características en orden:

  1. x1=4x_1=4 significa cuatro clicks;
  2. x2=0x_2=0 significa cero purchases; y
  3. x3=−2x_3=-2 significa que la característica returns tiene valor −2-2 según la codificación indicada.

El tercer valor negativo puede requerir contexto del dominio —podría ser una característica centrada o un cambio neto, en lugar de un recuento bruto—, pero no cambia la dimensión ni el orden de coordenadas del vector.

Pregunta 2

Usando el vocabulario ordenado (ai, model, data, vector), codifica «Data guides a model; data helps AI». Cuenta solo los cuatro términos del vocabulario después de pasar a minúsculas y eliminar la puntuación.

Mostrar la solución paso a paso

Después de pasar a minúsculas y eliminar la puntuación, los tokens normalizados relevantes son

data, model, data, ai

Cuéntalos en el orden del vocabulario, no en el orden del documento:

x1=count⁡(ai)=1,x2=count⁡(model)=1,x3=count⁡(data)=2,x4=count⁡(vector)=0.\begin{aligned} x_1&=\operatorname{count}(\texttt{ai})=1,\\ x_2&=\operatorname{count}(\texttt{model})=1,\\ x_3&=\operatorname{count}(\texttt{data})=2,\\ x_4&=\operatorname{count}(\texttt{vector})=0. \end{aligned}

Por tanto, el vector del documento es x=[1,1,2,0]T\boldsymbol{x}=[1,1,2,0]^\mathsf{T}. El término del vocabulario ausente aporta un valor cero; su coordenada sigue presente.

Pregunta 3

Un vector [3, 1, 0]ᵀ usa el orden de características (cat, dog, bird). Un segundo servicio espera (bird, cat, dog). ¿Qué valores deben enviarse y por qué es incorrecto enviar [3, 1, 0]ᵀ sin cambios?

Mostrar la solución paso a paso

Primero empareja cada valor original con su etiqueta:

cat:3,dog:1,bird:0.\texttt{cat}:3,\qquad \texttt{dog}:1,\qquad \texttt{bird}:0.

Ahora lee esos valores en el orden del segundo servicio:

(bird,cat,dog)⟶[0,3,1]T.(\texttt{bird},\texttt{cat},\texttt{dog}) \longrightarrow [0,3,1]^\mathsf{T}.

Enviar [3,1,0]T[3,1,0]^\mathsf{T} sin cambios afirmaría bird: 3, cat: 1 y dog: 0. La forma pasaría, pero cada coordenada llevaría el significado de característica equivocado.

Pregunta 4

Clasifica las formas (5,), (1, 5) y (5, 1) como array NumPy 1-D, array fila o array columna. Después indica cuáles son bidimensionales.

Mostrar la solución paso a paso

Cuenta las entradas de cada tupla de forma:

  • (5,) contiene un eje de longitud 5, así que es un array NumPy 1-D sin orientación explícita de fila o columna.
  • (1, 5) contiene dos ejes: una fila y cinco columnas. Es un array fila.
  • (5, 1) contiene dos ejes: cinco filas y una columna. Es un array columna.

Los dos últimos son bidimensionales porque sus tuplas de forma contienen dos tamaños de eje. Los tres contienen cinco valores escalares, así que el número de valores almacenados por sí solo no determina la orientación.

Pregunta 5

¿Por qué x.T no convierte x = np.array([2, 2, 1, 1]) en un array columna? Da una expresión que sí cree la forma (4, 1).

Mostrar la solución paso a paso

El array x tiene forma (4,), lo que significa que solo tiene un eje. La transposición puede reordenar ejes existentes, pero no hay un segundo eje que intercambiar con el primero. Por eso x.T.shape sigue siendo (4,).

Añade un eje de forma explícita:

column = x[:, np.newaxis]
print(column.shape)  # (4, 1)

El corte selecciona los cuatro valores del eje existente, mientras que np.newaxis crea un segundo eje de longitud 1. x.reshape(-1, 1) es una construcción de forma equivalente para este ejemplo.

Pregunta 6

Dos frases se asignan al mismo vector de recuentos [1, 1, 1, 0]ᵀ con el vocabulario (ai, model, data, vector). ¿Qué puedes concluir y qué no puedes concluir?

Mostrar la solución paso a paso

La igualdad de coordenadas permite concluir que el codificador conservó los mismos cuatro recuentos para ambas frases:

ai:1,model:1,data:1,vector:0.\texttt{ai}:1,\quad \texttt{model}:1,\quad \texttt{data}:1,\quad \texttt{vector}:0.

No podemos concluir que las frases originales tengan el mismo orden de palabras, gramática, palabras adicionales o significado. La representación por recuentos descarta esas propiedades. La igualdad de los vectores codificados es igualdad de las características conservadas, no una prueba de que los documentos fuente sean idénticos.

Pregunta 7

Un documento no contiene ninguno de los cuatro términos del vocabulario y se asigna a [0, 0, 0, 0]ᵀ. ¿Ha perdido el vector su dimensión? Explica el resultado y una limitación.

Mostrar la solución paso a paso

No. El vector sigue teniendo cuatro coordenadas ordenadas, por lo que sigue siendo un elemento de R4\mathbb{R}^{4}. Cada coordenada existe y tiene valor cero:

0=[0000].\boldsymbol{0}= \begin{bmatrix}0\\0\\0\\0\end{bmatrix}.

El resultado solo indica que ninguna de las características seleccionadas del vocabulario apareció según las reglas del codificador. No indica que el documento estuviera vacío o careciera de significado. El documento puede contener muchas palabras fuera del vocabulario, que esta representación ignora deliberadamente.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: the N-dimensional array
  4. NumPy documentation: numpy.reshape
  5. NumPy documentation: numpy.transpose
  6. scikit-learn documentation: CountVectorizer