CĂłmo usamos item2vec para recomendar productos similares

Hola, mi nombre es Vasya Rubtsov, estoy desarrollando sistemas de recomendaciĂłn en Avito.


El objetivo principal del espacio publicitario es ayudar a los vendedores a encontrar compradores y compradores que buscan productos. A diferencia de las tiendas en línea, el hecho de la venta ocurre fuera de nuestra plataforma, y ​​no podemos rastrear esto. Por lo tanto, la métrica clave para nosotros es "contacto": este es el caso de presionar el botón "mostrar teléfono" en la tarjeta del producto, o el comienzo de un diálogo en el mensajero con el vendedor. De esta métrica obtenemos "compradores": la cantidad de usuarios únicos por día que hicieron al menos un contacto.


Los dos productos principales con los que se ocupa el departamento de recomendaciones de Avito son las recomendaciones de los usuarios en la página de inicio o user2item y un bloque de anuncios similares en la tarjeta del producto o item2item. Un tercio de todas las vistas de anuncios y una cuarta parte de todos los contactos provienen de recomendaciones, por lo que los motores de referencia juegan un papel importante en Avito.


En el artículo contaré cómo mejoramos nuestras recomendaciones de item2item debido a item2vec y cómo esto afectó las recomendaciones de user2item.



Como era antes


Anteriormente, para buscar anuncios similares, utilizamos un modelo lineal sobre las características obtenidas para un par de anuncios: el número de palabras coincidentes en el título y la descripción del anuncio, ubicaciones coincidentes, parámetros, proximidad por geografía. Los coeficientes en este modelo fueron seleccionados por bandidos multi-armados. Lo dijimos en un artículo separado .


   , , . ,    Â« wifi » «SQ11» ,  , , . — «  Â», «   », «-» « ». ,   , . «»       ,  .


, ,   .   finn.no "Deep neural network marketplace recommenders in online experiments".


item2vec


item2vec  ,     ,   .


 ,   .   .



    ,  ,  . ,   — .   , ,   ,   ,   .  ?   ,  :



  , 0.6 ± 0.1.       .



 .  , ,   .   ?


, ,   — , ,   . , ,   .   . , . ,      ,  ,   -.


 


  . , , 8 .     3 .



, ,   . ,  desktop   . ,  app — .


  540  180  .



  — 14 . ,   ,   . ,   «» «»  . .   — .


    :



— 128- .


— ,   embedding : , , (  , ) (  ).  title embedding ,   — lstm. — one-hot .   — .


title , ,  .   , .   . , — lstm GRU .    , .


. ,  . —   . , . — , .


  — .  ,  -1  1. ,  128,    int8   .


  . ,  int8.


GPU, 20 . CPU GPU .


,   id  .  , .



, 128- .
   ,   .   :


1. .



2. 4000  ( — ,   GPU)   .   ,     ,  .



3. , .
— . 100    , 100    .



4. — cross entropy loss — .



  , forward  4001 , backward —  101,  ,  .


    500 000 000 () Ă— 4 000 ( ) Ă— 5 () = 10 ^ 13 . 2  4 x Tesla P40.


  :




  : 7    , 6    ,    . ,   , .   prec@8.




  item2vec   « ».    AvitoNet. AvitoNet — ,   .    .     -.


  3    6 .     — 62 .  , — 2048,   GPU,  CPU . :  ,   — , 3 , . , .   ,   , . Prec@8  0,4%, , .




  « »:



  « / /122—128 (6—8 )».   :



  , ,   «» «».


 item2vec :



« ». -, -   «» «».  , ,   «». , — !



    top-n .   Sphinx.    , .  200ms (p99) 200K rpm.



    .     -.    , , - — , .   .


  .



  ,  .   :


sim(i, j) = <v_i, v_j> * (log(t_j + 1) ^ a_c)


i j — , j (t_j = now - start_time_j).


, , ,  , .       . , c â€” a_c. ,   0,   . ,   — .   .  , ,   - . , .



, .
— ,    , , .


 item2vec  30%  ,  20%    .


All Articles