paint-brush
Introducción al sistema de recomendación. Parte 1 (Filtrado colaborativo, descomposición de valores singulares)por@huangkh19951228
73,847 lecturas
73,847 lecturas

Introducción al sistema de recomendación. Parte 1 (Filtrado colaborativo, descomposición de valores singulares)

tldt arrow
ES

Demasiado Largo; Para Leer

Un sistema de recomendación se refiere a un sistema que es capaz de predecir la preferencia futura de un conjunto de elementos para un usuario y recomendar los mejores elementos. Una razón clave por la que necesitamos un sistema de recomendación en la sociedad moderna es que las personas tienen demasiadas opciones para usar debido a la prevalencia de Internet. En el pasado, la gente solía comprar en una tienda física, en la que los artículos disponibles son limitados. Por ejemplo, la cantidad de películas que se pueden colocar en una tienda Blockbuster depende del tamaño de esa tienda. Por el contrario, hoy en día, Internet permite a las personas acceder a abundantes recursos en línea. Netflix, por ejemplo, tiene una enorme colección de películas. Aunque la cantidad de información disponible aumentó, surgió un nuevo problema ya que a las personas les resultaba difícil seleccionar los elementos que realmente querían ver. Aquí es donde entra en juego el sistema de recomendación. Este artículo le brindará una breve introducción a dos formas típicas de construir un sistema de recomendación, Filtrado colaborativo y Descomposición de valores singulares.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Introducción al sistema de recomendación. Parte 1 (Filtrado colaborativo, descomposición de valores singulares)
黃功詳 Steeve Huang HackerNoon profile picture

1. Introducción

Un sistema de recomendación se refiere a un sistema que es capaz de predecir la preferencia futura de un conjunto de elementos para un usuario y recomendar los mejores elementos. Una razón clave por la que necesitamos un sistema de recomendación en la sociedad moderna es que las personas tienen demasiadas opciones para usar debido a la prevalencia de Internet. En el pasado, la gente solía comprar en una tienda física, en la que los artículos disponibles son limitados. Por ejemplo, la cantidad de películas que se pueden colocar en una tienda Blockbuster depende del tamaño de esa tienda. Por el contrario, hoy en día, Internet permite a las personas acceder a abundantes recursos en línea. Netflix, por ejemplo, tiene una enorme colección de películas. Aunque la cantidad de información disponible aumentó, surgió un nuevo problema ya que a las personas les resultaba difícil seleccionar los elementos que realmente querían ver. Aquí es donde entra en juego el sistema de recomendación. Este artículo le brindará una breve introducción a dos formas típicas de construir un sistema de recomendación, Filtrado colaborativo y Descomposición de valores singulares.

2. Enfoque tradicional

Tradicionalmente, existen dos métodos para construir un sistema de recomendación:

  • Recomendación basada en el contenido
  • Filtración colaborativa

El primero analiza la naturaleza de cada ítem. Por ejemplo, recomendar poetas a un usuario realizando un procesamiento de lenguaje natural en el contenido de cada poeta. El filtrado colaborativo, por otro lado, no requiere ninguna información sobre los elementos o los propios usuarios. Recomienda elementos basados en el comportamiento anterior de los usuarios. Elaboraré más sobre el filtrado colaborativo en los siguientes párrafos.

3. Filtrado colaborativo

Como se mencionó anteriormente, el filtrado colaborativo (CF) es un medio de recomendación basado en el comportamiento anterior de los usuarios. Hay dos categorías de FQ:

  • Basado en el usuario : mida la similitud entre los usuarios objetivo y otros usuarios
  • Basado en elementos : mida la similitud entre los elementos con los que los usuarios objetivo califican/interactúan y otros elementos

La idea clave detrás de CF es que los usuarios similares comparten el mismo interés y que a un usuario le gustan los elementos similares.

