Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Halo semua! Nama saya Sasha, saya CTO & Co-Founder di LoyaltyLab. Dua tahun lalu, saya dan teman-teman, seperti semua siswa miskin, pergi pada malam hari untuk membeli bir di toko terdekat dekat rumah kami. Kami sangat kecewa karena pengecer, mengetahui bahwa kami akan datang untuk membeli bir, tidak menawarkan diskon untuk keripik atau kerupuk, meskipun ini sangat logis! Kami tidak memahami mengapa situasi ini terjadi dan memutuskan untuk memulai perusahaan kami sendiri. Sebagai bonus, berikan diri Anda diskon setiap hari Jumat untuk chip yang sama.

Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Dan semuanya sampai pada titik di mana saya menyajikan materi tentang sisi teknis produk di NVIDIA GTC. Kami senang untuk berbagi pekerjaan kami dengan komunitas, jadi saya menerbitkan laporan saya dalam bentuk artikel.

pengenalan

Seperti orang lain di awal perjalanan, kami memulai dengan ikhtisar tentang bagaimana sistem pemberi rekomendasi dibuat. Dan arsitektur yang paling populer ternyata adalah tipe berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Ini terdiri dari dua bagian:

  1. Mengambil sampel kandidat untuk mendapatkan rekomendasi menggunakan model yang sederhana dan cepat, biasanya model kolaboratif.
  2. Pemeringkatan kandidat dengan model konten yang lebih kompleks dan lambat, dengan mempertimbangkan semua kemungkinan fitur dalam data.

Selanjutnya saya akan menggunakan istilah berikut:

  • calon/kandidat untuk mendapatkan rekomendasi — pasangan produk-pengguna yang berpotensi disertakan dalam rekomendasi dalam produksi.
  • metode ekstraksi kandidat/ekstraktor/ekstraksi kandidat — suatu proses atau metode untuk mengekstraksi “kandidat rekomendasi” dari data yang tersedia.

Langkah pertama biasanya melibatkan penggunaan variasi pemfilteran kolaboratif yang berbeda. Yang paling populer - ALS. Mengejutkan bahwa sebagian besar artikel tentang sistem pemberi rekomendasi hanya mengungkapkan berbagai perbaikan model kolaboratif pada tahap pertama, namun tidak ada yang berbicara banyak tentang metode pengambilan sampel lainnya. Bagi kami, pendekatan yang hanya menggunakan model kolaboratif dan berbagai pengoptimalan tidak memberikan kualitas yang kami harapkan, jadi kami menggali penelitian secara khusus pada bagian ini. Dan di akhir artikel saya akan menunjukkan seberapa besar kami dapat meningkatkan ALS, yang merupakan dasar bagi kami.

Sebelum saya menjelaskan pendekatan kami, penting untuk dicatat bahwa dalam rekomendasi waktu nyata, ketika penting bagi kami untuk memperhitungkan data yang terjadi 30 menit yang lalu, sebenarnya tidak banyak pendekatan yang dapat berhasil dalam waktu yang diperlukan. Namun, dalam kasus kami, kami harus mengumpulkan rekomendasi tidak lebih dari sekali sehari, dan dalam banyak kasus - seminggu sekali, yang memberi kami peluang untuk menggunakan model yang kompleks dan meningkatkan kualitas beberapa kali lipat.

Mari kita ambil sebagai dasar metrik apa yang hanya ditampilkan ALS pada tugas mengekstraksi kandidat. Metrik utama yang kami pantau adalah:

  • Presisi - proporsi kandidat yang dipilih dengan benar dari sampel.
  • Recall adalah proporsi kandidat yang terjadi di antara kandidat yang benar-benar berada dalam interval target.
  • Skor F1 - F-ukuran yang dihitung berdasarkan dua poin sebelumnya.

