.

Continuando con algo relacionado con la música clásica me encuentro, otra vez en Hacker News, con una noticia de julio en VentureBeat sobre un sistema desarrollado por Florian Henkel, Rainer Kelz y Gerhard Widmer que puede predecir la posición más probable dentro de una partitura correspondiente a una grabación sonora, dando un rendimiento destacadamente superior a los seguidores de partitular más modernos basados en imagen, en términos de precisión de alineamiento. Para los más interesados, están disponibles tanto el texto académico como el código correspondiente pero el artículo ofrece un resumen de algunos de los puntos clave del proyecto:

El equipo modelo el seguimiento de la partitura como una tarea de segmentación de imagen. Basándose en una interpretación musical hasta un determinado punto en el tiempo, su sistema predice una máscara de segmentación —una pequeña «pieza» de imagen— para la partitura que se corresponde con la música que está siendo reproducida en ese momento. Mientras que los sistemas de seguimiento que se apoyan sólo en entrada de audio de tamaño fijo no son capaces de distinguir notas repetidas si exceden un determinado contexto, el sistema propuesto no tiene problemas en partituras que aabarcan periodos de tiempo más largos en el audio, según declaran los investigadores.

En el transcurso de los experimentos, los investigadores obtuvieron muestras polifónicas de piano del Multi-model Sheet Music Dataset (MSMD), que abarca temas de varios compositores incluyendo Bach, Mozart y Beethoven. Tras identificar y corregir manualmente los errores de alineamiento, entrenaron su sistema con 353 pares de partituras e información MIDI.

Arquitectura de red en U condicionada por audio. Cada bloque (A—I) está compuesto de dos capas convolucionales con activación ELU y normalización de capa. La capa FiLM se coloca antes de la última función de activación. La codificación del espectrograma […] se pasa a una capa recurrente. El estado oculto de esta capa recurrente es utilizado después para el condicionamiento en la capa FiLM. Cada bloque simétrico tiene el mismo número de filtros, empezando por 8 en el bloque A y aumentando con la profundidaz hasta 128 en el bloque E. Fuente: arXiv.org

Sin apenas tiempo de indagar en el emuladores WaveNet de equipo de guitarra, voy a tener que poner orden y establecer prioridades entre todas las cosas que quiero curiosear.

.

El blog de Blax ya no es accesible. No es que sea una noticia, el último apunte que señalé del espacio que mantenía era de 2006, pero no deja de ser una pérdida. Afortunadamente, tras el 50.º aniversario de Eurielec hemos retomado el contacto unas cuantas personas de las que pululábamos por el garito con cierta asiduidad, y esto es lo que dejaba caer el otro día el caballero en cuestión: dadabots, un proyecto de creación de redes neuronales que generan pistas de sonido a partir de audio sin compresión. En concreto, puso un enlace a una emisión continua de death metal técnico generado a partir de música de Archspire, un grupo he mencionado un par de veces.

Como cuentan en una entrevista en The Outline, los autores del proyecto son CJ Carr y Zack Zukowski, dos antiguos alumnos de la Northeastern University que se conocieron en un curso de la Berklee College of Music. Han publicado varios discos generados de esta manera en bandcamp, y hace año y medio publicaron su trabajo en arxiv. En su web lo resumen de manera más coloquial:

Empezamos con el código de investigación original de SampleRNN en theano. Es una red LSTM jerárquica. Las LSTMs pueden ser entrenadas para generar secuencias. Secuencias de lo que sea. Podría ser texto. Podría ser el tiempo. Lo entrenamos con las formas de onda brutas de discos de metal. A medida que va escuchando, intenta adiviar la siguiente fracción de milisegundo. Juega a este juego millones de veces a lo largo de varios días. Tras el entrenamiento, le pedidos que genere su propia música, como se puede preguntar a una máquina de predicción meteorológica que invente siglos de patrones climatológicos aparentemente plausibles.

Alucina 10 horas de música de esta manera. Eso es demasiado. Así que hicimos otra herramienta para explorarla y organizarla. Encontramos los trozos que nos gustan y [con ellos] componemos un álbum para consumo humano.

Entrenar redes es un desafío. Hay muchos hiperparámetros que probar. ¿Cómo de grande es? ¿Cuál es el ritmo de aprendizaje? ¿Cuántos niveles de la jerarquía? ¿Qué optimizador del alogritmo de gradiente descendente? ¿Cómo muestra de la distribución? Si lo haces mal, suena como ruido blanco, silencia o apenas nada. Es como elaborar cerveza. ¿Cuánto de levadura? ¿Cuánto de azúcar? Estableces los parámetros al principio y no sabes si va a saber bien hasta mucho después.

Entrenamos cientos de redes hasta que encontramos buenos hiperparámetros, y lo publicamos para que todo el mundo lo usara.

Logotipo de dadabots.

Recuerdo que los casos que veía hace años de uso de RNNs para componer música partían casi siempre de datos MIDI, y es curioso ver como la evolución de los sistemas y el aumento de la capacidad computacional permite trabajar volúmenes mucho mayores datos.

.

Puedo dar fe de la cantidad de tiempo que se puede perder poniendo nombre a un grupo de música. Afortunadamente, el aprendizaje automático viene a nuestro rescate, dando lo que será sin duda el mayor paso en el progreso de la inteligencia artificial: el generador de nombres de grupos de metal de Janelle Shane.

La pregunta del día: ¿puede un ordenador aprender a sonar metálico?

Gracias a HellBlazer de http://www.metal-archives.com/, quien proporcionó un conjunto de datos de más de 100,000 bandas, sub-géneros y países de origen, tuve la oportunidad de averiguarlo.

