Tierra y Alma
Nota técnica · El Laboratorio

Trazo Emocional: de texto a pintura por proyección al plano afectivo

Resumen

Se documenta el algoritmo detrás de Trazo Emocional, un sistema que convierte un texto en una pintura abstracta determinista. El método consta de tres etapas: (i) una representación vectorial de cada palabra basada en trigramas de caracteres con hashing con signo; (ii) una proyección lineal, ajustada por mínimos cuadrados, de ese espacio de 96 dimensiones al plano afectivo bidimensional del modelo circumplejo de Russell (valencia × activación); y (iii) una síntesis pictórica en la que la posición afectiva de cada palabra determina el color, la orientación, la curvatura y el grosor de sus trazos. Toda la aleatoriedad procede de un generador congruente sembrado con el propio texto, de modo que la salida es reproducible.

1 Planteamiento

El sistema traduce lenguaje a imagen preservando su carga afectiva. La dificultad central no es pintar, sino situar cada palabra en un espacio donde «cerca» signifique «emocionalmente parecido», y hacerlo de forma que palabras nunca vistas también encuentren su lugar. El diseño resuelve esto en dos saltos: primero un espacio morfológico de alta dimensión, luego una proyección a un espacio psicológico interpretable. La etapa pictórica se limita a leer esas coordenadas.

2 Representación de palabras: trigramas con hashing con signo

Cada palabra w se descompone en sus trigramas de caracteres, con marcadores de inicio y fin. Por ejemplo, amor genera <am, amo, mor, or>. Esta descomposición hace que palabras morfológicamente afines (amar, amor) compartan subcadenas y, por tanto, terminen próximas en el espacio vectorial.

Cada trigrama gi se proyecta a una de 96 dimensiones mediante el hashing trick con signo. Se calcula un hash entero, del cual se derivan un índice de dimensión y un signo:

$$h_i = \text{SHA1}(g_i) \in \mathbb{Z}, \qquad \text{idx}_i = h_i \bmod 96, \qquad \sigma_i = \begin{cases} +1 & \text{si } \text{bit}_8(h_i)=1 \\ -1 & \text{en otro caso} \end{cases}$$

El vector de la palabra acumula los signos en las posiciones indicadas y se normaliza por la raíz del número de trigramas |G(w)|, para que su magnitud no dependa de la longitud de la palabra:

$$\mathbf{v}[\text{idx}_i] \mathrel{+}= \sigma_i, \qquad \hat{\mathbf{v}}(w) = \frac{\mathbf{v}}{\sqrt{|G(w)|}} \in \mathbb{R}^{96}$$

El signo aleatorio (pero determinista) cumple una función estadística: al mezclar contribuciones con signos opuestos, reduce el sesgo introducido por las colisiones de hash, un resultado estándar del signed feature hashing (Weinberger et al., 2009). El resultado es un embedding morfológico sin necesidad de entrenar ni de mantener un vocabulario.

3 Proyección al plano de Russell

El espacio destino es el modelo circumplejo de Russell (1980): un plano donde toda emoción se describe por dos coordenadas continuas,

EjeRangoInterpretación
v — valencia[0, 1]de negativo a positivo
a — activación[0, 1]de calma a excitación

Para inducir la correspondencia entre ambos espacios se define un lexicón ancla de N ≈ 150 palabras con posición afectiva (vi, ai) asignada manualmente. Con sus embeddings se forman las matrices X ∈ ℝN×96 (representaciones) e Y ∈ ℝN×2 (coordenadas afectivas), y se busca la proyección lineal P ∈ ℝ96×2 que mejor las alinea en sentido de mínimos cuadrados:

(1)$$P = \arg\min_{P} \lVert XP - Y \rVert_F^2 \quad\Longrightarrow\quad P = (X^\top X)^{-1} X^\top Y$$

La solución es la pseudoinversa (en la práctica, numpy.lstsq). Una vez estimada P, cualquier palabra, esté o no en el lexicón, recibe coordenadas afectivas por una simple multiplicación matricial, acotadas al interior del cuadrado unitario:

$$[\,v,\ a\,] = \hat{\mathbf{v}}(w)\, P, \qquad v, a \in [0.04,\ 0.96]$$

Esta es la pieza que da generalización: el lexicón solo enseña la dirección del mapa afectivo en el espacio de trigramas; la proyección extiende esa geometría a todo el idioma.

Fig. 1 El plano de Russell (valencia × activación) con las 8 anclas de emoción y sus regiones de Voronoi. Cada palabra proyectada cae en una región, que determina su emoción, mientras su distancia al centro fija la intensidad.

Clasificación e intensidad

Sobre el plano se fijan 8 anclas de emoción ek = (vk, ak). La emoción de una palabra es la del ancla más cercana en distancia euclídea —una partición de Voronoi del plano afectivo—, y su intensidad es su distancia al punto neutro (0.5, 0.5), escalada y saturada a la unidad:

(2)$$\text{emoción}(w) = \arg\min_{k} \lVert (v,a) - (v_k,a_k) \rVert, \qquad \text{int}(w) = \min\!\big(1,\ 1.85\sqrt{(v-0.5)^2 + (a-0.5)^2}\big)$$

4 Determinismo: PRNG sembrado con el texto

