¿Cómo diseñarías un motor de recomendación musical?

Ok, esta es buena.

El motor de recomendación de música sería un proceso iterativo con una variable de retroalimentación continua. El motor sería un algoritmo autónomo de aprendizaje automático que itera e implementa cambios con la retroalimentación.

Ahora, necesita información básica para alimentar el sistema, digamos que le pide al usuario 15 canciones básicas (que le gustan). Cuanto más no. de canciones que tomes mejor, estoy tomando un número bajo por simplicidad.

Diseño del algoritmo: la música es una función muy compleja con muchas variables interdependientes. Intentemos simplificarlos y establecer relaciones entre ellos. Una vez que tenga las 15 canciones, puede clasificarlas en función de las siguientes variables (3, en realidad habría más):

  1. Género
  2. Artista
  3. Y los tipos de Raga (hay varios trapos en la música clásica india en los que se componen la mayoría de las canciones).

Ahora asigna un factor multiplicador (número 1–3) a cada una de estas variables, es decir, la importancia que tiene cada una de estas variables para que cualquier canción sea popular. La lógica detrás de esto es que cada canción tendrá los atributos anteriores, y si elimina uno o los atributos anteriores de la canción, ¿cómo cambia la canción? Digamos que si cambia la raga en la que se basa, la canción cambia significativamente y, por lo tanto, le asignamos un número más alto. Sin embargo, si el artista no es tan importante para la canción, le asigna un número más bajo. Haces esto por muchas (digamos 10,000) canciones. Después de hacer esto, debes obtener ciertas categorías de canciones. para. por ejemplo (Cat A; con puntajes variables promedio respectivos de (1,4,5). De manera similar, habría otras categorías. Por lo tanto, las categorías totales posibles son 3x3x3 = 27.

Las 10,000 canciones analizadas encajarán en una de las 27 categorías y se distribuirán.

(Me doy cuenta aquí de que solo se toman 3 variables y el rango del factor multiplicador también es muy pequeño, si aumentamos estas, digamos 5 variables y el rango multiplicador de 1 a 5, tendríamos 5 ^ 5 casos).

Ahora, analizamos las 15 canciones que le gustan a esta persona, las ponemos en estas 27 categorías y sugerimos otras canciones de la misma categoría. Sin embargo, esto no dará resultados perfectos.

Digamos que a una persona le gustan las canciones en la categoría de 3,1,2, es decir, que le gusta el género pop, el artista no es tan relevante y en una melodía particular (raga). Le sugieres otra canción de la misma categoría y no le gusta. Entonces, le sugieres, 3,3,3, i, e. una canción en pop, cantada por el mismo artista que antes, pero en una raga diferente. A él le gusta esta recomendación. Así que aquí corregimos nuestra hipótesis de que el artista no es importante en la canción que fue rechazada (tenga en cuenta que cambiamos la raga aquí ). Del mismo modo, aumentamos gradualmente el número de variables y el factor multiplicador, iteramos repetidamente y sugerimos.

Voy a profundizar en esto, mencionando que mi único problema con la música fue generar música usando Redes Neuronales Recurrentes, hace un par de meses. Sin embargo, podemos lograr mucho sin tener que entrar en las funciones de audio o la clasificación de la música. Los sistemas de recomendación que implican la factorización matricial pueden reconocer varias de estas dimensiones latentes (es decir, ocultas ) por sí mismas, sin tener que codificarlas explícitamente. Así que así es como construiría un sistema de recomendación de música:

  1. Comience con alguna señal de retroalimentación explícita.
    Las calificaciones son una buena señal explícita para la evaluación del modelo. También podríamos usar señales binarias como “Acepto / No estoy de acuerdo” o “Me gusta / No me gusta”. Un modelo simple de factor latente funcionaría bien, observando la compatibilidad de elementos de usuario basada en estas dimensiones.
    [matemáticas] r_ {ui} = \ alpha + \ beta_u + \ beta_i + \ gamma_u. \ gamma_i [/ ​​matemáticas]
    donde [math] r_ {ui} [/ math] es la calificación del elemento [math] i [/ math] para el usuario [math] u [/ math], con el valor alfa como el desplazamiento global, betas es el usuario y sesgos de elementos, los valores gamma son las dimensiones latentes.
    MSE podría usarse como una métrica de evaluación, ya que tenemos una verdad básica explícita para comparar.
  2. Incorporar un modelo en la configuración de retroalimentación implícita.
    Puede hacer mucho sin tener que conocer los aspectos cualitativos de la interacción usuario-elemento. Solo el conocimiento de las interacciones entre usuarios y elementos es adecuado para construir un modelo de factor latente. Uno de estos algoritmos poderosos es BPR-MF / kNN que utiliza la Clasificación personalizada bayesiana [1] (BPR-OPT) como criterio de optimización. Esto se basa en la estimación de máxima verosimilitud derivada de un análisis bayesiano del problema.
    Sin entrar en detalles, mencionaré el BPR-OPT:
    [matemáticas] BPR-OPT: \ sum _ {(u, i, j) \ en D_s} ln \ sigma (x_ {uij}) – \ lambda _ {\ Theta} \ lVert \ Theta \ rVert ^ 2 [/ math]
    Podríamos usar una métrica como AUC promedio para evaluar nuestro modelo
  3. Incorporar dinámicas temporales.
    La suposición de que a los usuarios les gusta escuchar pop o metal durante toda su vida sería incorrecta. Además, los usuarios desarrollan un gusto en música específica a medida que escuchan más música. Este aspecto de ganar experiencia se puede modelar como un proxy para incorporar el tiempo. Esto se puede implementar como una progresión a través de varios niveles de experiencia, donde cada nivel de experiencia tiene su propio sistema de recomendación con sus parámetros. Si el sistema de recomendación utilizara un modelo de factor latente, podríamos tener cada parámetro del modelo en función del tiempo (experiencia proxy). También podríamos considerar el aprendizaje a nivel de usuario o de la comunidad. Se ha demostrado que el aprendizaje a nivel individual proporciona una mejora significativa en el rendimiento del modelo. [2]
  4. Incorporar modelo basado en la comunidad.
    Las comunidades son un aspecto natural de la vida. En un grupo, compartimos intereses, gustos y aversiones comunes. Varios de mis artículos musicales favoritos eran recomendaciones de amigos. Por lo tanto, una comunidad puede ser vital para las interacciones entre usuarios y elementos. La detección de comunidades también es importante, ya que esta información no se proporciona necesariamente en un entorno en línea, sin importar cómo empiece.
    Los simples datos de enlace entre usuarios no son suficientes. Una buena configuración es donde el modelo basado en gráficos de usuario también incorpora la predicción de enlaces y la detección de la comunidad en múltiples niveles (comunidades jerárquicas)
  5. Use las funciones de música / audio.
    Esta idea se basa completamente en la implementación de BPR visual [3] donde los autores usan señales visuales además de las dimensiones latentes para proporcionar una clasificación personalizada. Una simple ilustración de la idea es que los usuarios que buscan una camisa en Amazon pueden ignorar todas las camisas rosas. La característica visual de ” camisa rosa ” es compatible con la preferencia de los usuarios de ” no camisas rosas “. El modelo por lo tanto sería:

    [matemáticas] r_ {ui} = \ alpha + \ beta_u + \ beta_i + \ gamma_u. \ gamma_i + \ theta_u. \ theta_i [/ ​​math]

    donde [math] \ theta [/ math] son ​​las características visuales. El aspecto más difícil es la decodificación de las características visuales, para lo cual los autores usan una CNN profunda previamente entrenada.
    Se puede adoptar un enfoque similar para decodificar las características de audio, proporcionar los factores del usuario correspondientes a estas características y usarlo junto con los factores latentes.

    La pregunta importante aquí es cómo extraer esas características de audio. Como alguien que no está bien versado en música, busqué la investigación sobre esto. Este es un campo de investigación interesante, con desafíos en partituras vs no partituras, música monofónica vs música polifónica. Mi conjetura para algunas características fue melodía, clase de acordes, géneros, variaciones de tono y notas (para partituras). No sabía que existe una característica bien definida del coeficiente cepstral de frecuencia de mel (MFCC) ampliamente utilizada en el reconocimiento de voz. [4]

    Uno puede notar aquí que tal uso explícito de características no latentes resolvería los problemas de arranque en frío. No tenemos que confiar en descubrir algo de la nada, ya que al menos tenemos algo de información.

  6. Agregue algo de aprendizaje de refuerzo
    En ocasiones estocásticas, me gustaría que el sistema de recomendación también recomendara algo fuera de mi lista de preferencias. El desafío aquí es cuándo desea continuar proporcionando recomendaciones estándar basadas en preferencias y cuándo desea proporcionar recomendaciones aleatorias e inexploradas. Esto se llama compensación de exploración-explotación. Se puede controlar mediante una penalización en la exploración de nuevos elementos y cómo los usuarios interactúan con dichos elementos.
    Hay un término hermoso para esto llamado “recomendaciones fortuitas”, que conocí en [5], básicamente “suerte por casualidad” o suerte de que al usuario le haya gustado.

Por último, apostaría mi dinero en un modelo híbrido para superar cualquier modelo individual. Observo que para todos estos modelos, uno debe reunir una cantidad significativa de datos en términos de interacción entre usuarios y elementos, o preparar datos en términos de extracciones de características y factores de usuario.

Notas al pie

[1] Clasificación personalizada bayesiana de la retroalimentación implícita

[2] https://cs.stanford.edu/people/j

[3] https://cseweb.ucsd.edu/~jmcaule

[4] http://aircconline.com/sipij/V4N

[5] Evaluación de sistemas de recomendación de música híbrida