Memfilter rekomendasi

Jika memiliki aplikasi rekomendasi yang menggunakan data terstruktur, Anda dapat menggunakan kolom dokumen untuk memfilter hasil rekomendasi. Halaman ini menjelaskan cara menggunakan kolom dokumen untuk memfilter rekomendasi ke kumpulan dokumen tertentu. Meskipun contoh di halaman ini ditujukan untuk rekomendasi media, prinsip yang ditampilkan di sini sama dengan rekomendasi umum. Untuk mengetahui informasi selengkapnya tentang rekomendasi media, lihat Pengantar Vertex AI Search untuk media.

Memfilter rekomendasi dan update penyimpanan data

Setelah pembaruan penyimpanan data, Anda harus menunggu hingga 8 jam saat model dilatih ulang. Hal ini karena model perlu mengetahui nilai saat ini dalam metadata dokumen, serta kolom yang dikonfigurasi sebagai dapat difilter. Anda harus menunggu perubahan dokumen dan perubahan skema diterapkan. Untuk rekomendasi (tidak seperti penelusuran), pemfilteran tidak dilakukan secara real time.

Filter dan setelan diversifikasi (Khusus rekomendasi media)

Selain filter, setelan diversifikasi aplikasi juga memengaruhi hasil yang ditampilkan dalam respons rekomendasi media. Efek filter dan diversifikasi digabungkan. Diversifikasi dilakukan terlebih dahulu dan pemfilteran dilakukan kedua.

Menggabungkan keragaman tinggi berbasis aturan dan pemfilteran atribut berbasis kategori sering kali menghasilkan output kosong. Hal ini karena keragaman yang tinggi membatasi aplikasi untuk menampilkan satu hasil untuk setiap kategori.

Misalnya, Anda ingin merekomendasikan film berdasarkan Toy Story. Anda menetapkan tingkat keragaman berbasis aturan ke tinggi. Karena tingkat keragamannya tinggi, meskipun banyak film yang mungkin direkomendasikan, hanya satu film (misalnya, WALL·E) dalam kategori film anak-anak yang ditampilkan. Saat filter untuk film anak-anak diterapkan, hanya WALL·E yang ditampilkan sebagai rekomendasi.

Untuk informasi umum tentang keberagaman, lihat Mengembangkan rekomendasi media yang beragam.

Sebelum memulai

Pastikan Anda telah membuat aplikasi rekomendasi dan penyimpanan data. Untuk informasi selengkapnya, lihat Membuat aplikasi media atau Membuat penyimpanan data rekomendasi umum.

Contoh dokumen

Tinjau contoh dokumen media ini. Anda dapat merujuk kembali ke contoh dokumen ini saat membaca halaman ini.

