Apakah toko memerlukan Stylish Crossell: Pengalaman Retail Rocket dalam analisis gambar untuk membentuk rekomendasi

Minat dalam analisis gambar untuk menghasilkan rekomendasi semakin meningkat setiap hari. Kami memutuskan untuk mencari tahu seberapa nyata tema tren ini. Kami berbicara tentang pengujian penggunaan pembelajaran dalam (Deep Learning) untuk meningkatkan rekomendasi produk terkait.



Pada artikel ini, kami menjelaskan pengalaman menerapkan teknologi analisis gambar untuk meningkatkan algoritma produk terkait. Anda dapat membacanya dalam dua cara: mereka yang tidak tertarik dengan detail teknis menggunakan jaringan saraf dapat melewatkan bab tentang membuat dataset dan mengimplementasikan solusi dan langsung ke tes AB dan hasilnya. Dan mereka yang memiliki pemahaman dasar tentang konsep seperti embeddings, lapisan jaringan saraf, dll., Akan tertarik pada keseluruhan materi.

Pembelajaran mendalam dalam Konteks Analisis Gambar


Dalam tumpukan teknologi kami, Deep Learning digunakan dengan cukup sukses untuk memecahkan beberapa masalah. Untuk beberapa waktu kami tidak berani menerapkannya dalam konteks analisis gambar, tetapi sejumlah premis baru-baru ini muncul yang telah mengubah pikiran kami:

  • peningkatan minat masyarakat dalam analisis citra menggunakan metode pembelajaran yang mendalam;
  • lingkaran kerangka "matang" dan jaringan saraf pra-pelatihan telah ditentukan, dari mana seseorang dapat memulai dengan cukup cepat dan sederhana;
  • analisis gambar dalam sistem rekomendasi sering digunakan sebagai fitur pemasaran yang menjamin peningkatan "belum pernah terjadi sebelumnya";
  • kebutuhan makanan mulai muncul dalam penelitian semacam ini.

Dalam konteks persimpangan sistem rekomendasi dan analisis gambar, mungkin ada banyak aplikasi pembelajaran mendalam, namun, pada tahap pertama, kami mengidentifikasi sendiri tiga cara utama untuk mengembangkan area ini:

  1. Peningkatan umum dalam kualitas rekomendasi, misalnya, produk-produk terkait untuk gaun, secara kualitatif lebih cocok dalam warna dan gaya.
  2. Menemukan barang di basis produk toko menggunakan foto (Pengambilan Di Toko) adalah mekanisme yang memungkinkan Anda menemukan produk di basis data toko menggunakan foto yang dimuat.
  3. Penentuan sifat / atribut produk dari foto (Penandaan Atribut), ketika atribut signifikan ditentukan dari foto, misalnya, jenis produk - T-shirt, jaket, celana, dll.

Arah yang paling prioritas dan menjanjikan bagi kami adalah pilihan pertama, dan kami memutuskan untuk menjelajahinya.

Mengapa Anda memilih algoritme untuk produk terkait


Setiap sistem rekomendasi memiliki dua algoritma komoditas statis dasar: alternatif dan produk terkait. Dan jika semuanya jelas dengan alternatif - ini adalah produk yang mirip dengan model asli (misalnya, berbagai jenis kemeja), maka dengan produk terkait semuanya jauh lebih rumit. Penting di sini untuk tidak membuat kesalahan dengan korespondensi antara barang-barang dasar dan yang direkomendasikan, misalnya, pengisi daya harus sesuai dengan telepon, warna gaun ke sepatu, dll; Anda perlu mempertimbangkan umpan balik, misalnya, jangan rekomendasikan telepon ke pengisi daya, meskipun mereka dibeli bersama; dan memikirkan banyak nuansa lain yang muncul dalam praktik. Sebagian besar karena adanya berbagai nuansa, pilihan kami jatuh pada produk-produk terkait. Selain itu, hanya pada produk-produk terkait yang memungkinkan untuk membentuk tampilan penuh, jika kita berbicara tentang segmen mode.

