Pemasaran ulang dinamis MyTarget: rekomendasi produk non-pribadi



Pemasaran ulang dinamis (dynrem) di myTarget adalah teknologi iklan bertarget yang menggunakan informasi tentang tindakan pengguna di situs web dan dalam aplikasi seluler pengiklan. Misalnya, di toko online, pengguna melihat halaman barang atau menambahkannya ke keranjang, dan myTarget menggunakan acara ini untuk menampilkan iklan untuk barang dan jasa yang tepat yang telah diminati oleh seseorang. Hari ini saya akan berbicara lebih rinci tentang mekanisme untuk menghasilkan non-pribadi, yaitu, rekomendasi item2item, yang memungkinkan kita untuk melakukan diversifikasi dan melengkapi hasil iklan.

Pelanggan untuk dynrem myTarget terutama adalah toko online, yang dapat memiliki satu atau beberapa daftar produk. Saat membangun rekomendasi, pasangan "toko - daftar barang" harus dianggap sebagai unit terpisah. Tetapi untuk kesederhanaan, kita cukup menggunakan "toko" berikutnya. Jika kita berbicara tentang dimensi tugas input, maka rekomendasi harus dibangun untuk sekitar seribu toko, dan jumlah barang dapat bervariasi dari beberapa ribu hingga jutaan.

Sistem rekomendasi untuk dynrem harus memenuhi persyaratan berikut:

  1. Spanduk berisi produk yang memaksimalkan RKPT-nya.
  2. Rekomendasi dibuat offline untuk waktu tertentu.
  3. Arsitektur sistem harus fleksibel, dapat diskalakan, stabil, dan bekerja di lingkungan yang mulai dingin.

Perhatikan bahwa dari persyaratan untuk membangun rekomendasi untuk waktu yang tetap dan kondisi awal yang dijelaskan (kami akan secara optimis mengasumsikan bahwa jumlah toko meningkat), suatu persyaratan secara alami muncul untuk penggunaan sumber daya mesin secara ekonomis.

Bagian 2 berisi landasan teori untuk membangun sistem anjuran, bagian 3 dan 4 membahas sisi praktis masalah ini, dan bagian 5 merangkum hasil keseluruhan.

Konsep dasar


Pertimbangkan tugas membangun sistem rekomendasi untuk satu toko dan buat daftar pendekatan matematika dasar.

Dekomposisi Nilai Singular (SVD)


Pendekatan populer untuk membangun sistem rekomendasi adalah pendekatan dekomposisi singular (SVD). Matriks penilaian R=(rui) mewakili sebagai produk dari dua matriks P dan Q jadi itu R approxPQT lalu beri peringkat pengguna u untuk barang i direpresentasikan sebagai  hatrui=<pu,qi> [1], di mana elemen-elemen produk skalar adalah vektor dimensi k (parameter utama model). Formula ini berfungsi sebagai dasar untuk model SVD lainnya. Tugas menemukan P dan Q Itu datang ke optimasi fungsi:

(2.1)

J(P,Q)= jumlah(u,i) mathcalL(rui, hatrui)+ Lambda(P,Q) rightarrow minP,Q,


dimana L - fungsi kesalahan (misalnya, RMSE seperti dalam kompetisi Netflix ), Ξ› - regularisasi, dan penjumlahannya lebih dari pasangan yang peringkatnya diketahui. Kami menulis ulang ekspresi (2.1) dalam bentuk eksplisit:

(2.2)

J(P,Q)= jumlah(u,i)(ruiβˆ’<pu,qi>)2+ lambda1||pu||2+ lambda2||qi||2 rightarrow minP,Q,


Di sini Ξ»1 , Ξ»2 - Koefisien regularisasi L2 untuk representasi pengguna pu dan barang qi sesuai. Model dasar untuk kompetisi Netflix adalah:

(2.3)

 hatrui= mu+bu+bi+<pu,qi>,


