Nlp

LLMs: algunas herramientas (potencialmente) útiles

Artefactos de Claude

Uno de los aplicaciones derivadas de los LLMs que más satisfacciones me están dando son los artefactos de Claude (véase, por ejemplo, esto).

Es complicado en todo caso ejecutar aplicaciones web generadas por Claude (vía artefactos) por defecto sin haber configurado previamente un entorno en node con las dependencias adecuadas. Los artefactos están pensados para, por defecto, ser alojados por Claude directamente. Si uno quiere bajar el código y correrlos en su propia máquina, tiene que hacerlo en un entorno en el que existan las dependencias correspondientes.

Más sobre paralelismos entre textos vía embeddings

Retomo el asunto de los paralelismos entre textos, que ya traté aquí, por el siguiente motivo:

  • Estoy explorando las posibilides del RAG
  • Para lo cual es necesario crear una base de datos documental con los fragmentos debidamente embebidos
  • En particular, estoy probando lo que chroma da de sí.

Esencialmente, chroma consiste en:

  • Una base de datos (SQLite, de hecho) donde se almacenan los fragmentos, sus metadatos y sus embeddings.
  • Mecanismos para crear los embeddings.
  • Mecanismos para buscar (por similitud de los embeddings) fragmentos relacionados con una petición de búsqueda.

Mis experimentos en español han sido catastróficos. La culpa, realmente, no parece ser de crhoma en sí sino de los algoritmos de embedding —se supone que específicos para el español— que he utilizado. Lo que sigue es un resumen de los resultados obtenidos en inglés, que parecen mucho mejores.

LLMs: grados de libertad en la generación de texto

Me he entretenido dibujando

que representa gráficamente los grados de libertad de un LLM según va generando texto. Brevemente, he arrancado con

Never in the history of

y he dejado que mi LLM fuese construyendo

Never in the history of “The Bachelor” has a contestant been so hated by the viewing public.

The “Bachelor” franchise has had its share of villains, but the one who has

mientras registraba el vector de probabilidades en cada iteración, es decir, el vector que permite que el LLM elija, por ejemplo, villains en lugar de maples, vikings or frenchmen.

LLMs en perspectiva

I.

Llevamos muchos años —muchos más de los que la mayoría de la gente piensa— detrás de mecanismos del tipo

$$f(h) = x$$

donde $h$ es una historia y $x$ es una continuación suya coherente con $h$. El texto

IN NO IST LAT WHEY CRATICT FROURE BIRS GROCID PONDENOME OF DEMONSTURES OF THE REPTAGIN IS REGOACTIONA OF CRE

se construyó en 1948 usando un procedimiento básico: $h$ son dos caracteres y $x$ es otro caracter que se elige al azar de acuerdo cierta probabilidad condicional $P(x | h)$ que se estima a partir de frecuencias observadas en un determinado corpus.

Paralelismos entre textos vía embeddings: el caso, por poner uno, de los evangelios de Mateo y Marcos

Hace un tiempo tuve que leerlo todo sobre cierto tema. Entre otras cosas, cinco libros bastante parecidos entre sí. Era una continua sensación de déjà vu: el capitulo 5 de uno de ellos era casi como el tres de otro, etc. Pensé que podría ser útil —y hacerme perder menos tiempo— poder observar el solapamiento en bloques —sígase leyendo para entender mejor el significado de lo que pretendía—.

En esta entrada voy a mostrar el resultado de mis ensayos sobre unos textos distintos. Los que me interesaban originalmente estaban en PDF y hacer un análisis más o menos riguroso exigía mucho trabajo de limpieza previo. Pensando en otros textos distintos que vienen a contar la misma historia se me ocurrió utilizar dos de los evangelios sinópticos (en particular, los de Mateo y Marcos).

Uso y abuso de los "embeddings"

La variable feota por excelencia de nuestra profesión es el código postal: es categórica, tiene miles de niveles, muchos son infrecuentes, etc. Así que cuando se inventaron los embeddings, hace la tira, se me ocurrió crear uno por defecto. Es decir, una representación en baja dimensión de esa variable que pudiera aplicarse a una variedad de modelos. Y así fue hasta que al cabo de unos minutos se me ocurrió que ya existía una, muy natural, en dos dimensiones, que difícilmente iba a poder ser batida por un constructo ciego a la realidad: latitud y longitud.