Kami juga akan melihat metrik model akhir setelah pelatihan peningkatan gradien dengan fitur konten tambahan. Ada juga 3 metrik utama di sini:

  • presisi@5 - persentase rata-rata produk dari 5 teratas dalam hal probabilitas untuk setiap pembeli.
  • tingkat respons@5 - konversi pelanggan dari kunjungan ke toko menjadi pembelian setidaknya satu penawaran pribadi (5 produk dalam satu penawaran).
  • rata-rata roc-auc per pengguna - rata-rata roc-auc untuk setiap pembeli.

Penting untuk dicatat bahwa semua metrik ini diukur validasi silang deret waktu, yaitu pelatihan terjadi pada k minggu pertama, dan k+1 minggu diambil sebagai data pengujian. Oleh karena itu, naik turunnya musim mempunyai dampak minimal terhadap interpretasi kualitas model. Selanjutnya pada semua grafik, sumbu absis akan menunjukkan jumlah minggu dalam validasi silang, dan sumbu ordinat akan menunjukkan nilai metrik yang ditentukan. Semua grafik didasarkan pada data transaksi dari satu klien sehingga perbandingan antara satu sama lain benar.

Sebelum kami mulai menjelaskan pendekatan kami, pertama-tama kami melihat baseline, yaitu model yang dilatih ALS.
Metrik pengambilan kandidat:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Metrik akhir:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Saya memperlakukan semua implementasi algoritma sebagai semacam hipotesis bisnis. Jadi, secara garis besar, model kolaboratif apa pun dapat dianggap sebagai hipotesis bahwa “orang cenderung membeli apa yang dibeli oleh orang yang serupa dengan mereka”. Seperti yang sudah saya katakan, kami tidak membatasi diri pada semantik seperti itu, dan berikut adalah beberapa hipotesis yang bekerja dengan baik pada data di ritel offline:

  1. Yang sudah saya beli sebelumnya.
  2. Mirip dengan yang saya beli sebelumnya.
  3. Periode pembelian yang sudah lama berlalu.
  4. Populer berdasarkan kategori/merek.
  5. Pembelian alternatif barang yang berbeda dari minggu ke minggu (rantai Markov).
  6. Produk serupa dengan pembeli, menurut karakteristik yang dibangun oleh model berbeda (Word2Vec, DSSM, dll.).

Apa yang kamu beli sebelumnya?

Heuristik paling jelas yang bekerja sangat baik di ritel bahan makanan. Di sini kami mengambil semua barang yang dibeli oleh pemegang kartu loyalitas dalam K hari terakhir (biasanya 1-3 minggu), atau K hari setahun yang lalu. Hanya dengan menerapkan metode ini, kami memperoleh metrik berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Di sini cukup jelas bahwa semakin lama kita mengambil periode tersebut, semakin banyak recall yang kita miliki dan semakin sedikit presisi yang kita miliki dan sebaliknya. Rata-rata, “2 minggu terakhir” memberikan hasil yang lebih baik bagi klien.

Mirip dengan yang saya beli sebelumnya

Tidak mengherankan bahwa untuk ritel grosir, “apa yang saya beli sebelumnya” berfungsi dengan baik, tetapi mengekstraksi kandidat hanya dari apa yang telah dibeli pengguna tidaklah terlalu bagus, karena tidak akan mengejutkan pembeli dengan produk baru. Oleh karena itu, kami mengusulkan untuk sedikit meningkatkan heuristik ini dengan menggunakan model kolaboratif yang sama. Dari vektor yang kami terima selama pelatihan ALS, kami bisa mendapatkan produk serupa dengan yang sudah dibeli pengguna. Ide ini sangat mirip dengan “video serupa” dalam layanan untuk melihat konten video, tetapi karena kami tidak mengetahui apa yang dimakan/dibeli pengguna pada saat tertentu, kami hanya dapat mencari yang serupa dengan apa yang telah dia beli, terutama karena kita Kita sudah tahu seberapa baik cara kerjanya. Menerapkan metode ini pada transaksi pengguna selama 2 minggu terakhir, kami memperoleh metrik berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Di sini k — jumlah produk serupa yang diambil untuk setiap produk yang dibeli oleh pembeli selama 14 hari terakhir.
Pendekatan ini bekerja sangat baik terutama untuk klien kami, yang sangat penting untuk tidak merekomendasikan apa pun yang sudah ada dalam riwayat pembelian pengguna.