Pasé el conjuto de datos a un entorno de trabajo de código abierto de redes neuronales que había entrenado previamente para generar recetas de cocina, Pokemon, chistes de toc-toc, frases para ligar y hechizos de D&D. Como de costumbre, las instrucciones eran sólo aprender cómo es el conjunto de datos e intentar crear más de lo mismo. Con más de 100,000 entradas a las que hincar el diente la red neuronal consiguió producir resultados que eran… bueno, sorprendentemente metálicos.

Os presento: Nombres de grupos, de momento sin pedir, generados por red neuronal

Dragonred of Blood – Death Metal – Indonesia
Deathhouse – Melodic Death Metal – Brazil
Vultrum – Folk/Black Metal – Germany
Stäggabash – Black Metal – Canada
Deathcrack – Death Metal – Mexico
Stormgarden – Black Metal – Germany
Vermit – Thrash Metal/Crossover,/Deathcore – United States
Swiil – Progressive Metal/Shred – United States
Inbumblious – Doom/Gothic Metal – Germany
Inhuman Sand – Melodic Death Metal – Russia
ChaosWorge le Plague – Doom Metal – Brazil
Inhum the Thorg – Black Metal – Slovenia
Chaosrug – Black Metal – Mexico
Jazzy – Heavy Metal – United States
Sux – Heavy Metal/Hard Rock – Chile
Dragonsulla and Steelgosh – Heavy Metal – Tuera
Verking of the Beats – Thrash Metal/Crossover Thrashcore – Netherlands
Squeen – Doom Metal – Colombia
Death from the Trend – Black Metal – Croatia
Shuck – Death Metal – Israel
Dragorhast – Heavy Metal/Hard Rock – Germany
Verb – Black Metal – Norway
Black Clonic Sky – Black Metal – Greece
Snapersten – Folk/Melodic Black Metal – Italy
Verk – Melodic Death Metal – Sweden
Snee – Thrash/Death Metal – Brazil
Vomberdean – Melodic Black Metal – United States
Suffer the Blue – Death/Thrash Metal – Germany
Sespessstion Sanicilevus – Melodic Death Metal – United States
Sköpprag – Black Metal – Norway
Sht – Symphonic/Heavy Metal – United States
Sun Damage Omen – Symphonic Progressive Metal – France

Hace un par de años mencionaba el trabajo de Karpathy en relación con la composición de música con RNNs y el año pasado por estas fechas dejaba un apunte sobre la generación de pistas de batería con redes LSTM aprendiendo de Metallica.

Yo, por mi parte, doy la bienvenida a nuestros nuevos amos algorítmicos. Podrán diferenciarme de otras formas de vida orgánica porque estaré escuchando cualquiera de los grupos anteriores mientras llevo puesta la siguiente camiseta:

.

Keunwoo Choi es un estudiante del Centro de Música Digital de la Queen Mary, Universidad de Londres. Bajo la tutela del profesor Mark Sandler y el doctor Gyorgy Fazekas ha publicado un texto titulado «Text-based LSTM networks for Automatic Music Composition», disponible en arXiv y que resume en su página web:

RNN de palabras (LSTM) sobre Keras con representaciones textuales empalabradas de ficheros MIDI de la batería de Metallica, provenientes de midiatabase.com.

No es la primera vez que veo el uso de redes neuronales recurrentes para componer música, lo que no quita que me siga pareciendo interesante. Los resultados no son espectaculares pero sí curiosos, y me gustaría tener más tiempo para poder entender mejor cómo se implementa la RNN.

.

Una red neuronal recurrente, o RNN (Recurrent Neural Network) es una clase de red de neuronas artificial en las que las conexiones entre unidades forman un ciclo dirigido. Si no lo he entendido mal, esto quiere decir que la secuencia cíclica de vértices (o nodos) y aristas en un camino es determinada completamente por el conjunto de aristas que usa: sólo se puede recorrer en una dirección. Esto crea un estado interno de la red que le permite exhibir un comportamiento temporal dinámico y procesar secuencias arbitrarias de entradas. También se puede entender como una red neuronal recursiva, igualmente abreviada como RNN, con una estructura en cadena.

Todo esto viene a colación una serie de relativamente breves pero interesantísimos textos de Bob L. Sturm titulados “Deep learning for assisting the process of music composition”, partes 1, 2, 3 y 4. En ellos deja constancia de algunas reflexiones sobre un proyecto veraniego realizado en colaboración con João Felipe Santos denominado The Infinite Irish Trad Session:

So João grabbed all the tunes he could from The Session, I parsed and editted the text file to produce a 13 MB file of 23,962 tunes, and João set to using it to train an RNN with 3 hidden layers having 512 units each. Once finished, João had the system generate a 21 MB text file of new ABC tunes, which I am parsing into its 72,000+ tunes. I convert each ABC tune to MIDI, process it in python (with python-midi) to give a more human-like performance (including some musicians who lack good timing, and a sometimes over-active bodhran player who loves to have the last notes :), and then synthesize the parts with timidity, and finally mix it all together and add effects with sox. Each successful synthesis is then served to my home directory, and a cronjob generates a new playlist every five minutes from the 22000+ tunes already synthesized (that is 18,964,140 kilobytes, which at 128 kbps is a 41 hour trad session!).

Hope you have some craic!

El resultado son composiciones como esta:

Parte del trabajo se apoya en el trabajo de Andrej Karpathy sobre redes LSTM, cuyo artículo “The Unreasonable Effectiveness of Recurrent Neural Networks” explica con algo más de detalle qué son las RNN y sus virtudes.

Todo esto me llegó vía Hacker News, igual que el artículo sobre composición algorítmica de hace unos meses.