Supongamos que hay m usuarios y n elementos, usamos una matriz con tamaño m*n para indicar el comportamiento pasado de los usuarios. Cada celda de la matriz representa la opinión asociada que tiene un usuario. Por ejemplo, M_{i, j} indica cómo le gusta al usuario i el elemento j. Tal matriz se llama matriz de utilidad . CF es como llenar el espacio en blanco (celda) en la matriz de utilidad que un usuario no ha visto/calificado antes en función de la similitud entre usuarios o artículos. Hay dos tipos de opiniones, la opinión explícita y la opinión implícita . El primero muestra directamente cómo un usuario califica ese elemento (piense en ello como calificar una aplicación o una película), mientras que el último solo sirve como un proxy que nos proporciona heurística sobre cómo le gusta a un usuario un elemento (por ejemplo, número de Me gusta, clics, visitas). La opinión explícita es más directa que la implícita, ya que no necesitamos adivinar qué implica ese número. Por ejemplo, puede haber una canción que le guste mucho al usuario, pero la escucha solo una vez porque estaba ocupado mientras la escuchaba. Sin una opinión explícita, no podemos estar seguros de si al usuario no le gusta ese artículo o no. Sin embargo, la mayoría de los comentarios que recopilamos de los usuarios son implícitos. Por lo tanto, manejar correctamente los comentarios implícitos es muy importante, pero eso está fuera del alcance de esta publicación de blog. Seguiré adelante y discutiré cómo funciona la FQ.

Filtrado colaborativo basado en el usuario

Sabemos que necesitamos calcular la similitud entre los usuarios en el CF basado en el usuario. Pero, ¿cómo medimos la similitud? Hay dos opciones, correlación de Pearson o similitud de coseno. Sea u_{i, k} denota la similitud entre el usuario i y el usuario k y v_{i, j} denota la calificación que el usuario i da al ítem j con v_{i, j} = ? si el usuario no ha valorado ese elemento. Estos dos métodos se pueden expresar de la siguiente manera:

