Vídeo: Deep Dive into LLMs like ChatGPT. By Andrej Karpathy

Andrej Karpathy fue uno de los fundadores de OpenAI y Director de IA en Tesla.

En este vídeo de tres horas y media desgrana todo el funcionamiento de un LLM, desde que descargas los datos de internet hasta que puedes conversar con ella. Si hace unas semanas enlazaba la interesante, pero complicada explicación de Stephen Wolfram este es un vídeo para todos los públicos.

Uno de los pocos momentos en que sale sale de la parte "técnica" es sobre la 1h:10min. Explica que tras el pre-training (entrenar al modelo con todo internet), se pasa al post-training. En el post-training "especialistas humanos" redactan conversaciones en base a unas ideas generales de "personalidad" que la empresa que construye el modelo quiere que tenga. Más o menos dice los siguiente:

lo que pasa cuando abres chatgpt y haces una pregunta, no es que una especie de IA mágica te responda, es un proceso estadístico en la que las respuestas se parecen a lo que unos editores humanos siguiendo las instrucciones de una empresa han decidido que es correcto.

Si preguntas "Cuales son los 5 lugares que no me puedo perder de París", la respuesta no se basa en una comparativa "científica" de que lugar es mejor y porqué, se parece más bien a la respuesta que estatisticamente habría respondido el editor.

Cómo funciona un LLM y porqué mienten

Uno de los artículos más inteligentes que he leído sobre LLM.

El autor, Simon Willinson es sensato (desde mi punto de vista), trabaja mucho con LLM y es el creador de Django (uno de los frameworks web más usados).

Básicamente dice que ChatGPT es una herramienta increíble, cuando sabes usarla, pero que usarla bien no es tan fácil porqué "ChatGPT miente".

Y para entender porqué "miente" o como funciona los LLM a alto nivel pero muy técnico, este otro artículo de un verdadero pionero de estos temas es imprescindible.

Wolfram es en resumen el creador de Mathematica, que en cierto momento estuvo a la altura de Matlab pero luego se fue por otros derroteros. Su buscador Wolfram Alfa que yo sepa fue el primero que intentaba no darte una colección de links si no responder a preguntas formuladas en lenguaje natural, y ya tiene bastantes añitos (2009 según la Wikipedia)

Vimium: Un plugin para navegar la web con el teclado

Por productividad y salud estoy intentando usar menos el ratón. Una de las situaciones donde más lo usaba era al navegar por páginas web y tras una pequeña búsqueda me he decidido por Vimium. Un plugin para Firefox, Chrome, y familia que permite usar las teclas de Vim para navegar.

Lo más molón, es la tecla f o F (de follow). Activa lo que llaman hint mode. Detecta todos los enlaces de la página y los marca con unas letras amarillas al lado. Al pulsar la secuencia de letras sigue el enlace. En la misma pestaña si se ha usado f, en otra pestaña si se ha pulsado F, o se teclea la secuencia en mayúsculas. Se puede usar Escape para desactivar los hints. Nuestras teclas preferidas de largo. Según como esté construida la página esta opción funciona también para aceptar avisos de cookies, …

Y en iCarto no soy yo sólo quien se ha hecho adicto.

Experimentos de «Monetization» en este blog

Hace unos días Tom MacWright publicaba en su blog un artículo titulado Monetization experiments on this website

Como él, un poco por tratar de pagar el hosting, y sobre todo por jugar un poco hice varios experimentos en este blog. Nunca fue algo que me tomara demasiado en serio. De hecho para escribir este artículo he intentado revisar algunos datos para descubrir que las estadísticas de Google Analytics dejaron de funcionar en mi blog, seguramente en alguna actualización y no tengo acceso a datos antiguos. Y me pasa lo mismo con las estadísticas de WordPress.com / Jetpack.

Cuando escribía en el blog algo más a menudo, sobre todo artículos más utilitaristas del tipo Como cifrar una partición de un disco duro externo tenía bastantes visitas para ser un blog personal, aunque ahora no me atrevo a dar una cifra. Con este desastre, no puedo dar datos muy concretos, pero para hacernos una idea, en base a mi memoria y los números que me encuentro en Google AdSense, en los últimos tres años constan 15.304 páginas vistas y 1.86€. En él último mes 376 páginas vistas y 0.01€

