MuseNet

Hemos creado MuseNet, una red neuronal profunda que puede generar composiciones musicales de 4 minutos con 10 instrumentos diferentes, y puede combinar estilos desde el country hasta Mozart o los Beatles. MuseNet no se programó explícitamente con nuestra comprensión de la música, sino que descubrió patrones de armonía, ritmo y estilo aprendiendo a predecir el siguiente token en cientos de miles de archivos MIDI. MuseNet utiliza la misma tecnología no supervisada de propósito general que GPT-2, un modelo transformador a gran escala entrenado para predecir el siguiente token de una secuencia, ya sea de audio o de texto.

Muestras

Como MuseNet conoce muchos estilos diferentes, podemos mezclar generaciones de formas novedosas. Aquí se le dan al modelo las 6 primeras notas de un Nocturno de Chopin, pero se le pide que genere una pieza de estilo pop con piano, batería, bajo y guitarra. El modelo consigue mezclar los dos estilos de forma convincente, con la banda completa uniéndose alrededor de los 30 segundos:

Prueba MuseNet

¡Estamos deseando ver cómo los músicos y los no músicos utilizarán MuseNet para crear nuevas composiciones!

En el modo simple (mostrado por defecto), escucharás muestras aleatorias no seleccionadas que hemos generado previamente. Elige un compositor o estilo, un inicio opcional de una pieza famosa, y empieza a generar. Esto te permite explorar la variedad de estilos musicales que el modelo puede crear. En el modo avanzado puedes interactuar con el modelo directamente. Las terminaciones tomarán más tiempo, pero estarás creando una pieza completamente nueva.

Algunas de las limitaciones de MuseNet incluyen:

  • Los instrumentos que pides son fuertes sugerencias, no requisitos. MuseNet genera cada nota calculando las probabilidades entre todas las notas e instrumentos posibles. El modelo se desplaza para que tus elecciones de instrumentos sean más probables, pero siempre existe la posibilidad de que elija otra cosa.
  • MuseNet tiene más dificultades con los emparejamientos extraños de estilos e instrumentos (como Chopin con bajo y batería). Las generaciones serán más naturales si se eligen los instrumentos más cercanos al estilo habitual del compositor o de la banda.

Tokeners de compositor e instrumentación

Hemos creado tokens de compositor e instrumentación para dar más control a los tipos de muestras que genera MuseNet. Durante el tiempo de entrenamiento, estos tokens de compositor e instrumentación se anteponen a cada muestra, para que el modelo aprenda a utilizar esta información al hacer predicciones de notas. En el momento de la generación, podemos condicionar el modelo a la creación de muestras en un estilo elegido comenzando con una indicación como un inicio de piano de Rachmaninoff:

O con la banda Journey, con piano, bajo, guitarra y batería:

Podemos visualizar las incrustaciones de MuseNet para obtener información sobre lo que el modelo ha aprendido. Aquí utilizamos t-SNE para crear un mapa en 2-D de la similitud del coseno de varias incrustaciones de compositores y estilos musicales.

Pasa el ratón por encima de un compositor o estilo específico para ver cómo se relaciona con otros.

Estructura a largo plazo

MuseNet utiliza el recálculo y los núcleos optimizados de Sparse Transformer para entrenar una red de 72 capas con 24 cabezas de atención, con atención plena sobre un contexto de 4096 tokens. Este largo contexto puede ser una de las razones por las que es capaz de recordar la estructura a largo plazo de una pieza, como en la siguiente muestra que imita a Chopin:

También puede crear estructuras melódicas musicales, como en esta muestra que imita a Mozart:

La generación de música es un dominio útil para probar el Sparse Transformer, ya que se sitúa en un punto intermedio entre el texto y las imágenes. Tiene la estructura fluida de tokens del texto (en las imágenes se puede mirar hacia atrás N tokens y encontrar la fila de arriba, mientras que en la música no hay un número fijo para mirar hacia atrás al compás anterior). Sin embargo, podemos escuchar fácilmente si el modelo está captando una estructura a largo plazo del orden de cientos o miles de tokens. Es mucho más obvio si un modelo musical estropea la estructura cambiando el ritmo, de una manera que es menos clara si un modelo de texto se va por la tangente brevemente.

