驴C贸mo resolvimos el problema de continuar las listas de reproducci贸n en RecSys Challenge y obtuvimos el 3er lugar?

En 2018, nuestro equipo tradicionalmente particip贸 en el Desaf铆o RecSys . Este es un concurso anual sobre sistemas de recomendaci贸n realizado como parte de la conferencia RecSys. No es tan grande como las competiciones en Kaggle, pero se considera una de las competiciones m谩s prestigiosas en sistemas de recomendaci贸n. Esta vez la tarea era musical: era necesario construir un sistema para continuar autom谩ticamente las listas de reproducci贸n. En esta publicaci贸n, hablo en detalle sobre nuestra decisi贸n. Te invito a gato.



Sobre el concurso


Este a帽o, los datos para la competencia fueron proporcionados por Spotify , un servicio de transmisi贸n de m煤sica (que, lamentablemente, no est谩 oficialmente disponible en la Federaci贸n de Rusia). Las recomendaciones son una de las partes m谩s importantes del producto en Spotify y permiten a los usuarios encontrar nueva m煤sica, crear listas de reproducci贸n o escuchar radio seg煤n sus preferencias.


Los participantes del concurso deb铆an crear un algoritmo de continuaci贸n de lista de reproducci贸n autom谩tica. El conjunto de datos Million Playlist, cuyo nombre habla por s铆 mismo, se present贸 como datos de entrenamiento. Adem谩s de la informaci贸n sobre qu茅 pistas est谩n contenidas en la lista de reproducci贸n, tambi茅n se proporcion贸 metainformaci贸n sobre las pistas: artista, t铆tulo, duraci贸n, nombre del 谩lbum.


Puedes leer m谩s sobre el concurso aqu铆 .



Desaf铆o de la competencia


La tarea de la competencia es cl谩sica para los sistemas de recomendaci贸n: generar recomendaciones top K para el usuario, conociendo el historial de sus acciones, pero en lugar del elemento de usuario habitual, aqu铆 aparece la lista de reproducci贸n. En t茅rminos m谩s formales, partes de las listas de reproducci贸n (en lo sucesivo denominadas semilla) se dieron en los datos de la prueba, y hab铆a varias formas diferentes de formarlas. Para K = (5, 10, 25, 100) hubo semillas con los primeros K tracks y K tracks elegidos al azar. Tambi茅n hubo semillas con la primera pista y solo con el nombre de la lista de reproducci贸n. Las pistas que no se incluyeron en los holdouts tuvieron que predecirse. Para cada lista de reproducci贸n, se requer铆an exactamente 500 predicciones.


M茅tricas


Una de las caracter铆sticas de la competencia fue que la m茅trica no era una, como es habitual en la mayor铆a de las competiciones, sino varias. A continuaci贸n les contar茅 sobre cada uno de ellos.


Precisi贸n R


Esta m茅trica muestra qu茅 proporci贸n de pistas relevantes adivinamos.


Rprecisin= frac|G capR1:|G|||G|


NDCG


Esta es una m茅trica de calidad de clasificaci贸n cl谩sica, puede leer sobre ella, por ejemplo, aqu铆


Clics


Spotify tiene un mecanismo para continuar con la lista de reproducci贸n (puede verla en la captura de pantalla al comienzo del art铆culo): ofrece varias pistas que pueden usarse para expandir la lista de reproducci贸n, y si no aparece ninguna, puede hacer clic en el bot贸n Actualizar y obtener el siguiente lote de recomendaciones. El n煤mero de tales actualizaciones a la primera opci贸n es la m茅trica Clics. M谩s simplemente, la posici贸n de la primera recomendaci贸n relevante (en este caso, dividida por 10).


A continuaci贸n, a los equipos se les asigna un rango para cada una de las m茅tricas. Luego, los rangos se agregan de acuerdo con el esquema de la Estrategia Electoral del Conde Borda. Si pEs el n煤mero de participantes, entonces un equipo con un rango de 1 obtiene p1puntos, un equipo con un rango de 2 recibe p2puntos y as铆 sucesivamente.



Soluci贸n


Esquema de validaci贸n


Para reproducir divisiones de tren / prueba, dividimos el conjunto de datos original en tres partes: la primera parte conten铆a 980k listas de reproducci贸n, la segunda y la tercera parte conten铆an 10k cada una. Luego, cada lista de reproducci贸n de la segunda y la tercera parte se dividi贸 en partes semilla y reserva, y los tama帽os de las partes semilla se seleccionaron de la misma manera que en el conjunto de prueba provisto, y las pistas restantes cayeron en espera.


Selecci贸n de candidatos