Periode pembelian terlambat

Seperti yang telah kita ketahui, karena tingginya frekuensi pembelian barang, pendekatan pertama bekerja dengan baik untuk kebutuhan spesifik kita. Namun bagaimana dengan barang-barang seperti sabun cuci/sampo/dll. Artinya, dengan produk yang kemungkinan besar tidak diperlukan setiap satu atau dua minggu dan metode sebelumnya tidak dapat mengekstraksinya. Hal ini mengarah pada gagasan berikut - diusulkan untuk menghitung rata-rata periode pembelian setiap produk untuk pelanggan yang membeli produk lebih banyak k sekali. Dan kemudian ekstrak apa yang kemungkinan besar sudah habis oleh pembeli. Periode perhitungan barang dapat diperiksa dengan mata Anda sendiri untuk kecukupannya:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Dan kemudian kita akan melihat apakah akhir periode produk termasuk dalam interval waktu ketika rekomendasi akan diproduksi dan mengambil sampel apa yang terjadi. Pendekatannya dapat diilustrasikan seperti ini:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Di sini kami memiliki 2 kasus utama yang dapat dipertimbangkan:

  1. Apakah perlu mengambil sampel produk dari pelanggan yang pembelian produknya kurang dari K kali.
  2. Apakah perlu mengambil sampel suatu produk jika akhir periodenya jatuh sebelum awal interval target.

Grafik berikut menunjukkan hasil yang dicapai metode ini dengan hyperparameter berbeda:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
ft — Ambil hanya pelanggan yang telah membeli produk setidaknya K (di sini K=5) kali
tm — Ambil hanya kandidat yang berada dalam interval target

Tidak mengherankan kalau dia mampu (0, 0) yang terbesar mengingat kembali dan yang terkecil ketelitian, karena dalam kondisi ini kandidat terbanyak diambil. Namun, hasil terbaik dicapai ketika kita tidak mengambil sampel produk untuk pelanggan yang membeli produk tertentu kurang dari itu k kali dan ekstraksi, termasuk barang, yang akhir periodenya jatuh sebelum interval target.

Populer berdasarkan kategori

Ide lain yang cukup jelas adalah mencicipi produk populer di berbagai kategori atau merek. Di sini kami menghitung untuk setiap pembeli atas-k kategori/merek “favorit” dan ekstrak “populer” dari kategori/merek ini. Dalam kasus kami, kami akan menentukan “favorit” dan “populer” berdasarkan jumlah pembelian produk. Keuntungan tambahan dari pendekatan ini adalah penerapannya dalam kasus cold start. Artinya, bagi pelanggan yang hanya melakukan sedikit pembelian, atau sudah lama tidak mengunjungi toko, atau baru saja mengeluarkan kartu loyalitas. Bagi mereka, lebih mudah dan lebih baik untuk menyimpan barang yang populer di kalangan pelanggan dan memiliki sejarah. Metrik yang dihasilkan adalah:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Di sini angka setelah kata “kategori” berarti tingkat penumpukan kategori tersebut.

Secara keseluruhan, tidak mengherankan jika kategori yang lebih sempit memperoleh hasil yang lebih baik, karena kategori tersebut mengekstrak produk “favorit” yang lebih akurat bagi pembeli.

Alternatif pembelian barang yang berbeda dari minggu ke minggu

