Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi

Nami abdi Pavel Parkhomenko, abdi pamekar ML. Dina tulisan ieu, kuring hoyong ngobrol ngeunaan struktur jasa Yandex.Zen sareng ngabagi perbaikan téknis, palaksanaan anu ngamungkinkeun pikeun ningkatkeun kualitas saran. Tina tulisan ieu anjeun bakal diajar kumaha milarian anu paling relevan pikeun pangguna diantara jutaan dokumén dina ngan sababaraha milidetik; kumaha ngalakukeun dékomposisi kontinyu tina matriks ageung (diwangun ku jutaan kolom sareng puluhan juta baris) supados dokumén énggal nampi vektorna dina puluhan menit; kumaha ngagunakeun deui dékomposisi matriks artikel-pamaké pikeun meunangkeun perwakilan vektor anu saé pikeun pidéo.

Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi

Basis data rekomendasi kami ngandung jutaan dokumén tina sababaraha format: tulisan téks anu didamel dina platform kami sareng dicandak tina situs éksternal, video, narasi sareng tulisan pondok. Ngembangkeun jasa sapertos ieu pakait sareng sajumlah ageung tantangan téknis. Ieu sababaraha di antarana:

  • Bagikeun tugas komputasi: laksanakeun sadaya operasi beurat sacara offline, sareng sacara real waktos ngan ukur ngalaksanakeun modél gancang pikeun nanggung jawab 100-200 mdet.
  • Gancang tumut kana akun lampah pamaké. Jang ngalampahkeun ieu, perlu yén sadaya acara langsung dikirimkeun ka anu nyarankeun sareng mangaruhan hasil modél.
  • Jieun feed supados pamaké anyar gancang adaptasi jeung kabiasaan maranéhna. Jalma anu nembé ngagabung kana sistem kedah ngaraos yén eupan balikna mangaruhan saran.
  • Gancang ngartos saha nyarankeun artikel anyar.
  • Ngabales gancang mun mecenghulna konstan eusi anyar. Puluhan rébu artikel diterbitkeun unggal poé, sarta loba di antarana boga umur kawates (sebutkeun, warta). Ieu anu ngabédakeun aranjeunna tina pilem, musik sareng kontén anu lami-lami sareng mahal pikeun didamel.
  • Mindahkeun pangaweruh ti hiji wewengkon domain ka nu sejen. Upami sistem rekomendasi parantos ngalatih modél pikeun tulisan téks sareng kami nambihan pidéo kana éta, urang tiasa nganggo deui modél anu tos aya supados jinis eusi énggal langkung saé.

Kuring bakal ngabejaan ka maneh kumaha urang direngsekeun masalah ieu.

Pamilihan calon

Kumaha carana ngirangan jumlah dokumén anu ditaliti ku rébuan kali dina sababaraha milidetik, kalayan ampir henteu aya panurunan dina kualitas réngking?

Anggap urang ngalatih loba model ML, dihasilkeun fitur dumasar kana eta, sarta ngalatih model sejen nu urutan dokumén pikeun pamaké. Sagalana bakal rupa, tapi anjeun teu bisa ngan nyokot jeung ngitung sagala tanda pikeun sakabéh dokumén sacara real waktu, lamun aya jutaan dokumén ieu, sarta saran kudu diwangun dina 100-200 mdet. Tugasna nyaéta pikeun milih sawaréh tina jutaan, anu bakal diurutkeun pikeun pangguna. Tahap ieu biasana disebut seleksi calon. Aya sababaraha sarat pikeun éta. Firstly, seleksi kudu lumangsung pisan gancang, ku kituna saloba mungkin ditinggalkeun pikeun ranking sorangan. Bréh, sanggeus greatly ngurangan jumlah dokumén pikeun ranking, urang kudu ngawétkeun dokumén relevan pikeun pamaké sakumaha lengkep jéntré.

Prinsip pilihan calon urang parantos mekar, sareng ayeuna urang parantos dugi ka skéma multi-tahap:

Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi

Kahiji, sadaya dokumén dibagi kana grup, sarta dokumén pang populerna dicokot ti unggal grup. Grup tiasa situs, jejer, klaster. Pikeun unggal pangguna, dumasar kana sajarahna, grup anu pangdeukeutna ka anjeunna dipilih sareng dokumén anu pangsaéna dicandak ti aranjeunna. Urang ogé ngagunakeun indéks kNN pikeun milih dokumén anu pangdeukeutna ka pamaké sacara real waktu. Aya sababaraha padika pikeun ngawangun indéks kNN; urang dianggo pangalusna HNSW (Grafik Dunya Leutik Hierarki Navigable). Ieu model hirarki nu ngidinan Anjeun pikeun manggihan N pangcaketna vektor pikeun pamaké ti database jutaan dina sababaraha milliseconds. Urang mimiti indéks sakabéh database dokumen urang offline. Kusabab milarian dina indéks dianggo rada gancang, upami aya sababaraha embeddings anu kuat, anjeun tiasa nyiptakeun sababaraha indéks (hiji indéks pikeun tiap embedding) sareng ngakses masing-masing sacara real waktos.

Kami masih gaduh puluhan rébu dokumén pikeun unggal pangguna. Ieu masih seueur kanggo ngitung sadaya fitur, janten dina tahap ieu kami nganggo ranking anu ringan - modél ranking beurat anu ringan sareng fitur anu langkung sakedik. Tugasna nyaéta pikeun ngaduga dokumén mana anu model beurat bakal aya di luhur. Dokumén sareng prediktor pangluhurna bakal dianggo dina modél beurat, nyaéta, dina tahap ahir réngking. Pendekatan ieu ngamungkinkeun anjeun ngirangan pangkalan data dokumén anu dianggap pikeun pangguna tina jutaan ka rébuan dina puluhan milidetik.

ALS léngkah dina runtime

Kumaha carana tumut kana akun eupan balik pamaké langsung saatos hiji klik?

Faktor penting dina rekomendasi nyaéta waktos ngaréspon kana tanggapan pangguna. Ieu hususna penting pikeun pamaké anyar: lamun hiji jalma ngan dimimitian ngagunakeun sistem rekomendasi, anjeunna nampi feed non-pribadi dokumén rupa-rupa jejer. Pas anjeunna ngadamel klik munggaran, anjeun kedah langsung tumut kana akun ieu sareng adaptasi kana kapentinganna. Upami anjeun ngitung sadaya faktor offline, réspon sistem gancang bakal janten teu mungkin kusabab reureuh. Janten perlu pikeun ngolah tindakan pangguna sacara real waktos. Pikeun tujuan ieu, kami nganggo léngkah ALS dina runtime pikeun ngawangun perwakilan vektor pangguna.

Anggap urang gaduh perwakilan vektor pikeun sadaya dokumén. Contona, urang bisa ngawangun embeddings offline dumasar kana téks artikel maké ELMo, BERT atawa model learning mesin séjén. Kumaha urang bisa ménta ngagambarkeun vektor pamaké dina spasi sarua dumasar kana interaksi maranéhanana dina sistem?

Prinsip umum formasi jeung dékomposisi matriks pamaké-dokumenHayu urang boga m pamaké sarta n dokumén. Pikeun sababaraha pamaké, hubungan maranéhanana jeung dokumén tangtu dipikawanoh. Lajeng informasi ieu bisa digambarkeun salaku hiji m x n matrix: baris pakait jeung pamaké, sarta kolom pakait jeung dokumén. Kusabab jalma éta henteu ningali seueur dokumén, kalolobaan sél matriks bakal tetep kosong, sedengkeun anu sanésna bakal dieusi. Pikeun unggal acara (kawas, daek, klik) sababaraha nilai disadiakeun dina matriks - tapi hayu urang nganggap model saderhana nu kawas pakait jeung 1, sarta daek pakait jeung -1.

