Pencarian berbasis kata kunci
Di Tokopedia, kami memahami bahwa nilai dalam korpus produk kami hanya akan terbuka jika pembeli dapat menemukan produk yang relevan bagi mereka, sehingga kami berusaha keras untuk meningkatkan relevansi hasil pencarian.
Untuk meningkatkan upaya tersebut, kami memperkenalkan fitur pencarian kemiripan di Tokopedia. Jika Anda membuka halaman hasil pencarian di perangkat seluler, Anda akan menemukan tombol "..." yang menampilkan menu yang memberikan Anda pilihan untuk mencari produk yang mirip dengan produk tersebut.
Pencarian berbasis kata kunci
Pencarian Tokopedia menggunakan Elasticsearch untuk pencarian dan pemeringkatan produk. Untuk setiap permintaan pencarian, pertama-tama kami melakukan query ke Elasticsearch, yang akan mengurutkan produk sesuai dengan permintaan pencarian. Elasticsearch menyimpan setiap kata sebagai urutan angka yang mewakili kode ASCII (atau UTF) untuk setiap huruf. Ini membangun indeks terbalik untuk mengetahui dengan cepat, dokumen mana yang mengandung kata-kata dari kueri pengguna, dan kemudian menemukan kecocokan terbaik di antara mereka menggunakan berbagai algoritma penilaian. Algoritme penilaian ini tidak terlalu memperhatikan apa arti dari kata-kata tersebut, tetapi lebih pada seberapa sering kata-kata tersebut muncul dalam dokumen, seberapa dekat kata-kata tersebut satu sama lain, dll. Representasi ASCII jelas mengandung informasi yang cukup untuk menyampaikan semantik (bagaimanapun juga kita, manusia, dapat memahaminya). Sayangnya, tidak ada algoritme yang baik bagi komputer untuk membandingkan kata-kata yang dikodekan dengan ASCII berdasarkan artinya.
Representasi vektor
Salah satu solusi untuk hal ini adalah dengan membuat representasi alternatif, yang tidak hanya memberitahu kita tentang huruf-huruf yang terkandung dalam kata tersebut, namun juga tentang maknanya. Sebagai contoh, kita dapat mengkodekan kata lain yang sering digunakan bersama dengan kata tersebut (diwakili oleh konteks yang mungkin). Kemudian kita akan mengasumsikan bahwa konteks yang serupa mewakili hal yang serupa, dan mencoba membandingkannya dengan menggunakan metode matematika. Kita bahkan dapat menemukan cara untuk mengkodekan seluruh kalimat berdasarkan maknanya.
Blog_Bagaimana kami menggunakan pencarian semantik untuk membuat pencarian kami 10x lebih cerdas_2.png
Pilih mesin pencari kemiripan semantik
Sekarang setelah kita memiliki vektor fitur, masalah yang tersisa adalah bagaimana cara mengambil vektor yang mirip dengan vektor target dari kumpulan vektor yang sangat besar. Dalam hal mesin pencari penyematan, kami mencoba POC pada beberapa mesin yang tersedia di Github, beberapa di antaranya adalah FAISS, Vearch, Milvus.
Kami lebih memilih Milvus daripada mesin lainnya berdasarkan hasil uji beban. Di satu sisi, kami telah menggunakan FAISS sebelumnya di tim lain dan karenanya kami ingin mencoba sesuatu yang baru. Dibandingkan dengan Milvus, FAISS lebih merupakan sebuah library yang mendasari, oleh karena itu kurang nyaman untuk digunakan. Setelah kami mempelajari lebih lanjut tentang Milvus, kami akhirnya memutuskan untuk mengadopsi Milvus karena dua fitur utamanya:
Milvus sangat mudah digunakan. Yang perlu Anda lakukan hanyalah menarik citra Docker-nya dan memperbarui parameter berdasarkan skenario Anda sendiri.
Milvus mendukung lebih banyak indeks dan memiliki dokumentasi pendukung yang terperinci.
Singkatnya, Milvus sangat ramah terhadap pengguna dan dokumentasinya cukup rinci. Jika Anda menemukan masalah apa pun, Anda biasanya dapat menemukan solusinya dalam dokumentasi; jika tidak, Anda selalu dapat memperoleh dukungan dari komunitas Milvus.
Layanan cluster Milvus
Setelah memutuskan untuk menggunakan Milvus sebagai mesin pencari vektor fitur, kami memutuskan untuk menggunakan Milvus untuk salah satu kasus penggunaan layanan Iklan kami di mana kami ingin mencocokkan kata kunci dengan tingkat penayangan rendah dengan kata kunci dengan tingkat penayangan tinggi. Kami mengonfigurasi node mandiri di lingkungan pengembangan (DEV) dan mulai menayangkan, node tersebut berjalan dengan baik selama beberapa hari, dan memberikan metrik CTR/CVR yang lebih baik. Jika node mandiri macet dalam produksi, seluruh layanan tidak akan tersedia. Oleh karena itu, kami perlu menggunakan layanan penelusuran yang sangat tersedia.
Milvus menyediakan Mishards, sebuah middleware cluster sharding, dan Milvus-Helm untuk konfigurasi. Di Tokopedia, kami menggunakan playbook Ansible untuk pengaturan infrastruktur sehingga kami membuat playbook untuk orkestrasi infrastruktur. Diagram di bawah ini dari dokumentasi Milvus menunjukkan cara kerja Mishards:
Blog_Bagaimana kami menggunakan pencarian semantik untuk membuat pencarian kami 10x lebih pintar_3.png
Mishards mengalirkan permintaan dari hulu ke sub-modulnya yang membagi permintaan hulu, dan kemudian mengumpulkan dan mengembalikan hasil sub-layanan ke hulu. Arsitektur keseluruhan dari solusi cluster berbasis Mishards ditunjukkan di bawah ini: Blog_Bagaimana kami menggunakan pencarian semantik untuk membuat pencarian kami 10x lebih pintar_4.jpeg
Dokumentasi resmi memberikan pengenalan yang jelas tentang Mishards. Anda dapat merujuk ke Mishards jika Anda tertarik.
Dalam layanan kata kunci-ke-kata kunci kami, kami menggunakan satu node yang dapat ditulis, dua node yang hanya dapat dibaca, dan satu instance middleware Mishards di GCP, menggunakan Milvus ansible. Sejauh ini sudah stabil. Komponen besar yang memungkinkan untuk melakukan kueri secara efisien terhadap jutaan, miliaran, atau bahkan triliunan set data vektor yang diandalkan oleh mesin pencari kemiripan adalah pengindeksan, sebuah proses pengorganisasian data yang secara drastis mempercepat pencarian data besar.
Bagaimana pengindeksan vektor mempercepat pencarian kemiripan?
Mesin pencari kemiripan bekerja dengan membandingkan input ke database untuk menemukan objek yang paling mirip dengan input tersebut. Pengindeksan adalah proses pengorganisasian data secara efisien, dan ini memainkan peran utama dalam membuat pencarian kemiripan menjadi berguna dengan secara dramatis mempercepat kueri yang memakan waktu pada kumpulan data yang besar. Setelah kumpulan data vektor yang sangat besar diindeks, kueri dapat dialihkan ke cluster, atau subset data, yang kemungkinan besar berisi vektor yang mirip dengan kueri masukan. Dalam praktiknya, ini berarti tingkat akurasi tertentu dikorbankan untuk mempercepat kueri pada data vektor yang sangat besar.
Sebuah analogi dapat diambil dari sebuah kamus, di mana kata-kata diurutkan menurut abjad. Ketika mencari sebuah kata, Anda dapat dengan cepat menavigasi ke bagian yang hanya berisi kata-kata dengan huruf awal yang sama - secara drastis mempercepat pencarian definisi kata yang dimasukkan.
Apa selanjutnya, Anda bertanya?
Blog_Bagaimana kami menggunakan pencarian semantik untuk membuat pencarian kami 10x lebih cerdas_5.jpeg
Seperti yang ditunjukkan di atas, tidak ada solusi yang cocok untuk semua, kami selalu ingin meningkatkan kinerja model yang digunakan untuk mendapatkan sematan.
Selain itu, dari sudut pandang teknis, kami ingin menjalankan beberapa model pembelajaran pada saat yang sama dan membandingkan hasil dari berbagai eksperimen. Pantau terus laman ini untuk informasi lebih lanjut tentang eksperimen kami seperti pencarian gambar dan pencarian video.
Referensi:
- Dokumen Mishards:https://milvus.io/docs/v0.10.2/mishards.md
- Mishards: https://github.com/milvus-io/milvus/tree/master/shards
- Milvus-Helm: https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus
Artikel blog ini diposting ulang dari: https://medium.com/tokopedia-engineering/how-we-used-semantic-search-to-make-our-search-10x-smarter-bd9c7f601821
Baca cerita pengguna lain untuk mempelajari lebih lanjut tentang membuat sesuatu dengan Milvus.
- Representasi vektor
- Pilih mesin pencari kemiripan semantik
- Layanan cluster Milvus
- Bagaimana pengindeksan vektor mempercepat pencarian kemiripan?
- Apa selanjutnya, Anda bertanya?
- Referensi:
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word