Kami merumuskan tujuan penelitian utama kami sebagai "Memahami jika algoritma saat ini untuk produk terkait dapat ditingkatkan secara signifikan menggunakan metode pembelajaran mendalam untuk analisis gambar"

Saya perhatikan bahwa sebelumnya kami tidak menggunakan informasi gambar sama sekali saat menghitung rekomendasi produk, dan inilah alasannya:

  • Selama keberadaan platform Retail Rocket, kami telah memperoleh keahlian yang hebat di bidang rekomendasi produk. Dan kesimpulan utama yang kami terima selama ini adalah bahwa penggunaan perilaku pengguna yang benar memberikan hampir 90% dari hasilnya. Ya, ada masalah awal yang dingin, ketika itu adalah hal-hal konten, seperti informasi tentang gambar, yang dapat mengklarifikasi atau meningkatkan rekomendasi, tetapi dalam praktiknya efek ini jauh lebih sedikit daripada apa yang mereka katakan dalam teori. Oleh karena itu, kami tidak banyak menekankan pada sumber informasi konten.
  • Untuk membangun rekomendasi produk dalam bentuk informasi konten, kami menggunakan elemen seperti harga, kategori, deskripsi, dan properti lain yang diberikan toko kepada kami. Properti ini independen dari bola dan divalidasi secara kualitatif saat mengintegrasikan layanan kami. Nilai gambar, sebaliknya, muncul sebenarnya hanya di segmen barang mode.
  • Mempertahankan layanan bekerja dengan gambar, memvalidasi kualitas dan kesesuaiannya dengan barang adalah proses yang agak rumit dan tugas teknis yang serius yang tidak ingin saya tanggung tanpa konfirmasi kebutuhan.

Namun demikian, kami memutuskan untuk memberikan kesempatan pada gambar-gambar itu dan melihat bagaimana mereka akan memengaruhi efektifitas membangun rekomendasi. Pendekatan kami tidak ideal, pasti seseorang akan memecahkan masalah secara berbeda. Tujuan artikel ini adalah untuk menyajikan pendekatan kami dengan deskripsi argumen pada setiap langkah dan untuk menyajikan hasilnya kepada pembaca.

Pembentukan konsep


Kami mulai dengan melintasi tiga komponen produk: teknologi yang terjangkau, sumber daya yang tersedia, dan kebutuhan pelanggan. Konsep "meningkatkan rekomendasi melalui informasi tentang gambar produk terkait" telah dikembangkan dengan sendirinya. Implementasi "ideal" produk ini dibentuk sebagai masalah yang dikompilasi dalam citra tampilan yang dipilih. Selain itu, rekomendasi tersebut seharusnya tidak hanya terlihat hebat, tetapi juga berfungsi dari sudut pandang metrik e-commerce dasar (Konversi, RPV, AOV) tidak lebih buruk daripada algoritma dasar kami.

Lihat adalah gambar yang dipilih oleh stylist, yang mencakup sekumpulan hal-hal berbeda yang menggabungkan satu sama lain, misalnya gaun, jaket, tas, ikat pinggang, dll. Di sisi klien kami, pekerjaan seperti itu biasanya dilakukan oleh orang-orang yang ditunjuk secara khusus yang pekerjaannya tidak otomatis. Bagaimanapun, tidak setiap jaringan saraf dapat memiliki indera perasa.


Contoh gambar (lihat).

Segera ada pembatasan penggunaan informasi gambar - pada kenyataannya, aplikasi hanya ditemukan di segmen mode.

Infrastruktur dan dataset


Pertama-tama, kami mengangkat bangku tes untuk eksperimen dan pembuatan prototipe. Semuanya GPU standar + Python + Keras di sini, jadi kami tidak akan membahas detail. Kami menemukan dataset berkualitas tinggi yang dirancang untuk memecahkan beberapa masalah sekaligus, dari memprediksi atribut dari gambar hingga generasi tekstur pakaian baru. Apa yang sangat penting bagi kami, termasuk foto-foto yang secara virtual membuat satu tampilan. Selain itu, set data mencakup foto-foto model pakaian dari sudut yang berbeda, yang kami coba gunakan pada tahap pertama.