Los sistemas recomendados a menudo usan un enfoque de dos etapas: primero, usando un modelo m谩s simple (por ejemplo, factorizaci贸n matricial ), los candidatos se seleccionan de todo el conjunto de elementos, y luego los candidatos se clasifican por un modelo m谩s complejo (por ejemplo, aumento de gradiente ) en un conjunto m谩s amplio de atributos. La selecci贸n de candidatos es necesaria, en primer lugar, debido a los recursos inform谩ticos limitados: si usamos todo el conjunto de pistas disponibles como candidatos, entonces para una lista de reproducci贸n tendr铆amos que conducir alrededor de un mill贸n de objetos a trav茅s del modelo.


Selecci贸n de candidatos mediante factorizaci贸n matricial.


La factorizaci贸n matricial es uno de los enfoques m谩s comunes para construir sistemas de recomendaci贸n. La idea principal de este m茅todo es presentar una matriz escasa de interacciones entre usuarios y elementos en forma de un producto de dos matrices (U e I) de menor dimensi贸n. Entonces podemos obtener recomendaciones para el usuario multiplicando el vector de la matriz U por la matriz I.


Para la factorizaci贸n matricial, utilizamos la biblioteca LightFM con p茅rdida WARP ( Par谩metros ponderados de rango aproximado) . Tambi茅n ten铆amos dos modelos diferentes: uno para las listas de reproducci贸n que tienen una semilla no vac铆a y el otro para las listas de reproducci贸n que solo tienen un nombre (inicio en fr铆o).


P茅rdida de WARP


Esta funci贸n de p茅rdida es mejor que otras en las tareas de clasificaci贸n. Funciona con triples (user, positive_item, negative_item) y tiene una caracter铆stica muy importante: la selecci贸n de ejemplos negativos no ocurre por casualidad, pero de tal manera que los ejemplos negativos seleccionados "rompen" la clasificaci贸n actual del modelo, es decir fueron m谩s altos que un ejemplo positivo.


Por lo tanto, el procedimiento para entrenar a un modelo con p茅rdida de WARP ser谩 aproximadamente el siguiente:


  1. Para una pareja (usuario,positivo item)elegiremos un ejemplo negativo aleatorio entre todos los dem谩s elementos (es importante comprender que esto solo es necesario si la probabilidad de elegir un ejemplo negativo, que en realidad ser谩 positivo, es bastante peque帽a). Calcular la predicci贸n de pareja (usuario,positivo item)y (usuario,negativo item)y si no hubo desorden (es decir, el modelo predijo una puntuaci贸n m谩s alta para un ejemplo positivo), entonces continuamos tomando muestras de ejemplos negativos hasta que ocurra la violaci贸n.
  2. Si recibimos una violaci贸n en el primer intento, entonces podemos dar un gran paso de gradiente, ya que esto significa que en este momento el modelo a menudo pone ejemplos negativos por encima de los positivos y es necesario actualizar sus pesos. Si tuvimos que buscar un ejemplo negativo adecuado durante mucho tiempo, entonces damos un peque帽o paso: el modelo ya est谩 bien entrenado.

Se puede encontrar una descripci贸n m谩s formal de la p茅rdida de WARP en el art铆culo original o en esta publicaci贸n .


Lightfm


La primera versi贸n del modelo utilizaba solo informaci贸n colaborativa: la presencia de la pista track_id en la lista de reproducci贸n playlist_id, presentada como una matriz dispersa binaria. Varias matrices correspond铆an a una lista de reproducci贸n, una columna a una pista.


puntaje(p,t)=bt+bt+<qp,qt>


Funciones de texto LightFM +


Este modelo utiliza incrustaciones de palabras del nombre de la lista de reproducci贸n en lugar de playlist_id. La inclusi贸n de una lista de reproducci贸n es la suma de las incrustaciones de sus palabras.


puntaje(p,t)=bp+bt+<qp,qt>
bp= sumi infpbi, qp= sumi infpqi,
donde fp- Estas son las palabras del nombre de la lista de reproducci贸n.


Por lo tanto, resolvemos el problema de un arranque en fr铆o: podemos ofrecer mejores recomendaciones para las listas de reproducci贸n que solo tienen un nombre.


Los organizadores del concurso tambi茅n proporcionaron informaci贸n sobre cu谩ntas pistas hab铆a en la parte oculta de la lista de reproducci贸n. Si la parte oculta fuera kpistas entonces elegimos max(k15,k+700)candidatos La naturaleza de estos n煤meros es una simple heur铆stica, inventada a partir de las siguientes consideraciones: queremos tener suficientes candidatos para peque帽as listas de reproducci贸n (por lo tanto k+700), y tambi茅n queremos que el conjunto de datos final tenga aproximadamente 10 millones de filas por razones de rendimiento en t茅rminos de tiempo y memoria (por lo tanto, k 15, no k 50, por ejemplo).