Los experimentos:

  • Desde que me dí de alta en AdSense (creo recordar que en 2011) he generado un saldo de 33.37€. Google sólo hace efectivos los pagos cuando se llega a 70€. Así que a este ritmo me quedan otros 9 años hasta poder cobrar algo. Al cancelar la cuenta hacen efectivo el pago si pasa de 10€
  • Algunos de los libros que comento en el blog tenían enlaces a Amazon a través del programa de Affiliates. De modo que si alguien lo comproba siguiendo el enlace me quedaba un porcentaje de la venta. Amazon nunca me notifico una compra a través de estos enlaces.
  • Otros libros o enlaces a descargas compartidas los ponía a través de adf.ly. Un anonimizador de enlaces que te obliga a pasar por una página previa de publicidad. He comprobado que mi cuenta está actualmente cancelada y en su momento tampoco recuerdo que llegará a obtener más de unos céntimos.
  • A través del botón de donaciones de paypal recibí un pago de 1.5€
  • En dos ocasiones me llegaron correos ofreciéndome escribir posts patrocionados. Uno de un casino online, el otro no recuerdo de que. Ofrecían unos 50€ pero no comprobé si era verdad porqué rechazé ambas

Así que arranco el nuevo año con un poco de limpieza:

  • Cerrando cuentas en servicios que aparecen en mi keepass en los que no he entrado desde hace tiempo.
  • Elimino la primera versión de este blog que todavía existía en blogspot.
  • Elimino del blog Google Analytics y Google AdSense
  • Borrados los enlaces a Amazon. En algún momento seguramente incluya enlaces a alguno de los sitios recomendados en este post
  • Los enlaces a adf.ly los he eliminado o substituido por los enlaces finales directamente

Amazon Afiliados y Google AdSense seguramente son una de las formas más sencillas en las que un blog personal al que dediques algo de mimo puede generar ingresos, pero por los cantidades que aportan, a mi al menos, no me compensan para ayudar a perpetuar los problemas que estas empresas causan.

Presentaciones de fotos en formato vídeo (slideshows) desde la línea de comandos

Hace ya algunos años apareció en este blog como hacer presentaciones de fotos en formato vídeo. A pesar de que hay muchos programas buenos para editar vídeo en GNU/Linux, esta vez quería tener un proceso sencillo y fácilmente replicable aún a costa de perder un poco de calidad o efectos (como degradado entre imágenes, …).

En este tutorial veremos, sin entrar en muchos detalles (mis conocimientos no dan para ello), una forma muy rápida de crear un slideshow con música usando únicamente el terminal. Como limitante partimos de la base de que todas las imágenes están en el mismo formato (en este caso JPEG)

Las herramientas

<br></br>sudo apt-get install --install-recommends rename imagemagick ffmpeg<br></br>

Normalizar los nombres y ordenar las imágenes

El primer paso es ordenar las imágenes poniéndolos un «nombre normalizado» que represente ese orden. En este caso partimos de unas imágenes que ya tienen cierto orden, pero arreglamos las mayúsculas, usamos dos caracteres para los números y ajustamos las del medio.

Cada caso será muy particular pero veamos un ejemplo:

<br></br>$ cp -r original copia<br></br>$ cd copia<br></br>$ ls<br></br>0.JPG 1_1.JPG 12_1.JPG 13.jpg 15.jpg 17.JPG 19.jpg 20.jpg 22.jpg 24.jpg 26.jpg 28.jpg 2.JPG 31.jpg 4.JPG 6.JPG 8.JPG<br></br>10.JPG 11.JPG 12.JPG 14.jpg 16.jpg 18.jpg 1.JPG 21.JPG 23.jpg 25.JPG 27.jpg 29.jpg 30.jpg 3.JPG 5.jpg 7.JPG 9.JPG<br></br>$ rename 's/.JPG/.jpg/' *.JPG<br></br>$ rename 's/3(\d).jpg/5$1.jpg/' 3*.jpg<br></br>$ rename 's/2(\d).jpg/4$1.jpg/' 2*.jpg<br></br>$ rename 's/1([2-9]).jpg/3$1.jpg/' 1*.jpg<br></br>$ ls<br></br>0.jpg 1_1.jpg 12_1.jpg 2.jpg 33.jpg 35.jpg 37.jpg 39.jpg 40.jpg 42.jpg 44.jpg 46.jpg 48.jpg 4.jpg 51.jpg 6.jpg 8.jpg<br></br>10.jpg 11.jpg 1.jpg 32.jpg 34.jpg 36.jpg 38.jpg 3.jpg 41.jpg 43.jpg 45.jpg 47.jpg 49.jpg 50.jpg 5.jpg 7.jpg 9.jpg<br></br>$ mv 12_1.jpg 31.jpg<br></br>$ rename 's/1([0-1]).jpg/2$1.jpg/' 1*.jpg<br></br>$ rename 's/([1-9]).jpg/1$1.jpg/' ?.jpg<br></br>$ mv 0.jpg 00.jpg<br></br>$ mv 1_1.jpg 01.jpg<br></br>$ ls<br></br>00.jpg 11.jpg 13.jpg 15.jpg 17.jpg 19.jpg 21.jpg 32.jpg 34.jpg 36.jpg 38.jpg 40.jpg 42.jpg 44.jpg 46.jpg 48.jpg 50.jpg<br></br>01.jpg 12.jpg 14.jpg 16.jpg 18.jpg 20.jpg 31.jpg 33.jpg 35.jpg 37.jpg 39.jpg 41.jpg 43.jpg 45.jpg 47.jpg 49.jpg 51.jpg<br></br>