Pendekatan menarik yang belum pernah saya lihat di artikel tentang sistem pemberi rekomendasi adalah metode statistik rantai Markov yang cukup sederhana dan sekaligus berfungsi. Di sini kami mengambil waktu 2 minggu berbeda, lalu untuk setiap pelanggan kami membuat pasangan produk [dibeli di minggu i]-[dibeli di minggu j], di mana j > i, dan dari sini kami menghitung kemungkinan peralihan ke produk lain minggu depan untuk setiap produk. Artinya, untuk setiap pasang barang produki-produkj Kami menghitung jumlah mereka dalam pasangan yang ditemukan dan membaginya dengan jumlah pasangan, dimana produk berada di minggu pertama. Untuk mengekstrak kandidat, kami mengambil tanda terima terakhir pembeli dan mengekstraknya atas-k produk berikutnya yang paling mungkin dari matriks transisi yang kami terima. Proses pembuatan matriks transisi terlihat seperti ini:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Dari contoh nyata pada matriks probabilitas transisi kita melihat fenomena menarik berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Di sini Anda dapat melihat ketergantungan menarik yang terungkap dalam perilaku konsumen: misalnya pecinta buah jeruk atau merek susu yang kemungkinan besar mereka akan beralih ke merek lain. Tidak mengherankan juga jika produk dengan frekuensi pembelian berulang yang tinggi, seperti mentega, juga berakhir di sini.

Metrik pada metode dengan rantai Markov adalah sebagai berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
k — jumlah produk yang diambil untuk setiap produk yang dibeli dari transaksi terakhir pembeli.
Seperti yang bisa kita lihat, hasil terbaik ditunjukkan oleh konfigurasi dengan k=4. Lonjakan pada minggu ke-4 dapat dijelaskan oleh perilaku musiman menjelang hari raya. 

Produk yang serupa dengan pembeli, menurut karakteristik yang dibangun oleh model yang berbeda

Sekarang kita telah sampai pada bagian tersulit dan menarik - mencari tetangga terdekat berdasarkan vektor pelanggan dan produk yang dibuat menurut berbagai model. Dalam pekerjaan kami, kami menggunakan 3 model seperti itu:

  • ALS
  • Word2Vec (Item2Vec untuk tugas seperti itu)
  • DSSM

Kami telah membahas ALS, Anda dapat membaca tentang cara belajarnya di sini. Dalam kasus Word2Vec, kami menggunakan implementasi model yang terkenal dari gensim. Dengan analogi teks, kami mendefinisikan penawaran sebagai tanda terima pembelian. Jadi, ketika membangun vektor produk, model belajar memprediksi “konteks” produk dalam tanda terima (produk yang tersisa dalam tanda terima). Di data e-commerce, lebih baik menggunakan sesi pembeli daripada tanda terima; orang-orang dari Ozon. Dan DSSM lebih menarik untuk diurai. Awalnya ditulis oleh orang-orang dari Microsoft sebagai model pencarian, Anda dapat membaca makalah penelitian aslinya di sini. Arsitektur modelnya terlihat seperti ini:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Di sini Q — kueri, kueri penelusuran pengguna, D[saya] — dokumen, halaman internet. Masukan ke model masing-masing adalah atribut permintaan dan halaman. Setelah setiap lapisan masukan terdapat sejumlah lapisan yang terhubung penuh (multilayer perceptron). Selanjutnya, model belajar meminimalkan kosinus antara vektor-vektor yang diperoleh pada lapisan terakhir model.
Tugas rekomendasi menggunakan arsitektur yang persis sama, hanya saja alih-alih permintaan ada pengguna, dan bukannya halaman ada produk. Dan dalam kasus kami, arsitektur ini diubah menjadi berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Sekarang, untuk memeriksa hasilnya, masih membahas poin terakhir - jika dalam kasus ALS dan DSSM kita telah mendefinisikan vektor pengguna secara eksplisit, maka dalam kasus Word2Vec kita hanya memiliki vektor produk. Di sini, untuk membangun vektor pengguna, kami telah mendefinisikan 3 pendekatan utama:

  1. Tinggal dijumlahkan saja vektor-vektornya, lalu untuk cosine distance-nya ternyata kita tinggal rata-ratakan produk yang ada di history pembeliannya.
  2. Penjumlahan vektor dengan beberapa pembobotan waktu.
  3. Menimbang barang dengan koefisien TF-IDF.