(2.4)

J(P,Q)= jumlah(u,i)(ruiβˆ’ muβˆ’buβˆ’biβˆ’<pu,qi>)2+ lambda1||pu||2+ lambda2||qi||2+ lambda3b2u+ lambda4b2i rightarrow minP,Q,


dimana ΞΌ , bu dan bi - bias untuk peringkat, pengguna dan produk, masing-masing. Model (2.3) - (2.4) dapat ditingkatkan dengan menambahkan preferensi pengguna implisit untuk itu. Dalam contoh kompetisi Netflix, respons eksplisit adalah skor yang ditetapkan oleh pengguna untuk film "atas permintaan kami", dan informasi lain tentang "interaksi pengguna dengan produk" (melihat film, uraiannya, ulasan tentangnya; yaitu, respons implisit tidak memberikan respons implisit) informasi langsung tentang peringkat film, tetapi pada saat yang sama menunjukkan minat). Akuntansi respon implisit diimplementasikan dalam model SVD ++:

(2.5)

 hatrui= mu+bu+bi+<pu+ frac1 sqrt sigmau sumj dalamS(u)yj, ,qi>,


dimana S(u) - satu set objek yang berinteraksi dengan pengguna secara implisit, Οƒu=|S(u)|,yj - representasi dimensi k untuk objek dari S(u) .

Mesin Factorization (FM)


Seperti dapat dilihat dalam contoh dengan model SVD yang berbeda, satu model berbeda dari yang lain dalam serangkaian istilah yang termasuk dalam formula evaluasi. Selain itu, perluasan model setiap kali mewakili tugas baru. Kami ingin perubahan tersebut (misalnya, menambahkan jenis respons implisit baru, dengan mempertimbangkan parameter waktu akun) agar mudah diimplementasikan tanpa mengubah kode implementasi model. Model (2.1) - (2.5) dapat direpresentasikan dalam bentuk universal yang nyaman menggunakan parameterisasi berikut. Kami mewakili pengguna dan produk sebagai serangkaian fitur:

(2.6)

 overlinexU=(xU1,xU2, dots,xUl) dalam mathbbRl,



(2.7)

 overlinexI=(xI1,xI2, dots,xIm) dalam mathbbRm




Fig. 1: Contoh matriks fitur dalam kasus CF.