Un requisito de diseño es que el mismo texto produzca siempre la misma pintura. Toda la aleatoriedad —posiciones, radios, perturbaciones— procede de un generador pseudoaleatorio sembrado con un hash FNV-1a del texto completo, iterado luego con la recurrencia xorshift32:

(3)$$s_{n+1} = s_n \oplus (s_n \ll 13) \oplus (s_n \gg 17) \oplus (s_n \ll 5), \qquad r_n = \frac{s_{n+1}}{2^{32}-1} \in [0,1)$$

Así, la obra no es aleatoria sino una función determinista del texto: reproducible, verificable, y distinta para cada frase.

5 Síntesis del fondo: campo de color por emoción

El lienzo se compone en dos capas. La primera es un campo de color: para cada emoción presente en el texto se calcula su fracción de peso —la suma de intensidades de sus palabras sobre el total—,

(4)$$f_k = \frac{\sum_{w:\,\text{emoción}(w)=k} \text{int}(w)}{\sum_w \text{int}(w)}$$

y se pintan nk = max(3, ⌊18 fk⌉) manchas radiales de esa emoción, con opacidad y radio crecientes en fk. Antes de pintar, cada color se satura respecto de su gris medio μ = (R+G+B)/3 para intensificar la carga cromática:

$$R' = \text{clip}\big(\mu + 1.7\,(R-\mu),\ 0,\ 255\big)\cdot 1.15 \quad (\text{análogo para } G', B')$$

6 Síntesis de trazos: una gramática gestual por emoción

La segunda capa son los trazos. Cada palabra genera entre 2 y 8 curvas de Bézier cúbicas independientes. La emoción de la palabra define su gesto: orientación tendencial, dispersión angular y curvatura. La intuición es directa —la calma se dibuja horizontal y suave; el miedo, caótico; la alegría se eleva—:

Emociónβ (curvatura)Tendencia de ángulo
paz / calma0.12horizontal
tristeza0.22↓ hacia abajo
amor0.60 – 1.10libre
esperanza0.55 – 0.90↗ diagonal ascendente
alegría0.50 – 0.90↑ hacia arriba
miedo1.50 – 2.40caótico

El ángulo de cada trazo se muestrea alrededor de la tendencia de su emoción. Por ejemplo, tristeza y alegría apuntan en direcciones opuestas del eje vertical, con dispersiones distintas:

(5)$$\theta_{\text{tristeza}} = \tfrac{\pi}{2} + \delta,\ \ \delta\sim\mathcal{U}(-0.9, 0.9); \qquad \theta_{\text{alegría}} = -\tfrac{\pi}{2} + \delta,\ \ \delta\sim\mathcal{U}(-1.4, 1.4)$$

La curva es una Bézier cúbica cuyos puntos de control interiores se desplazan a lo largo de la dirección del trazo y perpendicularmente a ella , con una magnitud gobernada por la curvatura β de la emoción:

(6)$$B(t) = (1-t)^3 P_0 + 3(1-t)^2 t\,P_1 + 3(1-t)t^2 P_2 + t^3 P_3$$
(7)$$P_1 = P_0 + 0.28\,\ell\,\hat{d} + 0.85\,\beta\,\varepsilon\,\hat{n}, \qquad P_2 = P_0 + 0.72\,\ell\,\hat{d} + 0.40\,\beta\,\varepsilon\,\hat{n}$$

donde es la longitud del trazo y ε = ±1 alterna el sentido de la curva. Finalmente, el grosor es proporcional a la intensidad de la palabra: cuanto más cargada emocionalmente, más presencia física en el lienzo.

(8)$$\text{lineWidth} = (1.2 + 3.8\,\text{int}(w))\cdot(0.45 + 0.85\,r_n)$$
Fig. 2 La gramática gestual. Cada bloque muestra el trazo característico de una emoción: la orientación y la curvatura β se derivan directamente de la posición de la palabra en el plano de Russell.

Una posición afectiva, entonces, no colorea la palabra: la dibuja. El color viene de la emoción, la dirección de su valencia y activación, el grosor de su intensidad. La pintura completa es la superposición de todas esas decisiones, una por palabra, en el orden en que fueron escritas.

7 Observaciones

El sistema es ligero y sin entrenamiento: no hay modelo de lenguaje, ni pesos aprendidos más allá de la proyección lineal P, que se ajusta una sola vez sobre el lexicón ancla. Su representación morfológica implica que responde a la forma de las palabras, no a su significado contextual: es sensible a familias léxicas y a errores ortográficos leves, pero ajeno a la ironía, la negación o el sentido figurado. Es, deliberadamente, un instrumento estético antes que un clasificador de sentimiento; su objetivo es que cada texto tenga una huella visual propia y repetible, no diagnosticar emociones.

Pinta tus palabras

Escribe lo que sientes y observa cómo cada palabra encuentra su lugar en el lienzo.

Abrir Trazo Emocional →
Referencias
  1. Russell, J. A. (1980). A circumplex model of affect. Journal of Personality and Social Psychology, 39(6), 1161–1178.
  2. Weinberger, K., Dasgupta, A., Langford, J., Smola, A., & Attenberg, J. (2009). Feature hashing for large scale multitask learning. ICML.

Implementación: JavaScript · Canvas · proyección ajustada con NumPy · determinismo por xorshift32

El Laboratorio

La serie donde documento los sistemas, los modelos y las herramientas que construyo. Aquí las matemáticas se ven por dentro.

→ Ver todo El Laboratorio