Después de ver por qué el lenguaje humano es tan difícil para las computadoras, aparece una pregunta inevitable: si una máquina no entiende directamente el significado del texto, entonces cómo lo representa internamente para poder procesarlo.
La respuesta general es que una computadora no trabaja con significado abstracto, sino con símbolos y números. Por eso, antes de aplicar cualquier técnica de NLP, el texto debe transformarse en una estructura computable. Esa transformación es uno de los pilares del área.
En este tema estudiaremos cómo se representa el texto en computación, desde caracteres y codificaciones hasta tokens, vocabularios, índices y secuencias numéricas. Esta base será esencial para entender los próximos temas de limpieza, tokenización y modelos.
Cuando una persona ve una frase, percibe palabras, ideas e intención. Una computadora, en cambio, recibe inicialmente una secuencia de símbolos. Esos símbolos pueden ser caracteres individuales, palabras completas, subpalabras o incluso bytes, según el nivel de representación elegido.
Por ejemplo, la oración:
El gato duerme.
puede verse como:
La forma elegida depende del objetivo y del modelo que vayamos a usar.
Los algoritmos y modelos matemáticos no operan directamente sobre palabras como "casa", "perro" o "felicidad". Operan sobre valores numéricos. Por eso, cualquier sistema de NLP necesita una forma de traducir lenguaje a números.
Esto no significa que el significado desaparezca, sino que debe codificarse indirectamente en una representación matemática útil para la tarea.
Sin esta conversión, no podríamos:
Antes de hablar de palabras o tokens, hay que entender que el texto se almacena como caracteres codificados. Una computadora no guarda directamente "á", "ñ" o "A" como conceptos lingüísticos, sino como códigos numéricos según un estándar.
Entre los estándares más importantes se encuentran:
Esto es importante porque en NLP trabajamos con idiomas reales, tildes, signos, emojis y otros símbolos. Si la codificación se maneja mal, aparecen errores de lectura y procesamiento.
Cuando abrimos un archivo de texto en un programa, la computadora interpreta una secuencia de bytes según una codificación concreta. Si esa interpretación es correcta, vemos los caracteres esperados. Si es incorrecta, aparecen símbolos extraños o texto corrupto.
En consecuencia, incluso antes del NLP propiamente dicho, ya existe una etapa técnica importante: asegurar que el texto fue leído correctamente y que la codificación es coherente con el idioma y la fuente de datos.
Una forma básica de representar texto es tratarlo como secuencia de caracteres individuales. Por ejemplo, la palabra:
casa
puede descomponerse como:
c, a, s, a
Este enfoque es útil en ciertos problemas, por ejemplo:
Su ventaja principal es que no depende de un vocabulario fijo de palabras. Su desventaja es que las secuencias suelen volverse más largas y menos semánticamente directas.
La representación más intuitiva en NLP clásico es trabajar con palabras. En este caso, una oración se divide en unidades léxicas que luego pueden analizarse o convertirse en números.
Por ejemplo, la oración:
El gato duerme en el sillón
puede representarse como la secuencia:
[El, gato, duerme, en, el, sillón]
Este enfoque fue durante mucho tiempo la base del NLP tradicional porque resulta sencillo de entender y útil para conteos, frecuencias y modelos clásicos.
En la práctica, en lugar de hablar siempre de palabras, se usa mucho el término token. Un token es una unidad de texto producida por un proceso de segmentación llamado tokenización.
Un token no tiene por qué coincidir exactamente con una palabra tradicional. Puede ser:
La tokenización será estudiada en detalle más adelante, pero aquí es importante entender que la representación del texto depende fuertemente de cómo decidimos segmentarlo.
Una vez que tenemos tokens, suele construirse un vocabulario. El vocabulario es el conjunto de unidades textuales conocidas por el sistema.
Por ejemplo, si nuestro corpus contiene las palabras:
gato, perro, casa, calle
entonces ese conjunto puede formar parte del vocabulario del modelo.
El tamaño del vocabulario influye en muchos aspectos:
Un vocabulario demasiado pequeño pierde información. Uno demasiado grande puede volverse costoso e ineficiente.
Una vez definido el vocabulario, cada token suele asociarse a un número entero. Ese número funciona como identificador interno.
Por ejemplo:
{
"el": 0,
"gato": 1,
"duerme": 2,
"en": 3,
"sillon": 4
}
Entonces la oración:
el gato duerme
puede representarse como:
[0, 1, 2]
Este paso es fundamental porque permite pasar del texto simbólico a una secuencia manipulable por algoritmos.
En la práctica, siempre aparecen palabras que no estaban en el vocabulario de entrenamiento. Para manejar ese problema, muchos sistemas reservan un token especial para términos desconocidos, a menudo representado como <UNK>.
Esto permite que el sistema siga funcionando aunque no reconozca un término concreto. Sin embargo, también implica pérdida de información, porque varias palabras distintas pueden quedar colapsadas en la misma categoría desconocida.
A diferencia de muchas estructuras numéricas clásicas, los textos no tienen longitud fija. Una frase puede tener tres palabras y otra puede tener cincuenta. Esto genera un problema técnico: muchos algoritmos necesitan entradas de tamaño uniforme.
Para resolverlo suelen usarse técnicas como:
Estas decisiones afectan eficiencia, memoria y calidad del entrenamiento.
La representación del texto no solo debe conservar qué tokens aparecen, sino muchas veces también en qué orden aparecen. El orden cambia el significado.
Comparemos estas dos oraciones:
el perro mordió al hombreel hombre mordió al perroLas palabras son prácticamente las mismas, pero el orden altera por completo el sentido. Por eso, muchas representaciones modernas preservan la secuencia y no solo el conjunto de términos presentes.
En muchos pipelines de NLP, después de tokenizar e indexar, el texto termina representado como una secuencia de enteros. Por ejemplo:
[15, 203, 44, 9, 18]
A simple vista esta representación pierde interpretación humana directa, pero para la máquina es muy útil porque:
En otras palabras, este paso es el puente entre lenguaje y cálculo.
En NLP suelen distinguirse dos grandes familias de representaciones numéricas:
Las representaciones dispersas fueron fundamentales en NLP clásico. Las densas se volvieron centrales en enfoques modernos porque capturan mejor similitudes y relaciones semánticas.
Una vez que el texto se convierte en números, a menudo se lo representa como un vector de características. Ese vector resume cierta información útil para la tarea.
Por ejemplo, puede indicar:
En definitiva, el vector es la forma en que el algoritmo "ve" el texto.
Cuando no trabajamos con un solo texto sino con muchos documentos a la vez, las representaciones suelen organizarse en matrices. Por ejemplo:
Esto permite procesar colecciones completas y entrenar modelos de forma más eficiente. Más adelante, con Deep Learning, incluso trabajaremos con tensores de varias dimensiones.
En modelos neuronales modernos, las representaciones del texto suelen almacenarse como tensores. Un tensor puede verse como una generalización de vectores y matrices a más dimensiones.
Por ejemplo, un lote de secuencias tokenizadas podría tener dimensiones como:
lote x longitud_de_secuencia
Y después de aplicar embeddings:
lote x longitud_de_secuencia x dimension_del_embedding
Este nivel de representación será clave cuando trabajemos con redes neuronales para texto.
Tomemos la oración:
El gato duerme en el sillón
Una posible cadena de representación sería:
[el, gato, duerme, en, el, sillón].Este recorrido resume una idea central del NLP: el lenguaje entra como texto humano, pero el sistema lo transforma progresivamente en estructuras matemáticas.
No existe una única representación correcta para todo problema. La mejor opción depende de:
Por ejemplo, para una tarea simple de clasificación puede bastar una representación clásica. Para generación de texto o comprensión contextual avanzada, se necesitan representaciones más ricas.
Conviene distinguir dos ideas relacionadas pero distintas:
Un archivo UTF-8 y un vector TF-IDF no son lo mismo. El primero sirve para guardar el texto; el segundo sirve para modelarlo matemáticamente.
| Nivel | Qué representa | Ejemplo |
|---|---|---|
| Caracteres | Símbolos individuales del texto. | c, a, s, a |
| Tokens | Unidades segmentadas para análisis. | [el, gato, duerme] |
| Índices | Identificadores numéricos de tokens. | [0, 1, 2] |
| Vectores | Representaciones numéricas útiles para modelado. | Bag of Words, TF-IDF, embeddings |
| Tensores | Estructuras multidimensionales para redes neuronales. | lote x secuencia x dimensión |
La representación del texto en computación es la base técnica de todo NLP. Antes de clasificar, resumir, traducir o generar, necesitamos decidir cómo transformar lenguaje humano en una estructura manipulable por algoritmos.
Este paso parece técnico, pero en realidad es conceptual: la forma en que representamos el texto determina qué información conservamos, qué relaciones podemos modelar y qué tipo de herramientas podremos usar después.
En el próximo tema abordaremos la preparación y limpieza de texto, que es el paso práctico siguiente antes de construir representaciones más útiles para los modelos.