2010-05-08 13 views
19

Me pregunto lo que sería algoritmo inteligente para utilizar para una etiqueta impulsada entorno de comercio electrónico:Tag/recomendación basada palabra clave

  • Cada artículo tiene varias etiquetas. IE:

    artículo Nombre: "Metallica - Negro CD Álbum", Etiquetas: "Metallica", "negro-álbum", "piedra", "música"

  • Cada usuario tiene varias etiquetas y amigos (otros usuarios) vinculados a ellos. IE:

    Nombre de usuario: "testguy", Intereses: "pitón", "piedra", "metal", "equipo-ciencia" Amigos:, "testguy3" "testguy2"

Necesito generar recomendaciones para dichos usuarios al revisar sus etiquetas de interés y generar recomendaciones de una manera sofisticada.

Ideas:

  • Un algoritmo de recomendación híbrido se puede utilizar como cada usuario tiene amigos (mezcla de recomendaciones basadas + contexto en colaboración)..
  • Quizás utilizando etiquetas de usuario, usuarios similares (pares) se pueden encontrar para generar recomendaciones.

  • Quizás etiquetas que coincidan directamente entre los usuarios y los elementos a través de etiquetas.

Cualquier sugerencia es bienvenida. Cualquier biblioteca basada en Python también es bienvenida, ya que haré este motor experimental en lenguaje Python.

+5

duplicado exacto: http://stackoverflow.com/questions/2704845/python-recommendation-engine – msw

+3

Mucho mejor pregunta, sin embargo. – whybird

+0

Votación para cerrar como demasiado amplia/herramienta rec. –

Respuesta

18

1) Pese sus etiquetas.

Etiquetas dividen en varios grupos de interés:

  • My tags que ninguno de mis amigos comparten
  • etiqueta una serie de amigos mi acción, pero no
  • Mis etiquetas que son compartidos por un número de mis amigos.

(A veces es conveniente considerar amigo-de-un-amigo Tags también, pero en mi experiencia el esfuerzo no ha valido la pena. YMMV.)

Identificar todas las etiquetas que la persona y/o los amigos de la persona tienen intereses, y atribuyen un peso a las etiquetas para esta persona. Una fórmula simple posible para el peso etiqueta es

(tag_is_in_my_list) * 2 + (friends_with_tag)/(number_of_friends) 

Nota 2 el número mágico, que hace su propia opinión vale el doble que la de todos sus amigos juntos.No dude en para modificar :-)

2) Peso sus artículos

Para cada elemento que tiene cualquiera de las etiquetas en su lista, simplemente se suman todos los valores ponderados de las etiquetas. Un valor más alto = más interés.

3) Aplicar un umbral.

La manera más simple es mostrar al usuario los primeros n resultados.

Los sistemas más sofisticados también aplican etiquetas anti-etiquetas (es decir, temas de no interés) y hacen muchas otras cosas, pero he encontrado que esta fórmula simple es efectiva y rápida.

+1

¡Muchas gracias por su amable respuesta! Estoy un poco confundido acerca de la fórmula: ¿qué significa exactamente tag_is_in_my_list? si es algún tipo de binario como 1 o 0? Cheers – Hellnar

+2

Sí, un binario 1 o 0. – whybird

+0

cualquier ejemplo/implementación de ejemplo en este – user962206

4

Si puede, busque una copia de O'Reilly's Programming Collective Intelligence, de Toby Segaran. Hay una solución modelo para exactamente este problema (con un montón de otras cosas muy, muy buenas).

0

Su problema es similar a los motores de recomendación de productos, como el sitio muy publicitado de Amazon. Estos usan un algoritmo de aprendizaje llamado association rules, que básicamente construye una probabilidad condicional de que el usuario X compre el producto Y en base a las características comunes Z entre el usuario y el producto. Una gran cantidad de kits de herramientas de código abierto implementan reglas de asociación, como Orange y Weka.

0

Puede usar el Python Semantic module para Drools para especificar sus reglas en el lenguaje de scripts Python. Puedes lograr esto fácilmente usando Drools. Es un excelente motor de reglas que usamos para resolver varios motores de recomendación.

0

Usaría una máquina de Boltzmann restringida. Obtiene el problema de etiquetas similares pero no idénticas bastante bien.

+0

¿Podría responder a esta pregunta un poco más, como HOME usaría un RBM? – dwanderson

+0

@dwanderson ¿Has leído la página de WP sobre RBM? – isomorphismes