Misalnya, dalam kasus filter kolaboratif (CF), ketika hanya data tentang interaksi pengguna dan produk yang digunakan, vektor fitur terlihat seperti kode satu-panas (Gbr. 1). Perkenalkan vektor  overlinex=( overlinexU, overlinexI) , maka tugas rekomendasi dikurangi menjadi masalah regresi dengan variabel target rui :

  1. Model Linier:
    (2.8)

    hlin( overlinex)=w0+ suml+mj=1wjxj

  2. Poly2:
    (2.9)

    hpoly2( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1wijxixj

  3. FM:
    (2.10)

    hFM( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1xixj< overlinevi, overlinevj>


dimana wj - parameter model, vi Apakah vektor dimensi k mewakili tanda i di ruang laten l dan m - jumlah tanda-tanda pengguna dan produk, masing-masing. Selain kode satu-panas, fitur berbasis konten (Berbasis konten, CB) dapat berfungsi sebagai tanda (Gbr. 2), misalnya, deskripsi vektor produk dan profil pengguna.


Fig. 2: Contoh matriks fitur yang diperluas.

Model FM yang diperkenalkan pada [2] adalah generalisasi untuk (2.1) - (2.5), (2.8), (2.10). Inti dari FM adalah memperhitungkan interaksi berpasangan dari fitur menggunakan produk skalar < overlinevi, overlinevj> , tidak menggunakan parameter wij . Keuntungan FM over Poly2 adalah pengurangan signifikan dalam jumlah parameter: untuk vektor vi kami akan membutuhkan (l+m)Β·k parameter, dan untuk wij akan diminta lmm parameter. Di l dan m pesanan besar, pendekatan pertama menggunakan parameter secara signifikan lebih sedikit.

Harap dicatat: jika tidak ada pasangan khusus di set pelatihan (i,j) , maka istilah yang sesuai dengan wij dalam Poly2 itu tidak mempengaruhi pelatihan model, dan skor penilaian hanya terbentuk pada bagian linier. Namun, pendekatan (2.10) memungkinkan kita untuk membangun hubungan melalui fitur-fitur lainnya. Dengan kata lain, data pada satu interaksi membantu mengevaluasi parameter atribut yang tidak termasuk dalam contoh ini.

Atas dasar FM, model hybrid disebut diimplementasikan di mana atribut CB ditambahkan ke atribut CF. Ini memungkinkan Anda untuk memecahkan masalah awal yang dingin, dan juga mempertimbangkan preferensi pengguna akun dan memungkinkan Anda membuat rekomendasi yang dipersonalisasi.

Lightfm


Dalam implementasi FM yang populer, penekanannya adalah pada pemisahan antara karakteristik pengguna dan produk. Matriks bertindak sebagai parameter model EU dan EI Pengajuan fitur kustom dan produk:

(2.11)

EU= beginpmatrix overlineeU1 vdots overlineeUl endpmatrix,EI= beginpmatrix overlineeI1 vdots overlineeSmaya endpmatrix, overlineeUi dalam mathbbRk, overlineeIi in mathbbRk


dan juga offset  overlinebU, overlinebI in mathbbRk . Menggunakan tampilan pengguna dan produk:

(2.12)

 overlinepU= overlinexU cdotEU= sumlj=1xUj cdot overlineeUj,


(2.13)

 overlineqI= overlinexSaya cdotEI= summj=1xSjaya cdot overlineeIj,


dapatkan peringkat pasangan (u,i) :

(2.14)

 hatrui=< overlinepU, overlineqI>+< overlinexU, overlinebU>+< overlinexI, overlinebI>.


Fungsi kerugian


Dalam kasus kami, perlu memberi peringkat produk untuk pengguna tertentu sehingga produk yang lebih relevan memiliki peringkat lebih tinggi daripada yang kurang relevan. LightFM memiliki beberapa fungsi kerugian:

  1. Logistik adalah implementasi yang membutuhkan negatif yang tidak secara eksplisit disajikan dalam sebagian besar tugas.
  2. BPR [3] adalah untuk memaksimalkan perbedaan peringkat antara contoh positif dan negatif untuk pengguna tertentu. Negatif diperoleh dengan menggunakan bootstrap sampling. Kualitas fungsional yang digunakan dalam algoritma ini mirip dengan ROC-AUC.
  3. WARP [4] berbeda dari BPR dalam metode sampel contoh negatif dan fungsi kerugian, yang juga peringkat, tetapi pada saat yang sama mengoptimalkan rekomendasi teratas untuk pengguna.

Implementasi praktis


Untuk membangun rekomendasi untuk waktu tertentu, implementasi paralel pada Spark digunakan. Tugas independen diluncurkan untuk setiap toko, yang pelaksanaannya dikendalikan oleh luigi.

Pra-pemrosesan data


Preprocessing data dilakukan oleh alat Spark SQL yang dapat diskalakan. Fitur yang dipilih dalam model akhir adalah deskripsi tekstual barang dan katalog dengan konversi standar.

Apa yang membantu kami saat berinteraksi dengan Spark:

  1. Mempartisi data yang disiapkan (matriks interaksi pengguna dan produk, tanda untuk mereka) oleh toko. Ini memungkinkan Anda menghemat waktu selama fase pelatihan membaca data dari HDFS. Jika tidak, setiap tugas harus membaca data ke dalam memori Spark dan memfilternya dengan menyimpan ID.
  2. Menyimpan / menerima data ke / dari Spark dilakukan sebagian. Hal ini disebabkan oleh fakta bahwa selama tindakan ini, data dimuat ke dalam memori JVM. Mengapa tidak menambah memori untuk JVM saja? Pertama, maka memori yang tersedia untuk melatih model menurun, dan kedua, tidak perlu menyimpan apa pun di JVM, karena bertindak dalam hal ini sebagai penyimpanan sementara.

Pelatihan model


Model untuk setiap toko dilatih dalam wadah Sparknya sendiri, sehingga Anda dapat secara bersamaan menjalankan sejumlah tugas sewenang-wenang untuk toko, hanya dibatasi oleh sumber daya cluster.

LightFM tidak memiliki mekanisme penghentian dini, oleh karena itu, kami menghabiskan sumber daya tambahan untuk iterasi pelatihan tambahan ketika tidak ada peningkatan dalam metrik target. Kami memilih AUC sebagai metrik, hubungan yang dengan RKT dikonfirmasi secara eksperimental.

Nyatakan:

S - semua interaksi yang diketahui antara pengguna dan produk, yaitu pasangan (u,i) ,
I - Banyak sekali barang i ,
U - Banyak dari semua pengguna u .
Untuk pengguna tertentu u juga memperkenalkan Iu=i∈I:(u,i)∈S - Banyak produk yang berinteraksi dengan pengguna. AUC dapat dihitung sebagai berikut [ref]:

(3.1)

AUC(u)= frac1| mathcalIu|| mathcalI setminus mathcalIu| sumi in mathcalIu sumj in mathcalI setminus mathcalIu delta( hatrui> hatruj),


(3.2)

AUC= frac1| mathcalU| sumu in mathcalUAUC(u).


Dalam rumus (3.1) kita perlu menghitung peringkat untuk semua pasangan yang memungkinkan (u,i) ( u tetap), serta membandingkan peringkat untuk item dari  mathcalIu dengan peringkat dari  mathcalI setminus mathcalIu . Mengingat bahwa pengguna berinteraksi dengan bagian assortment yang sedikit, kompleksitas perhitungannya adalah O(| mathcalU|| mathcalI|) . Pada saat yang sama, satu era pelatihan FM membebani kita O(| mathcalU|) .

Karena itu, kami memodifikasi perhitungan AUC. Pertama, Anda harus membagi sampel menjadi pelatihan  mathcalStrain subset mathcalS dan validasi  mathcalSval subset mathcalS , dan  mathcalSval= mathcalS setminus mathcalStrain . Selanjutnya, kami menggunakan pengambilan sampel untuk membuat banyak pengguna untuk validasi \ mathcal {U} ^ {val} \ subset \ {u \ in \ mathcal {U}: (u, i) \ in \ mathcal {S} ^ {val} \} . Untuk pengguna u dari  mathcalUval unsur-unsur kelas positif akan dianggap banyak \ mathcal {I} _u ^ {+} = \ {i \ in \ mathcal {I}: (u, i) \ in \ mathcal {S} ^ {val} \} serupa  mathcalIu . Sebagai elemen dari kelas negatif, kami mengambil subsampel  mathcalIβˆ’u subset mathcalI sehingga tidak ada unsur dari  mathcalIu . Ukuran subsampel dapat diambil sebanding dengan ukuran.  mathcalI+u itu adalah | mathcalIβˆ’u|=c cdot| mathcalI+u| . Kemudian rumus (3.1), (3.2) untuk menghitung AUC akan berubah:

(3.3)

AUC(u)= frac1| mathcalI+u|| mathcalIβˆ’u| sumi in mathcalI+u sumj in mathcalIβˆ’u delta( hatrui> hatruj),


(3.4)

AUC= frac1| mathcalUval| sumu in mathcalUvalAUC(u).


Akibatnya, kami memperoleh waktu yang konstan untuk menghitung AUC, karena kami hanya mengambil bagian yang tetap dari pengguna, dan set  mathcalI+u dan  mathcalIβˆ’u memiliki ukuran kecil. Proses pembelajaran untuk toko berhenti setelah AUC (3.4) berhenti membaik.

Cari benda serupa


Sebagai bagian dari tugas item2item, Anda harus memilih untuk setiap item n (atau produk semirip mungkin) dengan produk yang memaksimalkan clickability banner. Asumsi kami: kandidat untuk spanduk harus dipertimbangkan dari atas k paling dekat di ruang angkasa. Kami menguji metode berikut untuk menghitung "tetangga terdekat": Scala + Spark, ANNOY, SCANNs, HNSW.


Untuk Scala + Spark untuk toko dengan 500 ribu objek, menghitung metrik kosinus yang jujur ​​membutuhkan waktu 15 menit dan sejumlah besar sumber daya gugusan, sehubungan dengan itu kami menguji metode perkiraan untuk menemukan tetangga terdekat. Saat meneliti metode SCANNs, parameter berikut bervariasi: bucketLimit , bucketLimit , shouldSampleBuckets , dan setSignatureLength , tetapi hasilnya ternyata tidak memuaskan dibandingkan dengan metode lain (benda yang sangat berbeda jatuh ke dalam ember). Algoritma ANNOY dan HNSW menunjukkan hasil yang sebanding dengan cosinus jujur, tetapi bekerja lebih cepat.

Produk 200k500rb barangProduk 2.2m
AlgoritmaANNOYHnswANNOYHnswANNOYHnsw
membangun waktu
indeks (dtk)
59.458.64258.0225.441190.8190.45
total waktu (detik)141.2301/14527.7643.382081.57150,92


Karena fakta bahwa HNSW bekerja lebih cepat dari semua algoritma, kami memutuskan untuk berhenti menggunakannya.
Kami juga mencari tetangga terdekat di wadah Spark dan menulis hasilnya di Hive dengan partisi yang sesuai.

Kesimpulan


Ingat: kami menggunakan WARP untuk melatih model, AUC untuk pemberhentian awal, dan penilaian kualitas akhir dilakukan menggunakan uji A / B pada lalu lintas langsung.

Kami percaya bahwa di tempat ini - dalam mengatur percobaan dan memilih komposisi spanduk yang optimal - data berakhir dan ilmu pengetahuan dimulai. Di sini kita belajar untuk menentukan apakah masuk akal untuk menunjukkan rekomendasi untuk produk yang penargetan ulangnya berfungsi; persis berapa banyak rekomendasi untuk ditampilkan; berapa banyak produk yang dilihat, dll. Kami akan membicarakan ini di artikel berikut.

Perbaikan lebih lanjut pada algoritma - pencarian embeddings universal yang akan memungkinkan produk dari semua toko ditempatkan dalam satu ruang - dilakukan dalam kerangka paradigma yang dijelaskan di awal artikel.

Terima kasih atas perhatian anda!

Sastra


[1] Ricci F., Rokach L., Shapira B. Pengantar buku pegangan sistem rekomendasi
// Buku pegangan sistem rekomendasi. - Springer, Boston, MA, 2011 .-- S. 147160.

[2] Mesin Factorisasi Rendle S. // Konferensi Internasional IEEE 2010 tentang Penambangan Data. - IEEE, 2010 .-- S. 995-1000.

[3] Rendle S. et al. BPR: Peringkat personal Bayesian dari umpan balik implisit
// Prosiding konferensi kedua puluh lima tentang ketidakpastian dalam kecerdasan buatan.
- AUAI Press, 2009 .-- S. 452-461.

[4] Weston J., Bengio S., Usunier N. Wsabie: meningkatkan anotasi gambar kosakata besar // Konferensi Internasional Bersama Dua Puluh Dua tentang Kecerdasan Buatan. - 2011.

Source: https://habr.com/ru/post/id445392/


All Articles