Conjunto de datos

Recogimos datos de entrenamiento para MuseNet de muchas fuentes diferentes. ClassicalArchives y BitMidi donaron sus grandes colecciones de archivos MIDI para este proyecto, y también encontramos varias colecciones en línea, incluyendo estilos de jazz, pop, africano, indio y árabe. Además, utilizamos el conjunto de datos MAESTRO.

El transformador se entrena con datos secuenciales: dado un conjunto de notas, le pedimos que prediga la nota siguiente. Experimentamos con varias formas diferentes de codificar los archivos MIDI en tokens adecuados para esta tarea. En primer lugar, un enfoque basado en los acordes que considera cada combinación de notas que suenan a la vez como un «acorde» individual, y asigna un token a cada acorde. En segundo lugar, intentamos condensar los patrones musicales centrándonos únicamente en los inicios de las notas, y tratamos de comprimirlos aún más utilizando un esquema de codificación de pares de bytes.

También probamos dos métodos diferentes para marcar el paso del tiempo: fichas que se escalaban según el tempo de la pieza (de modo que las fichas representaban un tiempo musical o una fracción de tiempo), o fichas que marcaban el tiempo absoluto en segundos. Hemos optado por una codificación que combina la expresividad con la concisión: la combinación de la información sobre el tono, el volumen y el instrumento en un único token.

bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12
Codificación de la muestra que combina el tono, el volumen y el instrumento.

Durante el entrenamiento:

  1. Transponemos las notas subiendo y bajando los tonos (más adelante en el entrenamiento, reducimos la cantidad de transposición para que las generaciones se mantengan dentro de los rangos individuales del instrumento).
  2. Aumentar los volúmenes, subiendo o bajando los volúmenes generales de las distintas muestras.
  3. Aumentar el tiempo (cuando se utiliza la codificación del tiempo absoluto en segundos), ralentizando o acelerando ligeramente las piezas.
  4. Utilizar la mezcla en el espacio de incrustación de tokens

También creamos una crítica interna: se pide al modelo durante el tiempo de entrenamiento que prediga si una muestra dada es realmente del conjunto de datos o si es una de las propias generaciones pasadas del modelo. Esta puntuación se utiliza para seleccionar las muestras en el momento de la generación.

Embeddings

Agregamos varios tipos diferentes de embeddings para dar al modelo más contexto estructural. Además de las incrustaciones posicionales estándar, añadimos una incrustación aprendida que sigue el paso del tiempo en una muestra determinada. De este modo, todas las notas que suenan al mismo tiempo reciben la misma incrustación temporal. A continuación, añadimos una incrustación para cada nota de un acorde (esto imita la atención relativa, ya que será más fácil para el modelo aprender que la nota 4 debe mirar hacia atrás, hacia la nota 3, o bien hacia la nota 4 del acorde anterior). Por último, añadimos dos incrustaciones estructurales que indican al modelo dónde se encuentra una muestra musical determinada dentro de la pieza musical más grande. Una incrustación divide la pieza mayor en 128 partes, mientras que la segunda codificación es una cuenta atrás de 127 a 0 a medida que el modelo se acerca al token (final).

¡Nos entusiasma escuchar lo que la gente crea! Si creas una pieza que te guste, puedes subirla a un servicio gratuito como Instaudio y luego tuitearnos el enlace (la demo de MuseNet tiene un botón de tuit para ayudar con esto).

Si estás interesado en aprender más sobre el trabajo musical de OpenAI, considera la posibilidad de aplicar para unirte a nuestro equipo. No dudes en enviarnos un correo electrónico con sugerencias para la demo de MuseNet. También nos encantaría saber de ti si estás interesado en componer con MuseNet en mayor profundidad, o si tienes archivos MIDI que te gustaría añadir al conjunto de entrenamiento.

MuseNet tocó un concierto experimental el 25 de abril de 2019, transmitido en vivo en el canal de Twitch de OpenAI, en el que ningún humano (incluidos nosotros) había escuchado las piezas antes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.