Hayu urang nguraikeun matriks jadi dua: P (m x d) jeung Q (d x n), dimana d teh dimensi ngagambarkeun vektor (biasana jumlah leutik). Lajeng unggal obyék bakal pakait jeung vektor d-dimensi (pikeun pamaké - baris dina matrix P, pikeun dokumén - kolom dina matrix Q). Vektor ieu bakal jadi embeddings tina objék pakait. Pikeun ngaduga naha pangguna bakal resep dokumen, anjeun ngan saukur tiasa ngalikeun émbeddings na.

Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi
Salah sahiji cara anu mungkin pikeun nguraikeun matriks nyaéta ALS (Alternating Least Squares). Urang bakal ngaoptimalkeun fungsi leungitna handap:

Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi

Di dieu rui nyaéta interaksi pamaké u jeung dokumén i, qi nyaéta véktor dokumén i, pu nyaéta véktor pamaké u.

Mangka véktor pamaké optimal tina sudut pandang kasalahan kuadrat rata-rata (pikeun véktor dokumén tetep) kapanggih sacara analitik ku ngarengsekeun régrési linier anu saluyu.

Ieu disebut "lengkah ALS". Jeung algoritma ALS sorangan nyaeta urang ganti ngalereskeun salah sahiji matrices (pamaké jeung artikel) jeung ngamutahirkeun séjén, manggihan solusi optimal.

Untungna, milarian perwakilan vektor pangguna mangrupikeun operasi anu cukup gancang anu tiasa dilakukeun dina waktos jalan nganggo petunjuk vektor. Trik ieu ngamungkinkeun anjeun langsung nganggap eupan balik pangguna dina peringkat. The embedding sarua bisa dipaké dina indéks kNN pikeun ngaronjatkeun Pilihan calon.

Distribusi Kolaborasi Nyaring

Kumaha cara ngalakukeun faktorisasi matriks disebarkeun Incremental sareng gancang mendakan representasi vektor tina tulisan anyar?

Eusi sanes hiji-hijina sumber sinyal rekomendasi. Sumber penting séjén nyaéta inpormasi kolaborasi. Fitur réngking anu saé sacara tradisional tiasa didapet tina dékomposisi matriks dokumén-pamaké. Tapi nalika nyobian ngalakukeun dékomposisi sapertos kitu, kami mendakan masalah:

1. Urang boga jutaan dokumén jeung puluhan juta pamaké. matriks teu cocog sagemblengna dina hiji mesin, sarta dékomposisi bakal butuh waktu anu pohara lila.
2. Kalolobaan eusi dina sistem ngabogaan lifespan pondok: dokumén tetep relevan pikeun ukur sababaraha jam. Ku alatan éta, perlu pikeun ngawangun representasi vektor maranéhanana gancang-gancang.
3. Lamun ngawangun dékomposisi a langsung saatos dokumen ieu diterbitkeun, jumlah cukup pamaké moal boga waktu pikeun evaluate eta. Ku alatan éta, ngagambarkeun vektor na paling dipikaresep moal jadi pohara alus.
4. Lamun pamaké diaku atawa henteu, urang moal bisa langsung tumut kana akun dina dékomposisi nu.

Pikeun ngajawab masalah ieu, urang nerapkeun dékomposisi disebarkeun tina matriks pamaké-dokumen jeung apdet Incremental sering. Kumaha kahayang gawéna?

Anggap urang boga klaster mesin N (N aya dina ratusan) sarta kami rék ngalakukeun dékomposisi disebarkeun of a matrix on aranjeunna nu teu pas dina hiji mesin. Patarosan na kumaha carana ngalakukeun dékomposisi ieu ku kituna, di hiji sisi, aya cukup data dina unggal mesin sarta, di sisi séjén, ku kituna itungan bebas?

Kumaha urang ngerjakeun kualitas sareng laju pilihan rekomendasi

Urang bakal ngagunakeun algoritma dékomposisi ALS ditétélakeun di luhur. Hayu urang tingali kumaha ngaéksekusi hiji léngkah ALS dina cara anu disebarkeun - sesa léngkahna bakal sami. Anggap urang gaduh matriks tetep tina dokumén sareng urang badé ngawangun matriks pangguna. Jang ngalampahkeun ieu, urang ngabagi kana N bagian ku garis, unggal bagian bakal ngandung kira jumlah sarua garis. Urang bakal ngirim ka unggal mesin sél non-kosong tina baris pakait, kitu ogé matrix of embeddings dokumén (sakabehna). Kusabab ukuranana henteu ageung pisan, sareng matriks dokumén pangguna biasana jarang pisan, data ieu pas dina mesin biasa.