Correlación de Pearson (https://goo.gl/y93CsC)

Semejanza del coseno (https://goo.gl/y93CsC)

Ambas medidas son de uso común. La diferencia es que la Correlación de Pearson es invariable al agregar una constante a todos los elementos.

Ahora, podemos predecir la opinión de los usuarios sobre los elementos no calificados con la siguiente ecuación:

Predicción de artículos sin clasificar (https://goo.gl/y93CsC)

Permítanme ilustrarlo con un ejemplo concreto. En las siguientes matrices, cada fila representa un usuario, mientras que las columnas corresponden a diferentes películas excepto la última que registra la similitud entre ese usuario y el usuario objetivo. Cada celda representa la calificación que el usuario le da a esa película. Suponga que el usuario E es el objetivo.

Dado que el usuario A y F no comparten ninguna clasificación de películas en común con el usuario E, sus similitudes con el usuario E no están definidas en la Correlación de Pearson. Por lo tanto, solo necesitamos considerar a los usuarios B, C y D. Según la correlación de Pearson, podemos calcular la siguiente similitud.

En la tabla anterior, puede ver que el usuario D es muy diferente del usuario E, ya que la correlación de Pearson entre ellos es negativa. Calificó Me Before You más alto que su promedio de calificación, mientras que el usuario E hizo lo contrario. Ahora, podemos comenzar a completar el espacio en blanco para las películas que el usuario E no ha calificado en función de otros usuarios.

Aunque calcular CF basado en el usuario es muy simple, adolece de varios problemas. Un problema principal es que la preferencia de los usuarios puede cambiar con el tiempo. Indica que el precálculo de la matriz en función de sus usuarios vecinos puede conducir a un mal rendimiento. Para abordar este problema, podemos aplicar CF basado en elementos.

Filtrado colaborativo basado en elementos

En lugar de medir la similitud entre los usuarios, el CF basado en elementos recomienda elementos en función de su similitud con los elementos que calificó el usuario objetivo. Asimismo, la similitud se puede calcular con correlación de Pearson o similitud de coseno. La principal diferencia es que, con el filtrado colaborativo basado en elementos, llenamos el espacio en blanco verticalmente, a diferencia de la manera horizontal que lo hace el CF basado en el usuario. La siguiente tabla muestra cómo hacerlo para la película Yo antes de ti .

Evita con éxito el problema planteado por la preferencia dinámica del usuario, ya que el CF basado en elementos es más estático. Sin embargo, quedan varios problemas para este método. En primer lugar, el problema principal es la escalabilidad. El cómputo crece tanto con el cliente como con el producto. La complejidad del caso más desfavorable es O(mn) con m usuarios y n elementos. Además, la escasez es otra preocupación. Echa un vistazo a la tabla anterior de nuevo. Aunque solo hay un usuario que calificó Matrix y Titanic , la similitud entre ellos es 1. En casos extremos, podemos tener millones de usuarios y la similitud entre dos películas bastante diferentes podría ser muy alta simplemente porque tienen un rango similar para el único usuario que los clasificó a ambos.

4. Descomposición de valores singulares

Una forma de manejar el problema de escalabilidad y escasez creado por CF es aprovechar un modelo de factor latente para capturar la similitud entre usuarios y elementos. Esencialmente, queremos convertir el problema de recomendación en un problema de optimización. Podemos verlo como lo buenos que somos en la predicción de la calificación de los elementos dados a un usuario. Una métrica común es el error cuadrático medio (RMSE). Cuanto menor sea el RMSE, mejor será el rendimiento. Dado que no conocemos la calificación de los elementos no vistos, los ignoraremos temporalmente. Es decir, solo estamos minimizando RMSE en las entradas conocidas en la matriz de utilidad. Para lograr un RMSE mínimo, se adopta la descomposición de valores singulares (SVD) como se muestra en la siguiente fórmula.

Descomposición de matriz singular ( http://www.cs.carleton.edu/cs_comps/0607/recommend/recommender/images/svd2.png )

X denota la matriz de utilidad y U es una matriz singular izquierda, que representa la relación entre los usuarios y los factores latentes. S es una matriz diagonal que describe la fuerza de cada factor latente, mientras que la transposición V es una matriz singular recta que indica la similitud entre los elementos y los factores latentes. Ahora, quizás se pregunte qué quiero decir con factor latente aquí. Es una idea amplia que describe una propiedad o concepto que tiene un usuario o un elemento. Por ejemplo, para la música, el factor latente puede referirse al género al que pertenece la música. SVD disminuye la dimensión de la matriz de utilidad al extraer sus factores latentes. Esencialmente, mapeamos cada usuario y cada elemento en un espacio latente con dimensión r . Por lo tanto, nos ayuda a comprender mejor la relación entre los usuarios y los artículos, ya que se vuelven directamente comparables. La siguiente figura ilustra esta idea.

SVD asigna usuarios y elementos al espacio latente ( https://www.youtube.com/watch?v=E8aMcwmqsTg&list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV&index=55 )

SVD tiene una gran propiedad que tiene la reconstrucción mínima Suma de error cuadrático (SSE); por lo tanto, también se usa comúnmente en la reducción de dimensionalidad. La siguiente fórmula reemplaza X con A y S con Σ.

Error de suma de cuadrados ( https://www.youtube.com/watch?v=E8aMcwmqsTg&list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV&index=55 )

Pero, ¿cómo tiene que ver esto con RMSE que mencioné al principio de esta sección? Resulta que RMSE y SSE están monótonamente relacionados. Esto significa que cuanto menor sea el SSE, menor será el RMSE. Con la conveniente propiedad de SVD de que minimiza SSE, sabemos que también minimiza RMSE. Por lo tanto, SVD es una gran herramienta para este problema de optimización. Para predecir el elemento invisible para un usuario, simplemente multiplicamos U, Σ y T.

Python Scipy tiene una buena implementación de SVD para matriz dispersa.






>>> desde scipy.sparse import csc_matrix >>> desde scipy.sparse.linalg import svds >>> A = csc_matrix([[1, 0, 0], [5, 0, 2], [0, -1, 0], [0, 0, 3]], dtype=float) >>> u, s, vt = svds(A, k=2) # k es el número de factores >>> sarray([ 2.75193379, 5.6059665 ] )

SVD maneja con éxito el problema de escalabilidad y escasez planteado por CF. Sin embargo, SVD no está libre de fallas. El principal inconveniente de SVD es que no hay una explicación mínima sobre el motivo por el que recomendamos un artículo a un usuario. Esto puede ser un gran problema si los usuarios están ansiosos por saber por qué se les recomienda un artículo específico. Hablaré más sobre eso en la próxima publicación del blog.

5. Conclusión

He discutido dos métodos típicos para construir un sistema de recomendación, Filtrado Colaborativo y Descomposición de Valor Singular. En la próxima publicación del blog, continuaré hablando sobre algunos algoritmos más avanzados para construir un sistema de recomendación. Si tiene algún problema o pregunta con respecto a este artículo, no dude en dejar un comentario a continuación o enviarme un correo electrónico: [email protected]. Si te gusta esta publicación de blog, ¡asegúrate de seguirme en Twitter para obtener más artículos excelentes sobre aprendizaje profundo!