Ranking


Despu茅s de haber seleccionado candidatos, podemos considerar la tarea de construir recomendaciones como un problema de clasificaci贸n binaria: para cada una de las pistas en los candidatos seleccionados, aprendemos a predecir si esta pista realmente estaba en la lista de reproducci贸n.


En nuestro conjunto de datos de entrenamiento, cada fila contendr谩 signos para el par (lista de reproducci贸n, pista), y la etiqueta ser谩 1 si hay una pista en la lista de reproducci贸n y 0 si no.


Como signos, se utilizaron varios grupos diferentes.


Caracter铆sticas basadas en el modelo LightFM


Como se describi贸 anteriormente, en el modelo LightFM obtuvimos vectores qp,qty escalares bp,bt.
Como signos usaremos bp,bt, < qp,qt>y el rango de la pista t entre todos los candidatos para la lista de reproducci贸n p (el rango se calcul贸 mediante la f贸rmula ). Estos cuatro atributos fueron tomados de los modelos LightFM y LightFM Text.


Signos basados 鈥嬧媏n la coincidencia de pistas


Dejar ni,jEs la cantidad de listas de reproducci贸n que contienen pistas iy jjuntos tambi茅n ni- n煤mero de listas de reproducci贸n que contienen la pista i. Estos valores se calcularon en un conjunto fijo de listas de reproducci贸n que consta de todas las partes semilla.


Deja que la lista de reproducci贸n pconsiste en pistas t1,t2,...,tn. Para la pista tcalcular los valores nt,t1,nt,t2,...,nt,tny para ellos calcularemos varias estad铆sticas: m铆nimo, m谩ximo, promedio y mediana. Luego calculamos las mismas estad铆sticas para las cantidades  fracnt,t1nt1, fracnt,t2nt2,..., fracnt,tnntn. En el primer caso, solo observamos con qu茅 frecuencia se reuni贸 la pista objetivo junto con las pistas de la lista de reproducci贸n, y en el segundo caso, tambi茅n normalizamos esto a la frecuencia de aparici贸n de otras pistas. La normalizaci贸n ayuda al modelo a no volver a entrenar para pistas populares y extraer con mayor precisi贸n informaci贸n sobre cu谩nto son realmente similares las pistas.


Otros signos


Todas las caracter铆sticas se calculan para el par. (p,t).


  • El n煤mero de artistas 煤nicos en la lista de reproducci贸n. p.
  • N煤mero de 谩lbumes 煤nicos en la lista de reproducci贸n p.
  • N煤mero y porcentaje de pistas en una lista de reproducci贸n pcon el mismo 谩lbum / artista que la canci贸n t.
  • 驴Cu谩ntas veces se encontr贸 la pista? ten todas las listas de reproducci贸n.
  • 驴Cu谩ntas veces rastre贸 el artista / 谩lbum? ten todas las listas de reproducci贸n.
  • El n煤mero de pistas en las partes semilla y reservada de la lista de reproducci贸n p.

Modelo de recomendaci贸n


Para construir las recomendaciones finales, usamos XGBoost . El modelo fue entrenado en IIcandidatos, se seleccionaron hiperpar谩metros en IIIcandidatospor ROC AUC m茅trica. Se eligi贸 esta m茅trica porque es cl谩sica para problemas de clasificaci贸n. No todas las caracter铆sticas son igualmente 煤tiles, por lo que ser谩 interesante observar los valores de importancia de las caracter铆sticas del modelo.


Caracter铆sticaGanar
co-ocurrencia media normalizada
1049
cstextmodelo, producto de punto <qp,qt>101
recuento de listas de reproducci贸n100
co-ocurrencia normalizada max74
rastrea el recuento de reservas63
mediana de concurrencia33
recuento de pistas29
csmodelo, producto de punto <qp,qt>28
cstextmodelo, rango de puntaje26
co-ocurrencia media20

Se puede ver que el signo de co-ocurrencia media normalizada se destaca significativamente de los dem谩s. Esto significa que la informaci贸n sobre la coincidencia de pistas da una se帽al muy fuerte, que, en general, no es sorprendente. Adem谩s, esta caracter铆stica podr铆a usarse como una selecci贸n de candidatos en lugar del modelo LightFM, y esto no dio peores resultados.


Otros


Hierro


