Comment nous utilisons item2vec pour recommander des produits similaires

Bonjour, je m'appelle Vasya Rubtsov, je développe des systèmes de recommandation à Avito.


L'objectif principal de l'espace publicitaire est d'aider les vendeurs à trouver des acheteurs et des acheteurs à la recherche de produits. Contrairement aux magasins en ligne, le fait de la vente se produit en dehors de notre plateforme, et nous ne pouvons pas le suivre. Par conséquent, la métrique clé pour nous est «contact» - c'est l'événement d'appuyer sur le bouton «show phone» sur la carte du produit, ou le début d'un dialogue dans le messager avec le vendeur. À partir de cette mesure, nous obtenons des «acheteurs» - le nombre d'utilisateurs uniques par jour qui ont établi au moins un contact.


Les deux principaux produits dont s'occupe le service des recommandations d'Avito sont les recommandations des utilisateurs sur la page d'accueil ou user2item et un bloc d'annonces similaires sur la fiche produit ou item2item. Un tiers de toutes les vues d'annonces et un quart de tous les contacts proviennent de recommandations, les moteurs de parrainage jouent donc un rĂ´le important dans Avito.


Dans l'article, je dirai comment nous avons amélioré nos recommandations item2item en raison de item2vec et comment cela a affecté les recommandations user2item.



Comme avant


Auparavant, pour rechercher des annonces similaires, nous utilisions un modèle linéaire sur les fonctionnalités obtenues pour une paire d'annonces: le nombre de mots correspondants dans le titre et la description de l'annonce, les emplacements correspondants, les paramètres, la proximité géographique. Les coefficients de ce modèle ont été sélectionnés par des bandits à plusieurs bras. Nous l'avons dit dans un article séparé .


   , , . ,    Â« 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