Menyesuaikan peringkat hasil penelusuran

Karena kebutuhan penelusuran dapat berbeda untuk berbagai industri dan dapat bervariasi dari waktu ke waktu, perilaku peringkat default mungkin tidak optimal untuk setiap kebutuhan bisnis. Untuk mengatasi hal ini, Anda dapat mengubah perilaku pemberian peringkat menggunakan peringkat kustom.

Halaman ini menjelaskan cara menggunakan formula peringkat kustom dalam permintaan penelusuran Anda dan cara menyesuaikan formula tersebut. Fitur ini tersedia untuk data terstruktur, tidak terstruktur, dan data situs.

Ringkasan

Peringkatan kustom memungkinkan Anda memberikan ekspresi matematika yang mengandalkan serangkaian sinyal yang dihitung model, seperti skor relevansi semantik dan skor kemiripan kata kunci; serta sinyal berbasis dokumen, seperti kolom kustom seperti jarak atau usia dokumen.

Dengan peringkat kustom, Anda dapat mencapai hal berikut:

  • Mendapatkan visibilitas: Pahami sinyal mana yang berkontribusi pada peringkat akhir hasil penelusuran Anda.
  • Menyesuaikan sinyal yang ada: Sesuaikan bobot berbagai sinyal seperti kesamaan semantik, pencocokan kata kunci, atau keaktualan dokumen.
  • Menggabungkan logika bisnis: Tambahkan sinyal kustom Anda sendiri dari data dokumen langsung ke formula peringkat.
  • Mengoptimalkan secara sistematis: Gunakan library Python open source untuk menemukan formula peringkat optimal secara terprogram.

Kebutuhan akan peringkat kustom—contoh

Pertimbangkan skenario saat string berikut dikueri di situs pemesanan hotel:

luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.

Misalnya, entri berikut diambil:

  • Hotel A: "Hotel mewah terbaik di Vancouver yang menghadap ke bandara. Menampilkan kolam renang di atap yang menakjubkan. Hewan peliharaan tidak diizinkan."
  • Hotel B: "Hotel bergaya modern di pusat kota Vancouver. Ramah hewan peliharaan dengan kamar yang luas. Menampilkan kolam renang indoor besar dan pusat kebugaran."
  • Hotel C: "Hotel butik ramah hewan peliharaan yang menawan di dekat Aquarium (berjarak 10 menit berjalan kaki dari pusat kota). Menampilkan halaman taman yang indah. Tidak ada kolam renang."
  • Hotel D: "Resor pedesaan yang ikonis. Dikenal dengan restoran mewah dan layanan yang sempurna. Menampilkan kolam renang indoor dan spa. Opsi yang mengizinkan hewan peliharaan tersedia berdasarkan permintaan."

Semua hotel dalam katalog menyertakan kolom distance_from_airport dalam kilometer (km).

Peringkat berbasis penyematan

Sistem penelusuran mengonversi kueri menjadi satu embedding. Kemudian, model membandingkan embedding kueri ini dengan embedding semua hotel dalam katalognya. Hotel dengan embedding yang secara numerik paling dekat dengan embedding kueri akan diberi peringkat lebih tinggi.

Berikut adalah kemungkinan peringkat dari penelusuran relevansi berbasis penyematan murni:

Peringkat Hotel Kemungkinan alasan peringkat ini
1 Hotel A Kecocokan semantik yang sangat kuat untuk mewah, bandara, kolam renang di atap. "tidak ada hewan peliharaan" tidak diinginkan, tetapi kecocokan kuat lainnya lebih dominan.
2 Hotel B Kecocokan semantik yang baik untuk "ramah hewan peliharaan" dan "kolam renang". Namun, "dalam ruangan" alih-alih "atap", "modern" dan "bergaya" alih-alih "mewah" dan "pusat kota" alih-alih "bandara" membuatnya kurang relevan daripada A.
3 Hotel D Kecocokan semantik yang kuat untuk ramah hewan peliharaan, kolam besar, tetapi "dalam ruangan" bukan "di atas atap" dan "pedesaan" bukan "mewah" membuatnya sedikit kurang relevan secara semantik dibandingkan A dan D.
4 Hotel C Sangat ramah hewan peliharaan, tetapi "tidak ada kolam renang" dan "butik" secara signifikan mengurangi relevansinya dengan kueri spesifik ini.

Peringkat ini tidak memberikan hasil yang paling relevan. Hotel A berada di peringkat teratas, meskipun dengan "tidak boleh membawa hewan peliharaan", hotel tersebut mungkin tidak disukai oleh banyak pengguna. Hotel D, memenuhi banyak kriteria, diberi peringkat lebih rendah karena status "rustic"-nya tidak selalu sesuai dengan "mewah" dan kolam renang "indoor" diberi peringkat lebih rendah daripada kecocokan persis "besar" dan "outdoor".

Peringkat kustom