Contoh tampilan dari dataset.


Contoh gambar dari model pakaian yang sama dari sudut yang berbeda.

Langkah pertama


Gagasan pertama untuk mengimplementasikan produk akhir menggunakan dataset cukup sederhana: “Mari kita kurangi masalah menjadi tugas mengenali pakaian dengan gambar. Jadi, ketika membentuk rekomendasi, kami akan "mengangkat" rekomendasi yang mirip dengan produk dasar. " Dengan demikian, seharusnya menemukan fungsi "kedekatan" barang dan, di sepanjang jalan, memecahkan masalah menghilangkan alternatif dalam masalah ini.

Saya harus mengatakan segera bahwa masalah semacam ini dapat diselesaikan dengan menggunakan jaringan saraf pra-terlatih konvensional, seperti ResNet-50. Memang: kita menghapus lapisan terakhir, kita mendapatkan embeddings, well, dan kemudian cosinus, sebagai ukuran "kedekatan". Namun, setelah bereksperimen dengan pendekatan ini sedikit, kami memutuskan untuk meninggalkannya terutama karena tiga alasan.

  1. Tidak begitu jelas bagaimana menafsirkan dengan benar kedekatan yang dihasilkan. Apa yang dikatakan cosine = 0,7 dalam domain t-shirt, di mana semuanya sangat mirip satu sama lain dan apa yang cosine = 0,5 dalam domain jaket, di mana perbedaannya lebih signifikan. Kami membutuhkan interpretasi semacam ini untuk secara bersamaan menghapus produk yang sangat dekat - alternatif.
  2. Pendekatan ini membatasi kami sedikit dari sudut pandang pendidikan lebih lanjut untuk tugas-tugas khusus kami. Misalnya, fitur penting yang membentuk gambar holistik tidak selalu sama dari domain ke domain. Di suatu tempat, warna dan bentuk lebih penting, tetapi di suatu tempat bahan dan teksturnya. Selain itu, kami ingin melatih jaringan untuk membuat lebih sedikit kesalahan gender ketika wanita direkomendasikan untuk pakaian pria. Kesalahan semacam itu segera terbukti dan harus dihadapi sesering mungkin. Dengan penggunaan sederhana jaringan saraf pra-pelatihan, tampaknya kami agak dibatasi oleh ketidakmampuan untuk memberikan contoh yang juga "mirip" dalam hal gambar.
  3. Penggunaan Siamese Networks, yang lebih cocok untuk tugas-tugas ini, tampaknya menjadi pilihan yang lebih alami dan dipelajari dengan baik.

Sedikit tentang jaringan saraf siam


Jaringan saraf siam banyak digunakan dalam menyelesaikan tugas yang berkaitan dengan pengenalan wajah. Pada input, gambar orang tersebut diberikan, pada output, nama orang dari database yang menjadi miliknya. Masalah seperti itu dapat diselesaikan secara langsung, jika Anda menggunakan softmax dan jumlah kelas sama dengan jumlah orang yang dikenali pada lapisan terakhir dari jaringan saraf. Namun, pendekatan ini memiliki beberapa keterbatasan:

  • Anda perlu memiliki jumlah gambar yang cukup besar untuk setiap kelas, yang secara praktis tidak mungkin.
  • jaringan saraf seperti itu harus dilatih ulang setiap kali orang baru ditambahkan ke database, yang sangat merepotkan.

Solusi logis dalam situasi seperti itu adalah untuk mendapatkan fungsi "kesamaan" dari dua foto untuk menjawab kapan saja apakah dua foto - dipasok ke input jaringan saraf dan referensi dari database - milik orang yang sama dan, dengan demikian, menyelesaikan masalah pengenalan wajah. Ini lebih konsisten dengan bagaimana seseorang berperilaku. Misalnya, seorang penjaga melihat wajah seseorang dan foto pada lencana dan menjawab pertanyaan apakah orang itu satu atau tidak. Jaringan saraf siam mengimplementasikan konsep serupa.