Dalam kasus pembobotan linier vektor pembeli, kami melanjutkan dari hipotesis bahwa produk yang dibeli pengguna kemarin memiliki pengaruh yang lebih besar terhadap perilakunya dibandingkan produk yang dibelinya enam bulan lalu. Jadi kita mempertimbangkan minggu sebelumnya pembeli dengan odds 1, dan apa yang terjadi selanjutnya dengan odds ½, ⅓, dst.:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Untuk koefisien TF-IDF, kami melakukan hal yang persis sama seperti di TF-IDF untuk teks, hanya saja kami menganggap pembeli sebagai dokumen, dan cek sebagai penawaran, masing-masing, kata adalah produk. Dengan cara ini, vektor pengguna akan lebih banyak beralih ke barang langka, sedangkan barang yang sering dan familiar bagi pembeli tidak akan banyak mengubahnya. Pendekatannya dapat diilustrasikan seperti ini:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Sekarang mari kita lihat metriknya. Berikut hasil ALSnya:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Metrik untuk Item2Vec dengan variasi berbeda dalam membangun vektor pembeli:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Dalam hal ini, model yang sama persis digunakan seperti pada baseline kita. Satu-satunya perbedaan adalah k mana yang akan kita gunakan. Untuk hanya menggunakan model kolaboratif, Anda harus mengambil sekitar 50-70 produk terdekat untuk setiap pelanggan.

Dan metrik menurut DSSM:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Bagaimana cara menggabungkan semua metode?

Keren, kata Anda, tapi apa yang harus dilakukan dengan seperangkat alat ekstraksi kandidat yang begitu besar? Bagaimana cara memilih konfigurasi optimal untuk data Anda? Di sini kita mempunyai beberapa masalah:

  1. Penting untuk membatasi ruang pencarian hyperparameter di setiap metode. Tentu saja, setiap titik terpisah, namun jumlah titik yang memungkinkan sangat besar.
  2. Dengan menggunakan sampel kecil terbatas dari metode tertentu dengan hyperparameter tertentu, bagaimana Anda dapat memilih konfigurasi terbaik untuk metrik Anda?

Kami belum menemukan jawaban pasti yang benar untuk pertanyaan pertama, jadi kami melanjutkan dari yang berikut: untuk setiap metode, pembatas ruang pencarian hyperparameter ditulis, bergantung pada beberapa statistik pada data yang kami miliki. Jadi, dengan mengetahui periode rata-rata antara pembelian dari orang-orang, kita dapat menebak periode berapa yang harus digunakan dengan metode “apa yang sudah dibeli” dan “periode pembelian yang sudah lama berlalu”.

Dan setelah kami melalui sejumlah variasi metode yang berbeda, kami mencatat hal berikut: setiap implementasi mengekstrak sejumlah kandidat dan memiliki nilai tertentu dari metrik kunci bagi kami (ingat). Kami ingin mendapatkan total sejumlah kandidat, bergantung pada daya komputasi yang kami izinkan, dengan metrik setinggi mungkin. Di sini masalahnya dengan indahnya dipecah menjadi masalah ransel.
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Di sini jumlah kandidat adalah bobot ingot, dan metode penarikan kembali adalah nilainya. Namun, ada 2 poin lagi yang harus diperhatikan saat mengimplementasikan algoritma:

  • Metode mungkin tumpang tindih dalam kandidat yang diambil.
  • Dalam beberapa kasus, mengambil satu metode dua kali dengan parameter berbeda adalah hal yang benar, dan kandidat keluaran dari metode pertama tidak akan menjadi bagian dari metode kedua.

