En la captura de pantalla puede ver algunas de nuestras recomendaciones personalizadas sobre Cookidoola plataforma de recetas para el dispositivo de cocina inteligente Thermomix. En este post, quiero ofrecerte información práctica sobre la creación del sistema de recomendación de Cookidoo. Para ello, te guiaré a través de los pasos y describiré los retos a los que nos enfrentamos, las decisiones que tomamos y las lecciones que aprendimos de la construcción de la primera iteración de nuestro sistema de recomendación de recetas.
El desafío
Cookidoo es la plataforma de recetas para el aparato de cocina digital de Vorwerk Thermomix. Actualmente, más de 5 millones de usuarios pueden encontrar más de 80 mil recetas en doce idiomas diferentes en la plataforma Cookidoo. Uno de los valores centrales de la plataforma es permitir a los usuarios encontrar y cocinar recetas que les gusten. Cookidoo cuenta con un excelente equipo de creadores de contenidos y algunas reglas sencillas para la selección automática de recetas, como las recetas más populares. Pero los usuarios tienen gustos diferentes y valoran mucho las experiencias personalizadas (también porque están acostumbrados a las recomendaciones de servicios como Spotify y Netflix). Tener recomendaciones personalizadas de recetas a su alcance puede ser la diferencia entre una plataforma que los usuarios adoran y una experiencia subóptima en la que los usuarios sienten que "no hay recetas para mí". Además, una experiencia personalizada bien elaborada puede reducir los esfuerzos de elección y preparación de comidas durante días ajetreados, inspirar a los usuarios con nuevas ideas culinarias y apoyar una dieta saludable. En consecuencia, la visión de nuestro equipo es Para que su decisión diaria "¿Qué cocinar?" sea fácil y alegre.
Estructura general de los sistemas de recomendación
A menudo se tiene la impresión de que los sistemas de recomendación son modelos de aprendizaje automático de principio a fin en los que se introducen datos para obtener recomendaciones pulidas. Eso no podría estar más lejos de la realidad. El modelado es sólo uno de los muchos pasos que hay que dar para crear sistemas de recomendación. Además, sorprendentemente, estos pasos suelen incluir un gran número de filtros basados en reglas y lógica empresarial.
Para nuestro problema de recomendación, nos ayudó a dividir conceptualmente nuestro sistema en tres componentes:
- Selección de modelosDefina los datos de entrenamiento y encuentre el mejor modelo para su caso de uso.
- Selección de candidatosSeleccione los elementos que considere candidatos a una recomendación.
- Puntuación y clasificaciónPuntúa todas las combinaciones usuario-artículo y crea una clasificación individual de artículos para cada usuario.
A continuación, repasaré con más detalle cada uno de nuestros componentes. Dado que este artículo es parte de una serie de dos partes, voy a cubrir Selección de modelos a continuación y abordaremos el resto de componentes en una segunda entrada del blog.
Para una visión más completa de los componentes de los sistemas de recomendación, recomiendo encarecidamente esta charla por Incluso Oldridge, la entrada del blog por Karl Higleyasí como Diseño de sistemas de recomendación y búsqueda por Eugene Yan. Sin embargo, tenga en cuenta que la mayor parte de la información sobre sistemas de recomendación procede de empresas y expertos que se enfrentan a retos a escala de miles de millones de usuarios y elementos. Por tanto, sé escéptico a la hora de añadir componentes, métodos y tecnologías a tu sistema y evalúa a fondo lo que necesitas para crear una experiencia valiosa para tus usuarios.
Selección de modelos
Utilizar datos de interacción en lugar de datos explícitos
Para los problemas de recomendación en los que se desea recomendar elementos a los usuarios, se puede obtener una buena solución 60-80% utilizando alguna variante de una factorización matricial1 sobre datos de interacción.
Los datos de interacción son datos sobre las interacciones entre sus usuarios y los artículos. En nuestro caso, esto incluye:
- Usuario A receta cocinada Gazpacho.
- El usuario B ha añadido una receta Ensalada de espárragos y mango a su lista de cocina.
- El usuario A ha consultado la página de detalles de la receta Hamburguesas de judías veganas.
Las interacciones culinarias sencillas podrían tener este aspecto en nuestros datos:
datetime | usuario | receta |
---|---|---|
2020-07-14 09:59:28 | Usuario A | Receta 6643 |
2020-04-30 07:42:56 | Usuario B | Receta 6493 |
2020-06-15 14:51:44 | Usuario C | Receta 7393 |
2020-04-13 14:30:24 | Usuario C | Receta 8404 |
2020-06-15 18:27:12 | Usuario D | Receta 8389 |
Estos datos de interacción son mucho más valiosos que las puntuaciones, así que si tienes ambos, ¡empieza siempre por los datos de interacción! Hemos dado prioridad a los datos de cocina y tenemos previsto experimentar pronto con datos de interacción adicionales.
Desde el principio, una gran preocupación para nosotros fue mantener los datos de los usuarios privados, seguros y, como requisito mínimo, conformes con el GDPR. Por supuesto, unas buenas prácticas de privacidad pueden suponer mayores esfuerzos. Sin embargo, crearlas desde el principio es absolutamente necesario y reduce los esfuerzos a largo plazo. Por ejemplo, pregúntese:
- ¿Qué datos de usuario necesito almacenar y durante cuánto tiempo? ¿Cómo puedo minimizar mi necesidad de datos?
- ¿Cómo puedo garantizar el anonimato de los usuarios y sus interacciones?
- ¿Cómo podemos eliminar datos cuando los usuarios optan por no compartirlos?
Selección de datos de entrenamiento: globales o locales
Teníamos tres opciones principales para seleccionar las interacciones con las que entrenar nuestro modelo:
- Formación de un modelo global con todas las interacciones de cocción
- Entrenamiento de un modelo por lengua
- Entrenamiento de un modelo por idioma y región geográfica (por ejemplo, un modelo para interacciones de usuarios de habla inglesa de EE.UU., otro modelo para usuarios de habla inglesa del Reino Unido).
El comportamiento culinario es muy diferente en todo el mundo, y localizar una receta no es tan fácil como cambiar las pistas de audio o añadir subtítulos en el caso de las películas. Además, en Cookidoo, la mayoría de las recetas sólo existen en un idioma. Incluso en el caso de recetas familiares como las tortitas, los ingredientes y la forma de equilibrarlos pueden ser muy específicos de un idioma y una región geográfica. Esto excluye opción 1.
En el lado negativo, esto implica que no podemos aprovechar todo el potencial de nuestros datos para entrenar el modelo. Al fin y al cabo, grupos de gustos como el vegetarianismo o el "gusto por el curry" son estables en todas las regiones. Además, la limitación de los datos de entrenamiento mediante el corte por idiomas (y regiones geográficas) hace que obtener buenos resultados para idiomas con bases de usuarios pequeñas sea increíblemente difícil.
Elegimos Opción 2entrenando un modelo por idioma_ para equilibrar estas dos preocupaciones. Además, para respetar las preferencias regionales de cada usuario, filtramos las recetas que no se ajustan a su región o sistema de medida (métrico frente a imperial) en la fase de selección de candidatos (más información al respecto en el siguiente artículo de esta serie).
Elegir una aplicación - Empezar por lo sencillo
Como queríamos poner a disposición de los usuarios la primera versión de nuestro recomendador lo antes posible, evaluamos dos paquetes de código abierto, Implícito y LightFM. El paquete implícito implementa una versión muy eficiente del algoritmo de factorización de matrices para datos de interacción (para más detalles sobre el algoritmo, véase este artículo Filtrado colaborativo para conjuntos de datos con retroalimentación implícita). El paquete LightFM también implementa un algoritmo de factorización matricial, pero permite incluir información secundaria (por ejemplo, categorías de recetas o etiquetas de recetas).
Al final optamos por el paquete LightFM. Era vital para nosotros conseguir una solución decente lo más rápido posible y mejorar iterativamente a partir de ahí. Tanto Implicit como LightFM funcionan bastante bien e implementan la factorización de matrices de forma eficiente, por lo que no hay que preocuparse demasiado por el rendimiento. Sin embargo, a diferencia del paquete Implicit, LightFM permite añadir metadatos de usuario y de receta para mejorar rápidamente la simple factorización matricial.
El aprendizaje profundo no equivale automáticamente a mejores recomendaciones
El aprendizaje profundo ha ganado últimamente mucha popularidad en el campo de la recomendación. Sin embargo, sólo se pueden esperar mejoras significativas del aprendizaje profundo cuando se utilizan conjuntos de datos de interacción masiva, muchos datos contextuales o metadatos no estructurados como imágenes o textos. Otro problema que el aprendizaje profundo resuelve bien es la recomendación del siguiente elemento de una secuencia (por ejemplo, la predicción de clics en anuncios en línea o la recomendación del siguiente elemento en sesiones de navegación).
Por supuesto, podría haber otras razones para utilizar un marco de aprendizaje profundo como Pytorch o Tensorflow, por ejemplo, un fantástico ecosistema en torno a la monitorización, versionado y servicio de modelos. Sin embargo, estábamos convencidos de progresar más rápido con LightFM, y cambiar más tarde a un marco de DL más expresivo y flexible siempre es posible.
Sobre Spark ML
Cuando comenzamos nuestro viaje de recomendación, nos limitamos a un clúster Hadoop local y utilizamos el paquete spark.ml. Yo no recomendaría seguir este camino. La factorización matricial es bastante ineficiente en Spark debido a la sobrecarga de datos, y probablemente entrenarás tu modelo mucho más rápido en un solo nodo con los paquetes anteriores. A menudo, cuando piensas que tienes demasiados datos para una sola máquina, estás bien después de preparar adecuadamente tus datos y convertirlos a un formato disperso. En mi experiencia, el aprendizaje automático distribuido rara vez merece la pena y crea mucha complejidad innecesaria.
Evaluación de modelos: no se preocupe demasiado por la evaluación offline
Existen dos modos de evaluación de los sistemas de recomendación evaluación offline y evaluación en línea. La evaluación offline es análoga a la evaluación de otros modelos de aprendizaje automático (como la clasificación), es decir, se muestran datos de prueba y se evalúan las predicciones de los modelos con estos datos de prueba. Se trata de evaluar las recomendaciones sin mostrarlas a nadie. En cambio, la evaluación en línea pone a prueba el modelo en directo con los usuarios, normalmente mediante pruebas A/B.2.
La clave para sin conexión recomendación para medir el éxito es no preocuparse demasiado por ello. Dedicamos demasiado tiempo a deliberar sobre la mejor métrica offline a utilizar cuando deberíamos haber invertido el tiempo en otra cosa.
A partir de nuestra experiencia, puedo ofrecer algunas orientaciones:
- No confíes demasiado en las métricas offline. Es difícil interpretar estas métricas y aún más difícil relacionarlas con su problema empresarial. En su lugar, utilice las métricas offline solo como indicación direccional para comparar sus diferentes modelos.
- Si empieza con sistemas de recomendación, utilice NDCG, Precision@k o Mean Reciprocal Rank y preocúpese más adelante de las métricas fuera de línea que puedan ajustarse mejor a su caso de negocio y diseño de recomendación.
- No se centre únicamente en hiperparámetros y métricas offline, sino que haga juicios cualitativos sobre los artículos recomendados. Por ejemplo, descubrimos que las recomendaciones tienden a estar muy sesgadas hacia las recetas populares. Para contrarrestar esta tendencia, restamos los sesgos de los artículos de la puntuación final. Los sesgos de los artículos reflejan la popularidad.
- Invertir pronto en una buena configuración de pruebas A/B y en la definición de métricas de éxito en línea. Por desgracia, empezamos demasiado tarde y subestimamos las dificultades técnicas y organizativas a las que nos enfrentaríamos.
Para más consejos, os dejo con otras lecturas que me ayudaron mucho:
- Karl Higley en Top Model - Cómo evaluar a las modelos que entrena profundiza en el tema. Tiene sugerencias fantásticas como segmentar tus métricas online y offline por usuarios, y atributos de los artículos para ver cómo se distribuye el rendimiento (por ejemplo, usuarios frecuentes frente a usuarios ocasionales, dramas frente a comedias) para identificar a los grupos desatendidos y hacer las mejoras pertinentes.
- En El sistema de recomendación de Netflix: algoritmos, valor empresarial e innovaciónencontrará una excelente descripción de cómo Netflix se decidió por las métricas en línea que apoyan la formación de modelos de recomendación que repercuten positivamente en su modelo de negocio basado en suscripciones.
Resumen y perspectivas
Espero que hayas aprendido algo nuevo de nuestra experiencia con el filtrado previo de datos de formación y la selección de modelos para sistemas de recomendación. En la próxima entrada del blog, hablaré de la sorprendente cantidad de reglas de filtrado sencillas que se utilizan en los sistemas de recomendación modernos y de los retos de ingeniería a la hora de servir recomendaciones a los usuarios de forma eficiente.
Disfruto enormemente enfrentándome a todo tipo de retos con el increíble equipo de Vorwerk Elektrowerke GmbH & Co. KG y Alexander Thamm GmbH. Si a usted también le entusiasman estos retos y quiere trabajar con nosotros, eche un vistazo al
y
.
- Para una excelente introducción a los algoritmos de factorización de matrices, recomiendo la entrada del blog Introducción a la factorización implícita de matrices por Ethan Rosenthal.
- No voy a entrar en más detalles aquí; nuestro viaje A / B Testing es digno de otro artículo de blog en el futuro.
0 comentarios