Todos los modelos fueron entrenados en el servidor con Intel Xeon E5-2679 v3 (28 n煤cleos, 56 hilos), 256 Gb de RAM. Aprender la tuber铆a final tom贸 aproximadamente 100 horas y consumi贸 200 Gb de memoria en el pico, y una parte significativa (aproximadamente el 90%) del tiempo se dedic贸 a entrenar el modelo de selecci贸n de candidatos. El modelo de clasificaci贸n se entren贸 con bastante rapidez, aproximadamente dos horas (sin contar la selecci贸n de hiperpar谩metros).


Falla


No sin fallas.


En el pen煤ltimo d铆a de la competencia, decidimos organizar un mini-hackathon, al final reunimos todo lo que ten铆amos: selecci贸n de candidatos basada en la concurrencia, un mont贸n de nuevas caracter铆sticas para impulsar, y parece que podr铆a ser as铆.
Pero la velocidad de validaci贸n realmente creci贸 un poco, as铆 que cegamos el env铆o y lo enviamos, planeando que nos quedar铆a un d铆a para arreglar las jambas. Despu茅s de enviar el env铆o, se enteraron de que no era el pen煤ltimo d铆a, sino el 煤ltimo. Y la velocidad de la nueva presentaci贸n fue mucho m谩s baja que nuestra mejor presentaci贸n. No hubo tiempo para averiguar por qu茅 sucedi贸 esto, por lo que saboteamos la mejor presentaci贸n, que permaneci贸 en el tercer lugar.


Tambi茅n en el 煤ltimo d铆a, aprendimos que hay dos tipos diferentes de semillas: con las primeras pistas K y las aleatorias, y en la validaci贸n siempre elegimos las aleatorias, pero es poco probable que esto afecte en gran medida a la tabla de clasificaci贸n.
Un d铆a de la competencia, el valor de la m茅trica R-Precision para todos los equipos en la tabla de clasificaci贸n aument贸 considerablemente. No le dimos ninguna importancia a esto, pero al final de la competencia descubrimos que los organizadores agregaron un componente m谩s a la m茅trica: una coincidencia del artista de la pista. Esto tambi茅n podr铆a agregarse a la m茅trica de validaci贸n y, posiblemente, a una velocidad mejorada.


C贸digo


Nuestra soluci贸n est谩 dise帽ada en forma de computadoras port谩tiles Jupyter y puede reproducirse (!) Al iniciarlas secuencialmente. Solo para esto necesita una m谩quina con 200Gb + RAM y un par de d铆as de tiempo.


Decisiones de otros participantes.


El equipo que gan贸 el primer lugar tambi茅n participa regularmente en el Desaf铆o RecSys y ocupa lugares altos. Su soluci贸n es similar a la nuestra, pero implementada en Java .


Los segundos finalistas tienen un enfoque bastante interesante: utilizaron Denoising Autoencoder para restaurar las listas de reproducci贸n de sus partes .


Conclusi贸n


Si observa la tabla de clasificaci贸n final, nuestro equipo ocupa el sexto y cuarto lugar en las m茅tricas de clasificaci贸n (R-Precision y NDCG), y primero en la m茅trica Clics. Como sucedio Y sucedi贸 as铆 debido a una buena soluci贸n al problema de arranque en fr铆o utilizando el modelo LightFM Text. La m茅trica de clics impone multas m谩s severas cuando no adivinamos una sola pista de una lista de reproducci贸n. El uso del modelo LightFM Text mejor贸 la m茅trica promedio de clics de 2.2 a 1.78.


El enfoque con la selecci贸n de candidatos utilizando un modelo m谩s simple y una clasificaci贸n adicional con un modelo m谩s complejo sigue siendo uno de los m谩s exitosos en los problemas cl谩sicos de la construcci贸n de recomendaciones top-K. Pero al mismo tiempo, es muy importante construir correctamente el esquema de validaci贸n para poder comparar tanto los modelos de selecci贸n de candidatos como los modelos de clasificaci贸n.


Adem谩s, este esquema es bastante adecuado para los sistemas de producci贸n: puede comenzar a construir su sistema de recomendaciones sobre la base de la factorizaci贸n matricial y luego mejorarlo agregando una segunda etapa.


Si tiene alguna pregunta sobre el art铆culo, no dude en hacerla en los comentarios :)


PD: Escribimos un art铆culo m谩s detallado sobre esto para el taller en la conferencia RecSys. El acceso a sus materiales en el sitio es limitado, por lo que si est谩 interesado en conocer un poco m谩s sobre nuestra soluci贸n, escr铆bame en PM.

Source: https://habr.com/ru/post/439206/


All Articles