Misalnya, Anda telah mengonfigurasi ekspresi peringkat berikut untuk skenario contoh ini. Untuk mengetahui informasi tentang komponen ekspresi ini, lihat Tentang penerapan peringkat kustom.

rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8

Dengan distance_from_airport adalah kolom yang dapat diambil dalam katalog dan c.distance_from_airport bertindak sebagai sinyal.

Dalam peringkat kustom, Anda mempertimbangkan berbagai sinyal yang memengaruhi relevansi dokumen. Kemudian, Anda membuat ekspresi matematika yang berisi sinyal ini menggunakan sintaksis yang valid. Dalam ekspresi ini, Anda menormalisasi sinyal dan menambahkan bobot ke skor turunannya. Skor kustom akhir dihitung dan dokumen diberi peringkat.

Dalam contoh ini, proses ini dapat dijelaskan sebagai berikut:

  1. Setiap hotel diberi skor kemiripan semantik dan skor kemiripan kata kunci. Selain itu, jarak dari bandara adalah sinyal penting yang berasal dari dokumen.

  2. Fungsi transformasi peringkat kebalikan atau rr() digunakan untuk mengubah semua skor ke skala yang sama.

  3. Skor yang berasal dari setiap sinyal diberi bobot, lalu jumlah semua skor individual menjadi skor peringkat kustom untuk setiap hotel.

Berbagai sinyal untuk setiap hotel ditabulasi sebagai berikut:

Hotel semantic_similarity_score keyword_similarity_score c.distance_from_airport Skor peringkat kustom Peringkat kustom Peringkat berbasis penyematan
Hotel A 9.0 6.2 ("bandara", "mewah", "kolam renang di atap") 5,0 0.04879 2 1
Hotel B 7,5 5.6 ("ramah hewan peliharaan", "pusat kota", "kolam renang dalam ruangan", "bergaya") 12,5 0.04691 3 2
Hotel C 5,0 3.4 ("pet-friendly", "downtown") 18 0.04525 4 4
Hotel D 8,0 4,5 ("kolam renang indoor", "ramah hewan peliharaan", "rustic") 1 0.04890 1 3

Dengan membandingkan kedua metode peringkat, peringkat kustom memberikan peringkat yang lebih dipertimbangkan yang kemungkinan lebih sesuai dengan kebutuhan pengguna daripada peringkat berbasis penyematan murni.

Tentang penerapan peringkat kustom

Untuk mendapatkan peringkat kustom dalam hasil penelusuran, Anda harus memanggil metode search dengan memberikan kolom berikut:

  • Backend ekspresi peringkat (rankingExpressionBackend): Kolom ini menunjukkan mekanisme peringkat berikut yang akan digunakan.

    • RANK_BY_EMBEDDING: Ini adalah nilai default saat kolom ini tidak ditentukan. Memilih opsi ini akan memberi peringkat hasil menurut ekspresi peringkat yang telah ditentukan sebelumnya, baik yang berbasis penyematan maupun berbasis relevansi.
    • RANK_BY_FORMULA: Ini menggantikan peringkat default dan memungkinkan Anda memberikan formula kustom di kolom rankingExpression.
  • Ekspresi peringkat (rankingExpression): Kolom ini berisi formula matematika yang menentukan peringkat dokumen yang diambil.

    • Untuk RANK_BY_EMBEDDING, ini dapat berupa berbasis skor relevansi (double * relevanceScore) atau berbasis penyematan (double * dotProduct(embedding_field_path)).

    • Untuk RANK_BY_FORMULA, ini adalah ekspresi pilihan yang menggabungkan beberapa sinyal untuk menghitung skor baru untuk setiap hasil penelusuran.

Sinyal standar

Vertex AI Search menawarkan berbagai sinyal yang dapat Anda gunakan untuk merumuskan peringkat kustom. Berikut sinyal standar yang tersedia:

Nama sinyal Deskripsi
default_rank Peringkat default dokumen sebagaimana ditentukan oleh algoritma peringkat VAIS standar
semantic_similarity_score Skor yang dihitung berdasarkan sematan kueri dan konten untuk menentukan seberapa mirip kueri penelusuran dengan konten dokumen. Hal ini dihitung menggunakan algoritma Google eksklusif.
relevance_score Skor yang dihasilkan oleh model relevansi mendalam, yang menangani interaksi kueri-dokumen yang kompleks. Model menentukan makna dan maksud kueri dalam konteks konten. Hal ini dihitung menggunakan algoritma Google eksklusif.
keyword_similarity_score Skor dengan penekanan kuat pada pencocokan kata kunci. Sinyal ini menggunakan fungsi peringkat Best Match 25 (BM25).
document_age Usia dokumen dalam jam. Mendukung nilai floating point. Misalnya, nilai 0,5 berarti 30 menit, sedangkan 50 berarti 2 hari dan 2 jam.
pctr_rank Peringkat untuk menunjukkan rasio konversi yang diprediksi, yang dihitung berdasarkan data peristiwa pengguna. Sinyal ini menggunakan prediksi Rasio klik-tayang (pCTR) untuk mengukur relevansi hasil penelusuran dari perspektif pengguna.
topicality_rank Peringkat untuk menunjukkan penyesuaian kesamaan kata kunci yang dihitung menggunakan algoritma Google eksklusif.
boosting_factor Kombinasi semua peningkatan kustom yang telah Anda terapkan ke dokumen.