Komponen utama jaringan saraf siam adalah jaringan saraf tulang punggung, yang menghasilkan embedding gambar. Penyematan ini dapat digunakan untuk menentukan tingkat kesamaan antara kedua gambar. Dalam arsitektur jaringan saraf siam, komponen tulang punggung digunakan dua kali, setiap kali menerima penyematan gambar. Peneliti perlu menunjukkan nilai output 0 atau 1, tergantung pada apakah satu atau beberapa orang memiliki foto, dan menyesuaikan jaringan saraf tulang punggung.


Contoh jaringan saraf siam. Embeddings dari gambar atas dan bawah diperoleh dari tulang punggung jaringan saraf. Gambar diambil dari kursus “Convolutional Neural Networks” Andrey Ng.

Solusi dasar


Jadi, setelah beberapa percobaan, versi pertama dari algoritma adalah sebagai berikut:

  1. Kami mengambil jaringan saraf pra-terlatih sebagai tulang punggung. Kami bereksperimen dengan ResNet-50 dan InceptionV3. Dipilih berdasarkan keseimbangan ukuran jaringan dan akurasi prediksi. Kami fokus pada data yang disajikan dalam dokumentasi resmi untuk bagian Keras “Dokumentasi untuk model individual”.
  2. Kami membuat jaringan Siam berdasarkan dan menggunakan Triplet Loss untuk pelatihan.
  3. Sebagai contoh positif, kami menyajikan gambar yang sama, tetapi dari sudut yang berbeda. Sebagai contoh negatif, kami melayani produk lain.
  4. Memiliki model yang terlatih, kami mendapatkan metrik kedekatan untuk setiap pasangan produk dengan cara yang sama seperti yang dipertimbangkan Triplet Loss.


Kode perhitungan Rugi Triplet.

Kesepakatan dengan Triplet Loss pada proyek nyata adalah pertama kalinya, yang menciptakan sejumlah kesulitan. Pada awalnya, mereka berjuang untuk waktu yang lama dengan fakta bahwa pernikahan yang diterima semuanya turun ke satu titik. Ada beberapa alasan: kami tidak menormalkan embeddings sebelum menghitung kerugian; margin parameter alpha terlalu kecil dan contohnya terlalu sulit. Ditambahkan normalisasi dan embeddings mulai bervariasi. Masalah kedua tiba-tiba menjadi Gradient Exploding. Untungnya, Keras memungkinkan untuk menyelesaikan masalah ini cukup sederhana - kami menambahkan clipnorm = 1.0 ke pengoptimal, yang tidak memungkinkan gradien tumbuh selama pelatihan.

Pekerjaan itu berulang: kami melatih model, menurunkan kerugian, melihat hasil akhir dan dengan ahli memutuskan ke arah mana kami akan pergi. Pada titik tertentu, menjadi jelas bahwa kami segera membuat contoh yang cukup kompleks dan kompleksitasnya tidak berubah dalam proses pembelajaran, yang secara negatif mempengaruhi hasil akhir. Untungnya, set data yang kami gunakan memiliki struktur pohon yang bagus, yang mencerminkan produk itu sendiri, misalnya Pria -> Celana, Pria -> Sweater, dll. Ini memungkinkan kami untuk membuat ulang generator dan kami mulai memberikan contoh “mudah” untuk beberapa era pertama, kemudian yang lebih kompleks dan seterusnya. Contoh paling sulit adalah produk dari kategori produk yang sama, misalnya Celana, sebagai negatif.