TF-IDF

Imaginemos que queremos categorizar textos (i.e., poder decir algo así como: el texto 1434 trata de biología). Una manera de afrontar el problema, no la única, es contar palabras (o más en general, términos: piénsese en bigramas, trigramas, etc.).

Qué es

Por fijar ideas, pensemos en textos sobre economía (sí, porque voy a referirme a parte del análisis de los textos del blog nadaesgratis.es al que ya me referí aquí).

En total, en casi 33 MB de texto hay muchos términos (estrictamente, unigramas): en total, 81618 lemas (de acuerdo con la definición de Spacy de lema). Tiene sentido filtrar los términos para seleccionar solo aquellos más relevantes para clasificar los textos. Así, por ejemplo:

npl(nadaesgratis.es): el subproducto

Estos días me he entretenido repasando el estado del arte en NLP y otras tecnologías que hace un tiempo no toco y que, la verdad sea dicha, cambian —muy a mejor— una barbaridad. A tal fin, descargué al disco duro el texto de todas las entradas de un blog que leía en tiempos, nadaesgratis.es —unas 4388 entradas, menos unas 30 que ya no existen, a lo largo de 13 años y que vienen a ocupar, en texto no comprimido, como treinta quijotes, unos 33 MB— para mis pruebas.

Demasiada gente conozco que todavía no sabe de GPT-2

Así que si eres uno de ellos, lee esto. Todo. Completo. Incluidos los motivos por los que no se va a liberar tal cual.

Si te quedas con ganas de más, lee esto (un divertimento) o, más en serio, esto otro, donde se da cuenta de uno de los logros de GPT-2 que, a primera vista, pasa desapercibido: que ha logrado adquirir determinadas habilidades sin haber sido entrenado específicamente para ello.

Análisis (clasificación, etc.) de textos muy cortos

Nlp, R

Uno de mis proyectos permanentemente pospuestos es el del análisis de textos muy cortos. Se citarán Twitter y similares, aunque el € está en otros sitios, como los mensajes asociados a transferencias bancarias, reseñas o keywords.

Pero parece que no soy el único interesado en el tema. Otros con más tiempo y talento han desarrollado BTM, que parece ser una versión modificada de LDA para el análisis de textos cortos.

El artículo en el que está basado el paquete también es una buena referencia de técnicas y trucos cuando toca analizar este tipo de conjuntos de datos.

Mariposa

Quieres saber dónde está el escorpión,

Ni ayer ni antes vos sos corona dorada.

Ya os ves más tal cual tortuga pintada,

A él nos gusta andar con cola marrón.

Ella es quién son las alas de algún gorrión.

Si al fin podés ver tu imagen manchada,

O hoy vas bajo un cielo azul plateada,

Por qué estás tan lejos del aguijón.

No hay luz que al sol se enreda en tus palmera.

Entre lo fofo y lo hierático,modelos loglineales

El contexto, por fijar ideas, el problema de taguear fechas en textos.

La estrategia gomosa, fofa (ñof, ñof, ñof), y en la que parecen parecer creer algunos, embeddings más TensorFlow.

La estrategia hierática, inflexible y reminiscente de robots de pelis de serie B, expresiones regulares encadenadas con ORs.

En la mitad donde mora la virtud, extracción de features (principalmente con expresiones regulares) y luego, esto.

Nota: esta entrada es un recordatorio para mí mismo y por si retorna cierto asunto que dejé postergado hace un par de días.

Dos ejercicios (propuestos) sobre "embeddings"

Se me han ocurrido en los dos últimos días un par de ejercicios sobre embeddings que no voy a hacer. Pero tal vez alguien con una agenda más despejada que la mía se anime. Uno es más bien tonto; el otro es más serio.

El primero consiste en tomar las provincias, los códigos postales o las secciones censales y crear textos que sean, para cada una de ellas, las colindantes. Luego, construir un embedding de dimensión 2. Objetivo: probar o refutar que el embedding es una transformación de las coordenadas geográficas de las unidades geográficas. Bonus: ver qué pasa con embeddings de dimensión superior.