Wie wir item2vec verwenden, um Àhnliche Produkte zu empfehlen

Hallo, mein Name ist Vasya Rubtsov, ich entwickle Empfehlungssysteme in Avito.


Der Hauptzweck der WerbeflĂ€che besteht darin, VerkĂ€ufern dabei zu helfen, KĂ€ufer und KĂ€ufer zu finden, die nach Produkten suchen. Im Gegensatz zu Online-Shops erfolgt der Verkauf außerhalb unserer Plattform, und wir können dies nicht nachverfolgen. Daher ist die SchlĂŒsselmetrik fĂŒr uns "Kontakt" - dies ist das DrĂŒcken der Taste "Telefon anzeigen" auf der Produktkarte oder der Beginn eines Dialogs im Messenger mit dem VerkĂ€ufer. Aus dieser Metrik erhalten wir "KĂ€ufer" - die Anzahl der eindeutigen Benutzer pro Tag, die mindestens einen Kontakt hergestellt haben.


Die beiden Hauptprodukte, mit denen sich die Empfehlungsabteilung von Avito befasst, sind Benutzerempfehlungen auf der Homepage oder user2item und ein Block Àhnlicher Anzeigen auf der Produktkarte oder item2item. Ein Drittel aller Anzeigenaufrufe und ein Viertel aller Kontakte stammen aus Empfehlungen, sodass Empfehlungs-Engines in Avito eine wichtige Rolle spielen.


In diesem Artikel werde ich erlÀutern, wie wir unsere item2item-Empfehlungen aufgrund von item2vec verbessert haben und wie sich dies auf die user2item-Empfehlungen auswirkte.



Wie es vorher war


Zuvor verwendeten wir zur Suche nach Ă€hnlichen Anzeigen ein lineares Modell fĂŒr Funktionen, die fĂŒr ein Anzeigenpaar erhalten wurden: Anzahl der ĂŒbereinstimmenden Wörter im Titel und Beschreibung der Anzeige, ĂŒbereinstimmende Standorte, Parameter, NĂ€he nach Geo. Die Koeffizienten in diesem Modell wurden von mehrarmigen Banditen ausgewĂ€hlt. Wir haben dies in einem separaten Artikel erzĂ€hlt .


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