Bagaimana kami menggunakan item2vec untuk merekomendasikan produk serupa

Hai, nama saya Vasya Rubtsov, saya sedang mengembangkan sistem rekomendasi di Avito.


Tujuan utama ruang iklan adalah untuk membantu penjual menemukan pembeli, dan pembeli yang mencari produk. Tidak seperti toko online, fakta penjualan terjadi di luar platform kami, dan kami tidak dapat melacaknya. Oleh karena itu, metrik utama bagi kami adalah "kontak" - ini adalah acara menekan tombol "show phone" pada kartu produk, atau awal dari dialog di messenger dengan penjual. Dari metrik ini kita mendapatkan "pembeli" - jumlah pengguna unik per hari yang melakukan setidaknya satu kontak.


Dua produk utama yang ditangani oleh departemen rekomendasi Avito adalah rekomendasi pengguna di beranda atau user2item dan satu blok iklan serupa di kartu produk atau item2item. Sepertiga dari semua tampilan iklan dan seperempat dari semua kontak berasal dari rekomendasi, sehingga mesin rujukan memainkan peran penting dalam Avito.


Dalam artikel ini saya akan memberi tahu bagaimana kami meningkatkan rekomendasi item2item kami karena item2vec dan bagaimana hal ini memengaruhi rekomendasi user2item.



Seperti sebelumnya


Sebelumnya, untuk mencari iklan serupa, kami menggunakan model linier pada fitur yang diperoleh untuk sepasang iklan: jumlah kata yang cocok dalam judul dan deskripsi iklan, lokasi yang cocok, parameter, kedekatan dengan geo. Koefisien dalam model ini dipilih oleh bandit multi-bersenjata. Kami mengatakan ini dalam artikel terpisah .


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