Rotar las imágenes

A pesar de que en la previsualización del explorador de archivos podamos ver todas las imágenes rectas, alguna de ellas puede estar girada. Esto es por qué muchas herramientas usan por defecto los metadatos EXIF de la imagen para rotarlas de la forma lógica.

<br></br># las que no tengan un1están rotadas<br></br>identify -verbose * | grep -E '(Image:|Orientation)'

# Rotarlas. https://stackoverflow.com/a/19475281/930271
# Esto modifica todas las fotos, por lo que mejor usarlo sólo con la que deben
# ser rotadas
mogrify -auto-orient *.jpg

identify -verbose * | grep -E '(Image:(.*)|exif:Orientation: [2-9])'
mogrify -auto-orient 16.jpg
mogrify -auto-orient 45.jpg

Identificar tamaños y «aspect ratio»

Para montar las imágenes en el vídeo debemos investigar sus tamaños y sobre todo la relación de aspecto. El comando identify de ImageMagick nos puede dar la información más relevante y podemos ordenarla por aspect ratio, anchura, …

<br></br># https://unix.stackexchange.com/questions/50252

# ordenadas por aspect ratio
$ identify -format "%[fx:w/h] %w %h %M\n" *.jpg | sort -n -k1

1.5 4608 3072 20.jpg
0.75 1944 2592 15.jpg
0.75 2304 3072 16.jpg
0.75 3864 5152 45.jpg
1.33333 1280 960 44.jpg
1.33333 1280 960 46.jpg
1.33333 1280 960 47.jpg
1.33333 2592 1944 13.jpg
1.33333 3072 2304 17.jpg
1.33333 3264 2448 01.jpg
1.33333 3264 2448 14.jpg
1.33333 3264 2448 19.jpg
1.33333 3264 2448 33.jpg
1.33333 4000 3000 43.jpg
1.33333 4000 3000 50.jpg
1.33333 4000 3000 51.jpg
1.33333 4320 3240 18.jpg
1.33333 4608 3456 31.jpg
1.33333 4672 3504 34.jpg
1.33333 4672 3504 35.jpg
1.33333 5120 3840 49.jpg
1.33333 5152 3864 32.jpg
1.33333 5152 3864 37.jpg
1.33472 1280 959 38.jpg
1.33884 2592 1936 00.jpg
1.33884 2592 1936 11.jpg
1.49841 3776 2520 21.jpg
1.77778 3072 1728 12.jpg
1.77778 3264 1836 39.jpg
1.77778 3968 2232 41.jpg
1.77778 5312 2988 36.jpg
1.77778 5312 2988 40.jpg
1.77778 5312 2988 42.jpg
1.77778 5312 2988 48.jpg

# ordenadas por width
identify -format "%[fx:w/h] %w %h %M\n" *.jpg | sort -n -k2

Aquí la clave es:

  • Ajustar las imágenes para que tengan todas la misma relación de aspecto y que no salgan deformadas. Cosa que haremos directamente con ffmpeg al crear el vídeo.
  • Escoger el tamaño de referencia a usar para las imágenes. La «redimensión» la haremos directamente al crear el vídeo.

Sin entender mucho de vídeos mi criterio es coger el aspect ratio más común a las imágenes, en este caso 1.333, y un tamaño intermedio, de modo que haya pocas imágenes por debajo de ese tamaño, y que al ampliar no pixelen demasiado, en este caso me quedo con 2592×1936

Montar el vídeo

La wiki de ffmpeg da el comando básico para hacer el slideshow, y en stackoverflow también hay buenas respuestas

El comando que usaremos en este caso es:

<br></br>ffmpeg -framerate 1/5 -pattern_type glob -i '*.jpg' -i audio.mp3 -vf 'scale=2592:1936:force_original_aspect_ratio=decrease,pad=2592:1936:(ow-iw)/2:(oh-ih)/2,setsar=1' -c:v libx264 -c:a copy -crf 14 -r 25 -pix_fmt yuv420p -shortest output.mp4<br></br>

Los parámetros más relevantes para el slideshow:

  • -framerate 1/5: El denominador define cuanto se mostrará cada imagen
  • -pattern_type glob -i '*.jpg': Cuando las imágenes no están ordenadas exactamente de forma secuencial con este parámetro las meterá en el video ordenadas por nombre
  • 'scale=2592:1936:force_original_aspect_ratio=decrease,pad=2592:1936:(ow-iw)/2:(oh-ih)/2,setsar=1': Escala las imágenes a 2592×1936 y mete bandas negras de relleno cuando no se pueda conservar la relación de aspecto