Hasilnya, kami mendapatkan model yang berbeda dalam outputnya dari metodologi “naif” untuk menggunakan ResNet-50. Namun, kualitas rekomendasi akhir tidak sepenuhnya cocok untuk kita. Pertama, ada masalah dengan kesalahan gender, tetapi ada pemahaman tentang bagaimana hal itu bisa diselesaikan. Karena dataset membagi pakaian menjadi pria dan wanita, mudah untuk mengumpulkan contoh-contoh negatif untuk pelatihan. Kedua, ketika pelatihan pada dataset hasil akhir, kami secara visual memeriksa klien kami - segera menjadi jelas bahwa perlu untuk melatih kembali pada contoh mereka, karena untuk beberapa algoritma bekerja sangat buruk jika barang tidak tumpang tindih dengan baik dengan apa yang ditampilkan selama pelatihan . Akhirnya, kualitasnya sering buruk, karena gambar pelatihan sering berisik dan berisi, misalnya, tidak hanya celana jins, tetapi juga kaus.


Citra jins yang notabene juga memperlihatkan kaus dan sepatu bot.

Pengalaman pertama menjadi dasar untuk solusi berikutnya, meskipun kami tidak segera mulai menerapkan model yang ditingkatkan.


Contoh rekomendasi berdasarkan solusi dasar. Ada kesalahan gender, alternatif juga muncul.

Model yang ditingkatkan


Kami mulai dengan melatih ResNet-50 tentang data dari dataset kami. Dataset berisi informasi tentang apa yang ditampilkan dalam gambar. Ini diambil dari struktur dataset Men -> Pants, Women -> Cardigans dan banyak lagi. Prosedur ini dilakukan karena dua alasan: pertama, mereka ingin "mengarahkan" tulang punggung - jaringan saraf ke domain pakaian; kedua, karena pakaian juga dibagi berdasarkan jenis kelamin, mereka berharap dapat menyingkirkan masalah kesalahan gender yang ditemui dalam versi pertama.

Pada tahap kedua, kami mencoba untuk secara bersamaan menghilangkan noise dari gambar input dan mendapatkan pasangan positif dari produk terkait untuk pelatihan lebih lanjut. Dataset yang digunakan oleh kami juga dirancang untuk memecahkan masalah mendeteksi objek dalam gambar. Dengan kata lain, untuk setiap gambar ada: koordinat persegi panjang yang menggambarkan objek dan kelasnya. Untuk mengatasi masalah semacam ini, kami menggunakan proyek yang sudah jadi . Proyek ini menggunakan arsitektur jaringan saraf RetinaNet menggunakan kehilangan fokus khusus. Inti dari kehilangan ini adalah untuk lebih fokus bukan pada latar belakang gambar, yang ada di hampir setiap gambar, tetapi pada objek yang perlu dideteksi. Sebagai tulang punggung jaringan saraf untuk pelatihan, kami menggunakan jaringan pra-terlatih kami ResNet-50.
Akibatnya, tiga kelas objek terdeteksi pada setiap gambar dari dataset: "atas", "bawah" dan "tampilan umum". Setelah mendefinisikan kelas "atas" dan "bawah", kami hanya memotong gambar menjadi dua gambar terpisah, yang nantinya akan digunakan sebagai pasangan contoh positif untuk menghitung Triplet Loss. Kualitas mendeteksi objek ternyata cukup tinggi, satu-satunya keluhan adalah bahwa tidak selalu mungkin untuk menemukan kelas dalam gambar. Ini bukan masalah bagi kami, karena kami dapat dengan mudah meningkatkan jumlah gambar untuk prediksi.


Contoh mendeteksi kelas "atas" dan "bawah" dan memotong gambar.

Memiliki pemisah gambar seperti ini, kami mendapat kesempatan untuk melihat dari Internet dan membaginya menjadi komponen untuk digunakan dalam pelatihan. Untuk meningkatkan sampel pelatihan dan mengalahkan masalah dengan cakupan contoh yang tidak mencukupi yang muncul selama pengembangan solusi dasar, kami memperluas dataset karena gambar "potong" dari salah satu klien kami. Satu-satunya masalah adalah bahwa kami tidak membedakan objek seperti "aksesori", "hiasan kepala", "sepatu" dan sebagainya. Ini menciptakan beberapa batasan, tetapi cukup cocok untuk menguji konsep tersebut. Setelah menerima hasil positif, kami berencana untuk memperluas model ke kelas yang dijelaskan di atas.