Misalnya, jika kita menerapkan metode “apa yang sudah saya beli” dengan interval pengambilan yang berbeda, maka kumpulan kandidatnya akan bertumpuk satu sama lain. Pada saat yang sama, parameter yang berbeda dalam “pembelian berkala” di pintu keluar tidak memberikan titik temu yang lengkap. Oleh karena itu, kami membagi pendekatan pengambilan sampel dengan parameter berbeda ke dalam blok sedemikian rupa sehingga dari setiap blok kami ingin mengambil paling banyak satu pendekatan ekstraksi dengan hyperparameter tertentu. Untuk melakukan ini, Anda perlu sedikit pandai dalam mengimplementasikan knapsack problem, namun asimtotik dan hasilnya tidak akan berubah.

Kombinasi cerdas ini memungkinkan kami mendapatkan metrik berikut dibandingkan dengan model kolaboratif sederhana:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Pada metrik terakhir kita melihat gambar berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Namun, di sini Anda dapat melihat bahwa ada satu hal yang terungkap sebagai rekomendasi yang berguna untuk bisnis. Sekarang kita baru saja mempelajari cara memprediksi dengan baik apa yang akan dibeli pengguna, misalnya, minggu depan. Namun memberikan diskon pada sesuatu yang sudah dia beli saja tidaklah keren. Namun ada baiknya untuk memaksimalkan ekspektasi, misalnya, dari metrik berikut:

  1. Margin/turnover berdasarkan rekomendasi pribadi.
  2. Cek pelanggan rata-rata.
  3. Frekuensi kunjungan.

Jadi, kami mengalikan probabilitas yang diperoleh dengan koefisien yang berbeda dan mengurutkannya ulang sehingga produk yang memengaruhi metrik di atas menjadi yang teratas. Tidak ada solusi siap pakai mengenai pendekatan mana yang terbaik untuk digunakan. Kami bahkan bereksperimen dengan koefisien tersebut secara langsung dalam produksi. Namun berikut adalah teknik menarik yang paling sering memberi kita hasil terbaik:

  1. Kalikan dengan harga/margin produk.
  2. Kalikan dengan resi rata-rata di mana produk tersebut muncul. Jadi barang akan muncul, yang biasanya mereka ambil barang lain.
  3. Kalikan dengan rata-rata frekuensi kunjungan pembeli produk ini, berdasarkan hipotesis bahwa produk ini memancing orang untuk lebih sering kembali lagi.

Setelah melakukan percobaan dengan koefisien, kami memperoleh metrik produksi berikut:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline
Di sini konversi produk secara keseluruhan — bagian produk yang dibeli dari semua produk dalam rekomendasi yang kami buat.

Pembaca yang penuh perhatian akan melihat perbedaan yang signifikan antara metrik offline dan online. Perilaku ini dijelaskan oleh fakta bahwa tidak semua filter dinamis untuk produk yang direkomendasikan dapat diperhitungkan saat melatih model. Bagi kami, merupakan hal yang normal ketika separuh dari kandidat yang diambil dapat disaring; kekhususan ini merupakan hal yang umum dalam industri kami.

Dari segi pendapatan diperoleh cerita sebagai berikut, terlihat jelas setelah peluncuran rekomendasi, pendapatan grup uji tumbuh pesat, kini rata-rata peningkatan pendapatan dengan rekomendasi kami adalah 3-4%:
Bagaimana kami meningkatkan kualitas rekomendasi secara signifikan di ritel offline

Sebagai kesimpulan, saya ingin mengatakan bahwa jika Anda memerlukan rekomendasi non-waktu nyata, maka peningkatan kualitas yang sangat besar dapat ditemukan dalam eksperimen dengan mengekstraksi kandidat untuk rekomendasi. Banyaknya waktu untuk menghasilkannya memungkinkan untuk menggabungkan banyak metode yang baik, yang secara total akan memberikan hasil yang luar biasa bagi bisnis.

Saya akan dengan senang hati mengobrol di komentar dengan siapa saja yang menganggap materinya menarik. Anda dapat mengajukan pertanyaan kepada saya secara pribadi di Telegram. Saya juga berbagi pemikiran saya tentang AI/startup di blog saya saluran telegram - selamat datang :)

Sumber: www.habr.com

Tambah komentar