Trik ieu tiasa diulang dina sababaraha jaman dugi ka konvergen modél, ngagentos matriks tetep hiji-hiji. Tapi sanajan kitu, dékomposisi matrix tiasa nyandak sababaraha jam. Sareng ieu henteu ngabéréskeun masalah anu anjeun peryogikeun gancang nampi émbeddings dokumén énggal sareng ngapdet embeddings anu aya sakedik inpormasi nalika ngawangun modél.

Bubuka apdet modél Incremental gancang mantuan kami. Anggap urang gaduh modél anu ayeuna dilatih. Ti saprak latihanna, aya tulisan anyar anu berinteraksi sareng pangguna urang, ogé tulisan anu sakedik interaksi nalika latihan. Pikeun gancang ménta embeddings artikel sapertos, kami nganggo embeddings pamaké diala salila latihan badag mimiti model jeung ngalakukeun hiji hambalan ALS keur ngitung matrix dokumen dibere matrix pamaké tetep. Ieu ngidinan Anjeun pikeun nampa embeddings cukup gancang - dina sababaraha menit sanggeus dokumen diterbitkeun - sarta mindeng ngamutahirkeun embeddings tina dokumén panganyarna.

Pikeun nyieun saran geuwat tumut kana akun lampah manusa, dina runtime urang teu make embeddings pamaké diala offline. Sabalikna, urang ngalakukeun léngkah ALS sareng kéngingkeun véktor pangguna anu saleresna.

Mindahkeun ka wewengkon domain sejen

Kumaha cara ngagunakeun tanggapan pangguna dina tulisan téks pikeun ngawangun perwakilan véktor pidéo?

Mimitina, urang nyarankeun ngan artikel téks, jadi loba algoritma urang nu tailored kana jenis ieu eusi. Tapi nalika nambihan jinis eusi anu sanés, kami disanghareupan kabutuhan pikeun adaptasi modél. Kumaha urang ngajawab masalah ieu ngagunakeun conto video? Hiji pilihan nyaéta ngalatih deui sadaya modél ti mimiti. Tapi ieu butuh waktu lila, sarta sababaraha algoritma nu nungtut kana ukuran sampel latihan, nu teu acan sadia dina kuantitas diperlukeun pikeun jenis anyar eusi dina moments mimiti hirupna on jasa.

Urang balik cara sejen tur dipaké deui model téks pikeun video. Trik ALS anu sami ngabantosan urang nyiptakeun répréséntasi vektor pidéo. Kami nyandak perwakilan vektor pangguna dumasar kana tulisan téks sareng ngalaksanakeun léngkah ALS nganggo inpormasi pidéo. Janten urang gampang nampi perwakilan vektor tina pidéo. Sareng dina waktos runtime urang ngan ukur ngitung jarak antara véktor pangguna anu dicandak tina tulisan téks sareng véktor pidéo.

kacindekan

Ngembangkeun inti sistem rekomendasi sacara real-time ngalibatkeun seueur tantangan. Anjeun kudu gancang ngolah data jeung nerapkeun métode ML pikeun éféktif ngagunakeun data ieu; ngawangun sistem distribusi kompléks anu sanggup ngolah sinyal pangguna sareng unit eusi anyar dina waktos anu minimum; sarta loba tugas séjén.

Dina sistem anu ayeuna, desain anu ku kuring dijelaskeun, kualitas saran pikeun pangguna ningkat sareng kagiatanana sareng panjangna tetep dina jasa. Tapi tangtosna, di dieu perenahna kasusah utama: hese pikeun sistem langsung ngartos kapentingan hiji jalma anu boga saeutik interaksi jeung eusi. Ningkatkeun saran pikeun pangguna anyar mangrupikeun tujuan utama kami. Kami bakal terus ngaoptimalkeun algoritma supados eusi anu relevan pikeun hiji jalma asup kana feedna langkung gancang, sareng eusi anu teu relevan henteu ditingalikeun.

sumber: www.habr.com

Tambahkeun komentar