Setelah menerima dataset yang diperluas, kami menggunakan metodologi yang sudah terbukti untuk membangun jaringan Siam dari solusi dasar, meskipun ada beberapa perbedaan. Pertama, sebagai tulang punggung jaringan saraf, kami menggunakan jaringan ResNet-50 yang sekarang terlatih seperti dijelaskan di atas. Kedua, sekarang, sebagai contoh positif, kami telah mengirimkan pasangan dari atas ke bawah dan sebaliknya, membiarkan kami belajar dari jaringan saraf persis "korespondensi" dari gambar. Ya, sebenarnya belasan zaman kemudian, muncul mekanisme yang memberi kami kesempatan untuk mengevaluasi "kesesuaian" barang ke satu gambar.


Contoh rekomendasi berdasarkan penggunaan jaringan saraf. Celana pendek direkomendasikan untuk produk dasar, kaus disarankan.

Hasil akhir membuat kami senang: rekomendasi tersebut ternyata memiliki kualitas yang baik secara visual dan, yang terutama bagus, konstruksinya tidak memerlukan riwayat interaksi pengguna. Namun, masalah tetap ada, yang utama adalah ketersediaan alternatif dalam ekstradisi. Jadi datang di ekstradisi di mana "bawah" direkomendasikan ke "bawah", hal yang sama terjadi dengan kategori "atas". Ini membuat kami berpikir dan memperbaiki solusi untuk menghilangkan alternatif.

Hapus alternatif


Untuk mengatasi masalah ketersediaan alternatif, penerbitannya pun cukup cepat. Eksperimen awal dengan "vanilla" ResNet-50 membantu. Jaringan saraf seperti itu memberikan barang-barang "mirip" dengan barang-barang yang paling sesuai dengan gambar - bahkan, alternatif. Artinya, dapat digunakan untuk mengidentifikasi alternatif.


Contoh rekomendasi berdasarkan "vanilla" ResNet-50. Barang adalah alternatif.

Dengan menggunakan properti yang berguna dari ResNet-50 ini, kami mulai menyaring produk sedekat mungkin dari penerbitan, sehingga menghilangkan alternatifnya. Ada juga kelemahan dari pendekatan ini - situasi yang tidak dapat dipahami sama dengan ambang mana yang harus dipilih untuk penyaringan. Terkadang cukup banyak produk yang difilter, meskipun faktanya secara lahiriah mereka bukan alternatif. Namun, kami tidak fokus pada masalah ini dan terus bekerja lebih jauh.

Persiapan Tes AB


Untuk pemeriksaan terakhir dari hampir semua perubahan dalam algoritma, kami banyak menggunakan alat pengujian AB. Selain itu, kami hanya memiliki satu aturan: "tidak peduli seberapa kecil kerugiannya, tidak peduli betapa rumit dan berlapis-lapisnya jaringan saraf, betapa indahnya rekomendasi - semua ini tidak dipertimbangkan jika tidak ada hasil pada tes AB". Logikanya cukup sederhana: tes AB adalah yang paling jujur, dapat dimengerti oleh semua pihak (terutama pelanggan dan bisnis) dan metode yang akurat untuk mengukur hasilnya. Retail Rocket - ( « A/- 99% - ? »). - .

-. , RecSys 2016 . . , , , , . , - , .

, . , . , . - . , , , , - . : .

- , . -, , , , . -, — , , , , . , . , , , “», .

:

  • “” “”, , , , . , , , .
  • , . proof-of-concept , .

, , . , , .

AB-


, , - . — fashion. . , , . , , .

. 3 . , 95%.


. Related-9 — “” , Related — .


. Related-9 “” . : Mann-Whitney Test Bootstrap. 97%.

: . , , , “” CTR. , , CTR , . - , - - , -. , .


CTR. . CTR Related-9, “” , () Related — (). CTR ( ) — 95%.

, , , , . , , . , , . .

Kesimpulan


, , . , , . - . , — — , . , . , , , Retail Rocket.

, , , , « ». , . , .

, Retail Rocket

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


All Articles