Setiap acara tersebut disertai dengan lonjakan minat dari pengguna Internet. Orang tidak hanya ingin membaca tentang apa yang terjadi, tetapi juga melihat gambarnya. Mereka pergi mencari gambar dan berharap menemukan gambar yang segar dan relevan yang mungkin belum ada beberapa jam yang lalu. Bunga muncul secara tidak terduga dan dalam beberapa hari turun menjadi hampir nol.
Keunikan dari situasi ini adalah bahwa mesin pencari konvensional tidak dirancang untuk skenario seperti itu. Selain itu, kriteria kesegaran konten bertentangan dengan properti penting lainnya dari penelusuran yang baik: relevansi, otoritas, dll. Teknologi khusus diperlukan tidak hanya untuk menemukan konten baru, tetapi juga untuk menjaga keseimbangan dalam hasil.
Nama saya Denis Sakhnov, hari ini saya akan berbicara tentang pendekatan baru untuk mengirimkan konten baru ke Yandex. Gambar. Dan kolega saya Dmitry Krivokonkrivokonakan membagikan detail tentang metrik dan peringkat gambar baru. Anda akan belajar tentang pendekatan lama dan baru untuk penilaian kualitas. Kami juga akan mengingatkan Anda tentang YT, Logbroker dan RTMR.
Agar pencarian gambar bekerja dengan baik pada bagian kueri tersebut, yang jawabannya harus berisi konten baru, Anda perlu menyelesaikan tugas-tugas berikut:
- Belajar untuk menemukan dan mendownload gambar segar dengan cepat.
- Belajar memprosesnya dengan cepat.
- Pelajari cara cepat mengumpulkan dokumen untuk pencarian berdasarkan gambar (poin ini akan menjadi lebih jelas seiring berjalannya cerita).
- Merumuskan kriteria kualitas pencarian konten segar.
- Belajar menentukan peringkat dan mencampur konten di SERP berdasarkan persyaratan kualitas.
Mari kita mulai dengan poin pertama.
1. Mengambil gambar
Ada banyak situs di Internet, banyak di antaranya secara teratur menerbitkan sesuatu, termasuk gambar. Agar orang dapat melihat semua ini di pencarian Gambar, robot harus menjangkau situs tersebut dan mengunduh konten. Biasanya begitulah cara kerja penelusuran: kami menjelajahi situs yang kami kenal dengan relatif cepat dan mendapatkan gambar baru. Namun ketika sampai pada konten yang tiba-tiba menjadi relevan saat ini, model ini gagal. Karena Internet sangat besar, tidak mungkin mengunduh dokumen HTML dari semua situs di dunia "saat ini" dan mencerna semuanya dengan cepat. Setidaknya belum ada seorang pun di dunia yang memecahkan masalah seperti itu.
Seseorang mungkin membayangkan solusi untuk masalah dengan cara ini: melacak semburan permintaan dan pertama-tama hanya memproses sumber yang entah bagaimana cocok dengan permintaan tersebut. Tapi itu hanya terdengar bagus di atas kertas. Pertama, untuk memeriksa korespondensi sesuatu dengan sesuatu, Anda harus sudah memiliki konten di tangan. Kedua, jika kita mulai melakukan sesuatu setelah puncak permintaan, maka kita sudah terlambat. Kedengarannya gila, Anda perlu menemukan konten segar sebelum membutuhkannya. Tetapi bagaimana Anda memprediksi hal yang tidak terduga?
Jawaban yang benar tidak mungkin. Kami tidak tahu apa-apa tentang waktu letusan gunung berapi. Namun kami tahu di situs mana konten segar dan bermanfaat biasanya muncul. Kami pergi dari sisi ini. Kami mulai menggunakan rumus yang dipelajari mesin yang memprioritaskan perayapan kami berdasarkan kualitas dan relevansi konten. Biarkan SEO memaafkan kami: kami tidak akan membahas detailnya di sini. Tugas robot adalah mengirimkan dokumen HTML kepada kita secepat mungkin. Baru setelah itu kita dapat melihat isinya dan menemukan teks baru, tautan ke gambar, dll.
Tautan gambar memang bagus, tetapi sejauh ini tidak terlalu berguna untuk penelusuran. Pertama-tama, Anda perlu mengunduhnya kepada kami. Tetapi sekali lagi, ada terlalu banyak tautan baru ke gambar untuk diunduh secara instan. Dan masalahnya di sini bukan hanya pada sumber daya kami: pemilik situs juga tidak ingin Yandex mengganggu mereka secara tidak sengaja. Oleh karena itu, kami menggunakan pembelajaran mesin untuk memprioritaskan unduhan gambar. Faktornya berbeda, ada banyak, kami tidak akan menjelaskan semuanya, tetapi misalnya kami dapat mengatakan bahwa frekuensi munculnya gambar pada sumber daya yang berbeda juga memengaruhi prioritas.
Kami sekarang memiliki daftar tautan ke gambar. Kemudian kami mengunduhnya untuk diri kami sendiri. Kami menggunakan layanan Logbroker kami sendiri. Benda ini berfungsi sebagai bus transportasi, berhasil bertahan dari lalu lintas dalam jumlah besar. Beberapa tahun yang lalu, kolega kami Alexey Ozeritsky sudah membicarakan tentang teknologi ini di Habré.
Di sinilah tahap pertama diselesaikan secara logis. Kami telah mengidentifikasi sumbernya dan berhasil mengekstrak beberapa gambar. Hanya sedikit yang tersisa: untuk mempelajari cara bekerja dengan mereka.
2. Mengolah gambar
Gambar-gambar itu sendiri tentu saja bermanfaat, tetapi tetap perlu dipersiapkan. Ia
bekerja seperti ini: 1. Dalam layanan komputasi stateless RTHub, versi dengan ukuran berbeda disiapkan. Ini diperlukan untuk pencarian, di mana akan lebih mudah untuk menampilkan thumbnail dalam hasil, dan memberikan konten asli dari situs sumber saat diklik.
2. Fitur jaringan saraf dihitung. Offline (yaitu, sebelumnya, dan bukan pada saat pemberian peringkat) pada mesin dengan GPU, jaringan neural diluncurkan, yang hasilnya adalah vektor fitur gambar. Dan juga nilai-nilai pengklasifikasi yang berguna dihitung: keindahan, estetika, konten yang tidak pantas dan banyak lainnya. Kami masih membutuhkan semua ini.
3. Dan kemudian menggunakan informasi yang dihitung dari gambar, duplikat direkatkan. Ini penting: kemungkinan besar pengguna tidak akan senang dengan hasil penelusuran di mana gambar yang sama akan menang. Pada saat yang sama, mereka mungkin sedikit berbeda: di suatu tempat mereka memotong tepi, di suatu tempat mereka menambahkan tanda air, dll. Kami melakukan perekatan duplikat dalam dua tahap. Pertama, ada pengelompokan kasar gambar dekat menggunakan vektor jaringan saraf. Dalam kasus ini, gambar-gambar dalam cluster bahkan mungkin tidak sama artinya, tetapi ini memungkinkan kita untuk memparalelkan pekerjaan lebih lanjut dengannya. Kemudian, di dalam setiap cluster, kami merekatkan duplikat dengan mencari titik jangkar di gambar. Harap diperhatikan: jaringan neural hebat dalam mencari gambar yang mirip, tetapi alat yang kurang "modern" lebih efektif untuk menemukan duplikat lengkap; jaringan saraf bisa jadi terlalu pintar dan melihat "hal yang sama dalam hal yang berbeda".
Jadi, pada akhir tahap ini, kami memiliki gambar yang sudah jadi dalam versi yang berbeda, melewati perekatan duplikat, dengan jaringan saraf yang dihitung sebelumnya dan fitur lainnya. Mengirimkan ke peringkat? Tidak, ini terlalu dini.
3. Kami mengumpulkan gambar menjadi dokumen
Dokumen adalah nama kami untuk entitas yang berpartisipasi dalam pemeringkatan. Dari sisi pengguna, mungkin terlihat seperti tautan ke halaman (mencari melalui situs), gambar (mencari gambar), video (mencari video), pembuat kopi (mencari barang), atau yang lainnya. Namun di dalam, di balik setiap unit dalam hasil pencarian, ada banyak sekali informasi yang heterogen. Dalam kasus kami - tidak hanya gambar itu sendiri, jaringan sarafnya, dan fitur lainnya, tetapi juga informasi tentang halaman tempat meletakkannya, teks yang menjelaskannya di halaman ini, statistik perilaku pengguna (misalnya, klik pada gambar). Semuanya - ini adalah dokumennya. Dan sebelum melanjutkan langsung ke pencarian, dokumen harus dikumpulkan. Dan mekanisme pembentukan basis pencarian gambar yang biasa tidak cocok di sini.
Tantangan utamanya adalah bahwa berbagai komponen dokumen dihasilkan pada waktu dan tempat yang berbeda. Logbroker yang sama dapat mengunduh informasi tentang halaman dan teks, tetapi tidak secara bersamaan dengan gambar. Data perilaku pengguna waktu-nyata datang melalui sistem pemrosesan log RTMR . Dan semua ini disimpan secara terpisah dari gambar. Untuk mengumpulkan dokumen, Anda harus melewati sumber data yang berbeda secara konsisten.
Kami menggunakan MapReduce untuk membentuk basis pencarian utama gambar. Ini adalah cara yang efisien dan andal untuk bekerja dengan data dalam jumlah besar. Tetapi untuk tugas kesegaran, itu tidak cocok: kita harus sangat cepat menerima dari penyimpanan semua data yang diperlukan untuk pembentukan setiap dokumen, yang tidak sesuai dengan MapReduce. Oleh karena itu, dalam loop kesegaran, kami menggunakan metode yang berbeda: informasi heterogen masuk ke sistem pemrosesan data streaming RTRobot, yang menggunakan penyimpanan KV untuk menyinkronkan aliran pemrosesan data yang berbeda dan toleransi kesalahan.
Dalam loop kesegaran, kami menggunakan tabel dinamis berdasarkan sistem YT kami sebagai penyimpanan KV... Faktanya, ini adalah gudang dari semua konten yang mungkin kita butuhkan. Dengan akses yang sangat cepat. Dari sanalah kami segera meminta segala sesuatu yang mungkin berguna untuk mencari gambar, mengumpulkan dokumen dan, menggunakan LogBroker, mentransfernya ke server pencarian, dari mana data yang disiapkan ditambahkan ke database pencarian.
Berkat sirkuit terpisah untuk bekerja dengan kesegaran, yang mencakup semua tahapan (mulai dari mencari gambar di web hingga menyiapkan dokumen), kami dapat memproses ratusan gambar baru per detik dan mengirimkannya ke penelusuran, rata-rata, dalam beberapa menit sejak kemunculannya.
Tetapi membawa gambar untuk pencarian saja tidak cukup. Anda harus dapat menampilkannya di hasil penelusuran jika berguna. Dan di sini kita melanjutkan ke langkah berikutnya - menentukan utilitas. Saya memberikan lantai ke Dmitrykrivokon...
4. Kami mengukur kualitas
Pendekatan umum untuk mengoptimalkan kualitas penelusuran dimulai dengan memilih metrik. Dalam pencarian gambar Yandex, jenis metrik adalah sekitar berikut:
di mana
n adalah jumlah gambar pertama (dokumen) dari masalah yang kita mengevaluasi;
p_i - bobot posisi dalam hasil pencarian (semakin tinggi posisinya, semakin berat);
r_i - relevansi (seberapa dekat gambar cocok dengan permintaan);
w_i… m_i - komponen lain dari kualitas respons (kesegaran, keindahan, ukuran ...);
f (...) adalah model yang menggabungkan komponen-komponen ini.
Sederhananya, semakin tinggi gambar yang lebih berguna dalam hasil pencarian, semakin tinggi jumlahnya dalam ekspresi ini.
Beberapa kata tentang model f (...). Dia dilatih dengan perbandingan gambar berpasangan dengan polokers. Seseorang melihat permintaan dan dua gambar, lalu memilih yang terbaik. Jika Anda mengulanginya berkali-kali, model akan belajar memprediksi komponen kualitas mana yang paling penting untuk permintaan tertentu.
Misalnya, jika permintaan foto baru lubang hitam, maka komponen kesegaran memiliki koefisien tertinggi. Dan jika tentang pulau tropis, maka keindahan, karena sedikit orang yang mencari foto amatir pulau jelek, biasanya diperlukan gambar yang menarik. Semakin baik tampilan pengiriman gambar dalam kasus seperti itu, semakin besar kemungkinan seseorang akan terus menggunakan layanan tersebut. Tapi jangan sampai terganggu dengan ini.
Jadi, tugas algoritme peringkat adalah mengoptimalkan metrik ini. Tetapi Anda tidak dapat memperkirakan semua jutaan permintaan harian: ini adalah beban yang sangat besar, dan pertama-tama, pada toloker. Oleh karena itu, untuk pengendalian kualitas, kami mengalokasikan sampel acak (keranjang) untuk jangka waktu tertentu.
Tampaknya ada metrik di mana komponen kesegaran sudah diperhitungkan, dan ada pilihan permintaan untuk kendali mutu. Anda dapat menutup topik ini dan pergi ke peringkat. Tapi tidak.
Dalam kasus gambar baru, masalah muncul. Saat mengevaluasi algoritme, kami harus dapat memahami bahwa kami menanggapi permintaan pengguna dengan baik pada saat permintaan dimasukkan dalam pencarian. Permintaan baru tahun lalu mungkin tidak seperti itu sekarang. Dan hal lain akan menjadi jawaban yang bagus. Oleh karena itu, sekeranjang permintaan tetap (misalnya, per tahun) tidak cocok.
Sebagai pendekatan pertama untuk memecahkan masalah ini, kami mencoba melakukannya tanpa keranjang sama sekali. Mengikuti logika tertentu, kami mulai mencampur gambar baru ke dalam keluaran, lalu mempelajari perilaku pengguna. Jika berubah menjadi lebih baik (misalnya, orang mengklik lebih aktif pada hasil), maka pencampuran berguna. Namun pendekatan ini memiliki kelemahan: penilaian kualitas secara langsung bergantung pada kualitas algoritme kami. Misalnya, jika untuk beberapa permintaan algoritme kami gagal dan tidak mencampur konten, maka tidak akan ada yang dapat dibandingkan, yang berarti kami tidak akan memahami apakah konten baru diperlukan di sana. Jadi kami sampai pada pemahaman bahwa diperlukan sistem evaluasi independen yang akan menunjukkan kualitas algoritme kami saat ini dan tidak bergantung padanya.
Pendekatan kedua kami adalah sebagai berikut. Ya, kami tidak dapat menggunakan keranjang tetap karena variabilitas permintaan baru. Tetapi kita dapat meninggalkan bagian dasar keranjang yang tidak ada persyaratan kesegarannya, dan menambahkan bagian segar di sana setiap hari. Untuk melakukan ini, kami telah membuat algoritme yang memilih orang-orang di aliran permintaan pengguna yang kemungkinan besar memerlukan respons dengan gambar baru. Pertanyaan seperti itu biasanya memiliki detail yang tidak terduga. Tentu saja, kami menggunakan validasi manual untuk menyaring kebisingan dan puing-puing serta mengakomodasi situasi khusus. Misalnya, kueri mungkin hanya relevan untuk negara tertentu. Dalam hal ini, kami tidak lagi dibantu oleh toloker, tetapi oleh asesor: pekerjaan semacam itu membutuhkan pengalaman dan pengetahuan khusus.
Minta [foto lubang hitam]
Pada saat yang sama, kami tidak hanya menambahkan permintaan baru ke keranjang untuk penilaian kualitas, tetapi juga menyimpan hasil pencarian kami pada saat permintaan ditemukan. Jadi, kami tidak hanya dapat menilai kualitas utama tanggapan, tetapi juga seberapa cepat penelusuran kami bereaksi terhadap peristiwa tersebut.
Jadi, mari kita rangkum hasil awalnya. Untuk menanggapi dengan baik pertanyaan baru, kami tidak hanya memastikan pengiriman cepat untuk penelusuran dan pemrosesan gambar, tetapi juga menemukan kembali cara kami mengukur kualitas. Tinggal mencari tahu kualitas yang kami ukur.
5. Peringkat
Izinkan saya mengingatkan Anda bahwa di atas kami menjelaskan transisi dari pendekatan pertama untuk menilai kualitas pencarian gambar ke yang kedua: dari mencampur hasil hingga pengisian ulang keranjang penerimaan setiap hari dengan permintaan baru. Paradigma telah berubah - algoritme itu sendiri membutuhkan perubahan. Memang tidak mudah menjelaskannya kepada pembaca dari luar, tapi saya akan coba. Jika Anda memiliki pertanyaan, jangan ragu untuk bertanya di komentar.
Sebelumnya, metode tersebut diimplementasikan dengan analogi dengan solusi yang saya bicarakanrekan kami Alexey Shagraev. Ada sumber utama dokumen (indeks pencarian utama). Dan juga ada sumber tambahan dokumen baru yang kecepatan pencariannya sangat penting. Dokumen dari sumber yang berbeda tidak dapat diberi peringkat berdasarkan satu logika, jadi kami menggunakan skema yang agak tidak sepele untuk mencampur dokumen dari sumber baru ke dalam masalah utama. Selanjutnya, kami membandingkan metrik hasil pencarian utama tanpa dan dengan dokumen tambahan.
Sekarang situasinya berbeda. Ya, sumbernya masih berbeda secara fisik, tetapi dalam hal metrik, tidak masalah dari mana gambar baru itu berasal. Itu juga bisa didapat dari sumber utama jika robot biasa berhasil mendapatkannya. Dalam hal ini, metrik akan identik dengan situasi ketika gambar yang sama sampai ke masalah melalui sumber terpisah. Pendekatan baru memiliki kesegaran kueri dan hasil yang berarti, dan arsitektur sumber tidak lagi begitu penting. Hasilnya, dokumen utama dan terbaru diberi peringkat menggunakan model yang sama, yang memungkinkan kita untuk mencampur gambar baru ke dalam keluaran menggunakan logika yang jauh lebih sederhana daripada sebelumnya: dengan hanya mengurutkan berdasarkan nilai pada keluaran model tunggal. Tentunya hal ini juga berpengaruh pada kualitas.
Berpindah. Untuk menentukan peringkat sesuatu, Anda memerlukan kumpulan data tempat model akan dilatih. Untuk gambar segar - kumpulan data dengan contoh konten baru. Kami sudah memiliki kumpulan data dasar, kami perlu belajar cara menambahkan contoh kesegaran ke dalamnya. Dan di sini kita diingatkan tentang keranjang penerima, yang sudah kita gunakan untuk kontrol kualitas. Permintaan baru di dalamnya bervariasi setiap hari, yang berarti keesokan harinya kami dapat mengambil permintaan baru kemarin dan menambahkannya ke kumpulan data untuk pelatihan. Pada saat yang sama, kami tidak mengambil risiko pelatihan ulang, karena data yang sama tidak digunakan secara bersamaan untuk pelatihan dan kontrol.
Karena transisi ke skema baru, kualitas hasil penelusuran untuk gambar baru meningkat secara signifikan. Jika pelatihan sebelumnya terutama didasarkan pada statistik pengguna pada permintaan baru, dan karena itu, kami memiliki masukan dengan algoritme peringkat saat ini, sekarang dasar pelatihan adalah keranjang permintaan yang dikumpulkan secara objektif, yang hanya bergantung pada aliran permintaan pengguna. Hal ini memungkinkan kami untuk belajar bagaimana menampilkan hasil yang segar bahkan ketika sebelumnya tidak ada. Selain itu, karena penggabungan pipeline peringkat dari kontur utama dan baru, yang terakhir mulai berkembang lebih cepat secara nyata (semua peningkatan di satu sumber sekarang secara otomatis mencapai yang kedua).
Tidak mungkin untuk memberi tahu secara rinci dalam satu posting tentang semua pekerjaan yang telah dilakukan oleh tim pencari gambar Yandex. Kami berharap kami berhasil menjelaskan apa saja ciri-ciri mencari gambar segar. Dan mengapa perubahan diperlukan di semua tahap pencarian agar pengguna dapat dengan cepat menemukan foto-foto baru Pluto atau informasi relevan lainnya.