{"id":"1","schemaId":"default_schema","structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"88125","schemaId":"default_schema","structData":{"title":"Harry Potter and the Deathly Hallows: Part 2 (2011)","categories":["Action","Adventure","Drama","Fantasy","Mystery","IMAX"],"uri":"http://mytestdomain.movie/content/88125","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"2857","schemaId":"default_schema","structData":{"title":"Yellow Submarine (1968)","categories":["Adventure","Animation","Comedy","Fantasy","Musical"],"uri":"http://mytestdomain.movie/content/2857","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"60069","schemaId":"default_schema","structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}

Ekspresi filter

Gunakan ekspresi filter untuk menentukan filter rekomendasi Anda.

Sintaksis ekspresi filter

Bentuk Backus–Naur yang Diperluas berikut merangkum sintaksis ekspresi filter yang dapat Anda gunakan untuk menentukan filter rekomendasi.

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # An expression can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthesized expression
    | "(", expression, ")"
    # A simple expression applying to a textual field.
    # Function "ANY" returns true if the field contains any of the literals.
    textual_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # OR filter by "available"
    available, ":", "true",
  # A literal is any double-quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double-quoted string;
  textual_field = see the tables below;

Batasan ekspresi filter

Batasan berikut berlaku untuk ekspresi filter untuk rekomendasi:

  • Kedalaman penyematan operator AND dan OR dalam tanda kurung terbatas. Ekspresi logika dalam filter harus dalam bentuk normal konjungtif (CNF). Ekspresi logika yang paling kompleks yang didukung dapat berupa daftar klausa yang terhubung AND yang hanya berisi operator OR, seperti: (... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • Ekspresi dapat dinegasikan dengan kata kunci NOT atau dengan -. Ini hanya berfungsi dengan ekspresi ANY() dengan satu argumen.
  • Pembatasan available harus berada di tingkat teratas. Klausa ini tidak dapat digunakan sebagai bagian dari klausa OR atau negasi (NOT). Anda hanya dapat menggunakan available: true.
  • Jumlah maksimum istilah dalam klausa AND tingkat atas adalah 20.
  • Klausul OR dapat memiliki hingga 100 argumen yang disertakan dalam ekspresi ANY(). Jika klausa OR memiliki beberapa ekspresi ANY(), semua argumennya akan diperhitungkan terhadap batas ini. Misalnya, categories: ANY("drama", "comedy") OR categories: ANY("adventure") memiliki tiga argumen.

Contoh ekspresi filter

Tabel berikut menunjukkan contoh ekspresi filter yang valid dan tidak valid. Laporan ini juga memberikan alasan mengapa contoh yang tidak valid tidak valid.

Ekspresi Berlaku Catatan
language_code: ANY("en", "fr") Ya
NOT language_code: ANY("en") Ya
NOT language_code: ANY("en", "fr") Tidak Membatalkan ANY() dengan lebih dari satu argumen.
language_code: ANY("en", "fr") OR categories: ANY("drama") Ya
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") Ya
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") Tidak Tidak dalam bentuk normal konjungtif.
(language_code: ANY("en")) AND (available: true) Ya
(language_code: ANY("en")) OR (available: true) Tidak Menggabungkan available dalam ekspresi OR dengan kondisi lain.

Ekspresi filter berikut memfilter dokumen yang berada dalam kategori drama atau aksi, yang bukan dalam bahasa Inggris, dan yang tersedia:

categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true

Batas pemfilteran

Setiap kolom dokumen yang dapat difilter menggunakan sejumlah memori di setiap model Anda. Batas berikut membantu mencegah efek buruk pada performa penayangan:

  • Maksimal 10 kolom kustom dapat ditetapkan sebagai dapat difilter di skema Anda.

    Jika lebih dari 10 kolom kustom ditemukan selama pelatihan aplikasi, hanya 10 kolom yang digunakan.

  • Maksimal 100.000.000 nilai kolom yang dapat difilter dapat ada dalam skema Anda.

    Anda dapat memperkirakan jumlah total nilai kolom yang dapat difilter dalam skema dengan mengalikan jumlah dokumen dalam skema dengan jumlah kolom yang dapat difilter. Jika Anda melebihi batas ini, hal berikut akan terjadi:

    • Anda tidak dapat menetapkan kolom tambahan sebagai dapat difilter.
    • Pelatihan aplikasi gagal.

Memfilter rekomendasi

Untuk memfilter rekomendasi media, ikuti langkah-langkah berikut:

  1. Temukan ID penyimpanan data Anda. Jika Anda sudah memiliki ID penyimpanan data, lanjutkan ke langkah berikutnya.

    1. Di konsol Google Cloud, buka halaman Agent Builder dan di menu navigasi, klik Data Stores.

      Buka halaman Data Store

    2. Klik nama penyimpanan data Anda.

    3. Di halaman Data untuk penyimpanan data Anda, dapatkan ID penyimpanan data.

  2. Tentukan kolom dokumen yang ingin Anda filter. Misalnya, untuk dokumen di Sebelum memulai, Anda dapat menggunakan kolom categories sebagai filter.

  3. Agar kolom categories dapat difilter, lakukan hal berikut:

    1. Di konsol Google Cloud, buka halaman Agent Builder.

      Agent Builder

    2. Klik aplikasi rekomendasi Anda.

    3. Klik tab Schema. Tab ini menampilkan setelan kolom saat ini.

    4. Klik Edit.

    5. Jika belum dipilih, centang kotak Filterable di baris categories, lalu klik Save.

    6. Tunggu enam jam agar pengeditan skema Anda diterapkan. Setelah enam jam, Anda dapat melanjutkan ke langkah berikut.

  4. Untuk mendapatkan rekomendasi dan memfilter kolom categories, jalankan kode berikut di command line:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
         "userEvent": {
           "eventType": "EVENT_TYPE",
           "userPseudoId": "USER_PSEUDO_ID",
           "documents": {
             "id": "DOCUMENT_ID"
           }
         },
         "params": {
           "returnDocument": true,
           "attributeFilteringSyntax": true,
           "strictFiltering": true
         },
         "filter": "FILTER"
       }' \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/SERVING_CONFIG_ID:recommend"
    
    • PROJECT_ID: ID project Anda.
    • DATA_STORE_ID: ID penyimpanan data Anda.
    • DOCUMENT_ID: ID dokumen yang rekomendasinya ingin Anda lihat pratinjaunya. Gunakan ID yang Anda gunakan untuk dokumen ini saat Anda menyerap data.
    • EVENT_TYPE: Jenis peristiwa pengguna. Untuk nilai eventType, lihat UserEvent.
    • USER_PSEUDO_ID: ID pseudonim pengguna. Anda dapat menggunakan cookie HTTP untuk kolom ini, yang mengidentifikasi pengunjung secara unik di satu perangkat. Jangan tetapkan kolom ini ke ID yang sama untuk beberapa pengguna. Hal ini akan menggabungkan histori peristiwanya dan menurunkan kualitas model. Jangan sertakan informasi identitas pribadi (PII) di kolom ini.
    • SERVING_CONFIG_ID: ID konfigurasi penayangan Anda. ID konfigurasi penayangan Anda sama dengan ID mesin, jadi gunakan ID mesin Anda di sini.
    • FILTER: Kolom teks yang memungkinkan Anda memfilter kumpulan kolom yang ditentukan, menggunakan sintaksis ekspresi filter. Nilai defaultnya adalah string kosong, yang berarti tidak ada filter yang diterapkan.

    Misalnya, Anda menginginkan rekomendasi untuk peristiwa pengguna pemutaran media tertentu, dan Anda ingin memfilter hasil rekomendasi agar hanya berisi dokumen yang: (1) Berada dalam kategori Anak-anak, dan (2) Saat ini tersedia. Anda dapat melakukannya dengan menyertakan pernyataan berikut dengan panggilan Anda:

    • "eventType": "media-play"
    • "filter": "categories: ANY(\"Children\") AND available: true"

    Untuk mengetahui informasi selengkapnya, lihat metode recommend.

    Klik untuk melihat contoh respons.

    Jika membuat permintaan rekomendasi seperti sebelumnya, Anda akan mendapatkan respons yang mirip dengan berikut ini. Perhatikan bahwa respons menyertakan dua dokumen yang memiliki nilai categories Children dan nilai availability_start_time yang lebih baru dari tanggal saat ini.

    {
    "results": [
      {
        "id":"1",
        "schemaId":"default_schema",
        "structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      },
      {
        "id":"60069",
        "schemaId":"default_schema",
        "structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      }
    ],
    "attributionToken": "ChMzMDk3NTQ4MzQxOTcxOTE0ODM1GglhZi10ZXN0LTEiDmFmLXRlc3QtMTE0NTE0KAAwBg"
    }