Selain kolom ini, Anda dapat menggunakan kolom kustom apa pun dalam dokumen yang ditandai sebagai dapat diambil. Untuk melakukannya, tambahkan awalan c. ke nama kolom mereka. Misalnya, jika Anda memiliki kolom kustom bernama date_approved, Anda dapat menggunakan c.date_approved sebagai sinyal kustom.

Nama sinyal adalah kombinasi karakter alfabet dan garis bawah (_). Berikut adalah daftar nama yang dicadangkan dan tidak dapat digunakan sebagai nama sinyal: log, exp, rr, is_nan, dan fill_nan.

Sintaksis formula peringkat

Formula peringkat kustom adalah ekspresi matematika dengan komponen berikut:

  • Angka (double): Nilai floating point positif atau negatif yang menambahkan bobot ke sinyal atau ekspresi.

  • Sinyal (signal): Nama sinyal yang tercantum di bagian Sinyal yang tersedia.

  • Operator aritmetika: + (penambahan) dan * (perkalian).

  • Fungsi matematika:

    • log(expression): Logaritma natural
    • exp(expression): Eksponen alami

    Setiap ekspresi ini menerima tepat satu argumen, yang merupakan ekspresi yang ditulis dalam bentuk sinyal.

    Contoh fungsi yang valid: exp(c.document_age) dan log(keywordSimilarityScore * 0.2 + 1.0).

  • Fungsi transformasi peringkat timbal balik (rr): Fungsi ini dinyatakan sebagai rr(expression, k). Pertama-tama, dokumen diurutkan berdasarkan nilai expression dalam urutan menurun dan dokumen diberi peringkat. Kemudian, nilai akhir dihitung menggunakan ekspresi 1 / (rank_i + k); dengan rank_i adalah posisi dokumen dalam daftar yang diurutkan mulai dari 0 dan k adalah bilangan floating point positif yang Anda berikan.

    Fungsi rr() mengubah semua skor ke skala yang sama dan menghilangkan kebutuhan akan normalisasi tambahan.

  • Fungsi penanganan bukan angka (NaN):

    • is_nan(expression): Jika ekspresi dievaluasi sebagai NaN, seperti jika sinyal tidak ada untuk dokumen, 1 akan ditampilkan. Jika tidak, 0 akan ditampilkan.
    • fill_nan(arg_expression, fill_with_expression): Jika arg_expression dievaluasi sebagai NaN, akan menampilkan fill_with_expression. Jika tidak, akan menampilkan arg_expression. Hal ini penting untuk menangani dokumen yang mungkin tidak memiliki sinyal tertentu.

Contoh formula peringkat

  1. Kombinasi linear elementer:

    semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
    
  2. Formula kompleks yang menggunakan peringkat kebalikan dan penanganan NaN:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  3. Formula kompleks yang menggunakan peringkat timbal balik, fungsi eksponensial, dan penanganan NaN:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
    

Untuk menyesuaikan peringkat dokumen Anda dalam hasil penelusuran, buat formula secara manual dan tambahkan ke panggilan API search Anda.

  1. Formulasikan ekspresi pemeringkatan.

  2. Mendapatkan hasil penelusuran.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "rankingExpression": "RANKING_EXPRESSION",
    "rankingExpressionBackend": "RANK_BY_FORMULA"
    }'
    

    Ganti kode berikut:

Menyesuaikan formula peringkat menggunakan library Python

Untuk kasus penggunaan yang lebih canggih, menemukan bobot optimal untuk formula Anda bisa jadi sulit. Untuk mengatasinya, Anda dapat menggunakan library Python penyesuaian peringkat Vertex AI Search, yang merupakan alat open source, dan mendapatkan formula yang sesuai untuk kasus penggunaan Anda.

Alur kerja umumnya adalah sebagai berikut:

  1. Siapkan set data kueri dengan label standar yang sesuai. Label emas ini dapat berupa kolom identifikasi unik, seperti ID dokumen, yang dapat membantu Anda mengaitkan objek SearchResult dalam respons penelusuran.
  2. Untuk sekumpulan kueri representatif, panggil API search untuk mendapatkan sinyal peringkat yang tersedia untuk semua dokumen yang ditampilkan. Anda dapat menemukannya di kolom SearchResult.rankSignals. Simpan data ini bersama dengan label emas Anda.
  3. Gunakan library Python untuk melatih model peringkat pada set data ini. Untuk mengetahui informasi selengkapnya, lihat Clearbox Python library.

  4. Konversi formula dari hasil pelatihan menjadi ekspresi peringkat, yang kemudian dapat Anda gunakan dalam panggilan API.