All Products
Search
Document Center

Artificial Intelligence Recommendation:Konfigurasikan filter

Last Updated:Apr 01, 2026

PAI-Rec menyediakan filter bawaan untuk menghapus item yang tidak diinginkan dari hasil recall sebelum proses ranking. Konfigurasikan filter menggunakan parameter FilterConfs, lalu tetapkan ke skenario tertentu melalui FilterNames.

Jenis filter

Jenis filterFungsinya
User2ItemExposureFilterMemblokir item yang sudah ditampilkan kepada pengguna agar tidak muncul kembali
User2ItemCustomFilterMengecualikan item berdasarkan tabel kustom user-to-item (U2I)
AdjustCountFilterMengacak hasil recall dan menyimpan jumlah item tertentu
PriorityAdjustCountFilterMengontrol jumlah item yang diambil dari setiap tautan recall berdasarkan skor
ItemStateFilterMenghapus item yang status waktu nyatanya tidak memenuhi kondisi filter Anda
ItemCustomFilterMengecualikan item berdasarkan logika kustom tingkat item
CompletelyFairFilterMemilih item dari setiap tautan recall secara adil berdasarkan skor
GroupWeightCountFilterMengontrol pemilihan item berdasarkan bobot kelompok
DimensionFieldUniqueFilterMenghapus item yang memiliki nilai duplikat pada bidang tertentu
UniqueFilterMenghapus duplikat berdasarkan ID item di seluruh tautan recall. Tidak memerlukan entri terpisah di FilterConfs; cukup referensikan langsung berdasarkan nama di FilterNames.

Konfigurasi umum

Semua filter dikonfigurasi dalam array FilterConfs. Setiap entri mendefinisikan satu kebijakan filter.

"FilterConfs": [
  {
    "Name": "",
    "FilterType": "",
    "Dimension": "",
    "DaoConf": {},
    "AdjustCountConfs": [{}],
    "ItemStateDaoConf": {},
    "FilterParams": [{}],
    "DiversityDaoConf": {},
    "FilterVal": {}
  }
]
ParameterTipeWajibDeskripsi
NamestringYaNama kustom untuk filter tersebut. Referensikan nama ini di FilterNames.
FilterTypestringYaJenis filter bawaan. Lihat tabel jenis filter di atas.
DimensionstringTidakDimensi item.
DaoConfDaoConfigTidakKonfigurasi sumber data.
AdjustCountConfsarrayTidakSub-konfigurasi untuk PriorityAdjustCountFilter.
ItemStateDaoConfobjectTidakKonfigurasi sumber data untuk ItemStateFilter.
FilterParamsarrayTidakKondisi yang diterapkan untuk memfilter hasil kueri.

User2ItemExposureFilter

Gunakan filter ini untuk mencegah item yang telah ditampilkan kepada pengguna muncul kembali dalam rekomendasi berikutnya.

Cara Kerja Pelacakan Eksposur

Karena log waktu nyata memiliki latensi inheren, kumpulan item yang benar-benar telah dilihat pengguna tidak dapat ditentukan secara instan. PAI-Rec memperlakukan semua item yang dikembalikan oleh mesin rekomendasi sebagai pseudo-exposed—mesin itu sendiri yang menulis data ini. Data eksposur aktual (berdasarkan interaksi pengguna sungguhan) tiba melalui pipeline komputasi waktu nyata seperti Realtime Compute for Apache Flink dan ditulis ke database agar dapat dikonsumsi oleh PAI-Rec.

Parameter filter

ParameterTipeWajibDeskripsi
NamestringYaNama kustom untuk filter tersebut.
FilterTypestringYaDiatur ke User2ItemExposureFilter.
MaxItemsintYaJumlah maksimum batch terbaru yang diambil dari tabel eksposur. Setara dengan LIMIT ${MaxItems} dalam SQL. Satu batch merepresentasikan satu permintaan rekomendasi—parameter ini mengontrol jumlah batch, bukan jumlah total item.
TimeIntervalintYaJendela lookback untuk catatan eksposur, berdasarkan stempel waktu. Satuan: detik.
WriteLogboolYaApakah akan menulis log eksposur setelah setiap permintaan rekomendasi.
ClearLogIfNotEnoughScenestringTidakSkenario di mana data tabel eksposur dihapus.
GenerateItemDataFuncNamestringTidakFungsi kustom untuk menulis data item ke tabel eksposur. Jika dibiarkan kosong, fungsi bawaan digunakan dan hanya ID item yang ditulis.
WriteLogExcludeScenes[]stringTidakSkenario di mana log eksposur tidak ditulis.

Hologres

"FilterConfs": [
  {
    "Name": "holo_exposure_filter",
    "FilterType": "User2ItemExposureFilter",
    "MaxItems": 100,
    "TimeInterval": 172800,
    "WriteLog": true,
    "DaoConf": {
      "AdapterType": "hologres",
      "HologresName": "holo_info",
      "HologresTableName": "exposure_history"
    }
  }
]

Parameter DaoConf:

ParameterTipeWajibDeskripsi
AdapterTypestringYaDiatur ke hologres.
HologresNamestringYaNama sumber data Hologres yang didefinisikan di HologresConfs. Contoh: holo_info.
HologresTableNamestringYaNama tabel eksposur.

Buat tabel eksposur dengan skema berikut. Atur time_to_live_in_seconds sesuai dengan nilai TimeInterval Anda—172.800 detik (48 jam) dalam contoh ini.

BEGIN;
CREATE TABLE "exposure_history" (
  "uid" text NOT NULL,
  "item" text NOT NULL,
  "create_time" int4 NOT NULL,
  PRIMARY KEY ("uid", "create_time")
);
CALL SET_TABLE_PROPERTY('"exposure_history"', 'orientation', 'column');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'clustering_key', '"uid","create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'segment_key', '"create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'bitmap_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'dictionary_encoding_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'time_to_live_in_seconds', '172800');
COMMENT ON TABLE "exposure_history" IS 'the table that stores exposure records';
COMMIT;

ApsaraDB for Redis

"FilterConfs": [
  {
    "Name": "redis_exposure_filter",
    "FilterType": "User2ItemExposureFilter",
    "MaxItems": 100,
    "TimeInterval": 172800,
    "WriteLog": true,
    "DaoConf": {
      "AdapterType": "redis",
      "RedisName": "redis_info",
      "RedisPrefix": "exposure_"
    }
  }
]

Parameter DaoConf:

ParameterTipeWajibDeskripsi
AdapterTypestringYaDiatur ke redis.
RedisNamestringYaNama sumber data Redis yang didefinisikan di RedisConfs. Contoh: redis_info.
RedisPrefixstringTidakAwalan kunci untuk catatan eksposur. Setiap kunci dibentuk sebagai {RedisPrefix}{UID}.

Tablestore

"FilterConfs": [
  {
    "Name": "ots_exposure_filter",
    "FilterType": "User2ItemExposureFilter",
    "MaxItems": 100,
    "TimeInterval": 172800,
    "WriteLog": true,
    "DaoConf": {
      "AdapterType": "tablestore",
      "TableStoreName": "tablestore_info",
      "TableStoreTableName": "exposure_history"
    }
  }
]

Parameter DaoConf:

ParameterTipeWajibDeskripsi
AdapterTypestringYaJenis sumber data. Nilai yang valid: hologres, mysql, dan tablestore.
TableStoreNamestringYaNama sumber data Tablestore yang didefinisikan di TableStoreConfs. Contoh: tablestore_info.
TableStoreTableNamestringYaNama tabel eksposur.

Skema tabel eksposur:

KolomKategoriTipeDeskripsiContoh
user_idKunci primerstringUID pengguna.10944750
auto_idKunci primerintegerKolom auto-increment.
item_idsPropertistringID item, dipisahkan koma. Beberapa item yang diekspos dalam satu permintaan disimpan sebagai satu catatan.17019277,17019278

Atur time_to_live_in_seconds untuk mengontrol durasi penyimpanan catatan eksposur. Nilai ini harus dikonfigurasi secara eksplisit.

User2ItemCustomFilter

Gunakan filter ini jika Anda memiliki tabel user-to-item (U2I) sendiri yang menentukan item mana yang harus dikecualikan untuk setiap pengguna.

Tablestore

"FilterConfs": [
  {
    "Name": "u2i_custom_filter",
    "FilterType": "User2ItemCustomFilter",
    "DaoConf": {
      "AdapterType": "tablestore",
      "TableStoreName": "tablestore_info",
      "TableStoreTableName": "u2i_table"
    }
  }
]

Parameter DaoConf:

ParameterTipeWajibDeskripsi
AdapterTypestringYaJenis sumber data. Nilai yang valid: hologres, mysql, dan tablestore.
TableStoreNamestringYaNama sumber data Tablestore yang didefinisikan di TableStoreConfs. Contoh: tablestore_info.
TableStoreTableNamestringYaNama tabel U2I.

Skema tabel U2I:

KolomKategoriTipeDeskripsiContoh
user_idKunci primerstringUID pengguna.10944750
item_idsPropertistringID item yang akan dikecualikan, dipisahkan koma.17019277,17019278

AdjustCountFilter

Gunakan filter ini untuk mengacak hasil recall secara acak dan membatasi jumlah total item sebelum proses ranking. Filter ini berguna ketika tautan recall mengembalikan jauh lebih banyak item daripada yang dibutuhkan.

"FilterConfs": [
  {
    "Name": "adjust_count_filter",
    "FilterType": "AdjustCountFilter",
    "ShuffleItem": true,
    "RetainNum": 500
  }
]
ParameterTipeWajibDeskripsi
ShuffleItemboolYaApakah akan mengacak item dari tautan recall secara acak sebelum menyimpan.
RetainNumintYaJumlah item yang disimpan setelah pengacakan.

PriorityAdjustCountFilter

Gunakan filter ini jika Anda ingin mengontrol jumlah item dari setiap tautan recall, dengan item diurutkan berdasarkan skor dalam setiap tautan.

Parameter Type mengatur perilaku saat tautan recall mengembalikan lebih sedikit item daripada target Count-nya:

  • accumulator: Kekurangan tersebut dikompensasi dengan mengambil item tambahan dari tautan recall berikutnya hingga mencapai total kumulatif yang ditentukan.

  • fix: Jumlah item setiap tautan bersifat tetap. Kekurangan pada satu tautan tidak memengaruhi tautan lainnya.

"FilterConfs": [
  {
    "Name": "priority_adjust_count_filter",
    "FilterType": "PriorityAdjustCountFilter",
    "AdjustCountConfs": [
      {
        "RecallName": "recall_1",
        "Count": 125,
        "Type": "accumulator"
      },
      {
        "RecallName": "recall_2",
        "Count": 250,
        "Type": "accumulator"
      },
      {
        "RecallName": "recall_3",
        "Count": 400,
        "Type": "accumulator"
      }
    ]
  }
]

Dalam contoh ini, ketiga tautan menggunakan accumulator. Jika recall_1 mengembalikan kurang dari 125 item, PAI-Rec mengambil lebih banyak item dari recall_2 hingga total gabungan mencapai 250.

Parameter AdjustCountConfs:

ParameterTipeWajibDeskripsi
RecallNamestringYaNama tautan recall.
CountintYaJumlah maksimum item yang dipilih dari tautan recall ini.
TypestringTidakStrategi alokasi. Nilai yang valid: accumulator dan fix.

ItemStateFilter

Gunakan filter ini jika item memiliki bidang status waktu nyata (seperti ketersediaan atau status tinjauan) yang disimpan di tabel terpisah, dan Anda ingin mengecualikan item yang tidak memenuhi kondisi tertentu.

Alih-alih menghapus item dari katalog—yang akan menghilangkan riwayat interaksinya dan memengaruhi kualitas rekomendasi—atur statusnya untuk menunjukkan ketidaktersediaan, lalu keluarkan item tersebut menggunakan filter ini.

"FilterConfs": [
  {
    "Name": "ItemStateFilter",
    "FilterType": "ItemStateFilter",
    "ItemStateDaoConf": {
      "AdapterType": "hologres",
      "HologresName": "",
      "HologresTableName": "",
      "ItemFieldName": "",
      "WhereClause": "",
      "SelectFields": ""
    },
    "FilterParams": []
  }
]

Parameter ItemStateDaoConf:

ParameterTipeWajibDeskripsi
AdapterTypestringYaJenis sumber data. Nilai yang valid: hologres, mysql, dan tablestore.
HologresNamestringYaNama sumber data Hologres yang didefinisikan di HologresConfs. Contoh: holo_info.
HologresTableNamestringYaNama tabel yang menyimpan status item di Hologres.
ItemFieldNamestringYaKolom kunci primer dari tabel status item.
WhereClausestringTidakEkspresi kondisional SQL yang diterapkan pada permintaan kueri.
SelectFieldsstringYaKolom yang diambil dari tabel status item.

Parameter FilterParams:

ParameterTipeWajibDeskripsi
NamestringYaNama bidang yang akan dievaluasi.
DomainstringTidakEntitas tempat bidang tersebut berada. Nilai yang valid: user dan item.
OperatorstringYaOperator perbandingan. Nilai yang valid: equal, not_equal, in, greater, greaterThan, less, dan lessThan.
TypestringYaTipe data bidang tersebut.
ValueobjectYaNilai yang dibandingkan.

Contoh FilterParams berikut hanya melewatkan item yang terlihat publik (publicStatus = 0), aktif (state = 1), telah disetujui (checkStatus != 2), dan tidak dikecualikan dari rekomendasi (norec != 1):

"FilterParams": [
  { "Name": "publicStatus", "Type": "int", "Operator": "equal",     "Value": 0 },
  { "Name": "state",        "Type": "int", "Operator": "equal",     "Value": 1 },
  { "Name": "checkStatus",  "Type": "int", "Operator": "not_equal", "Value": 2 },
  { "Name": "norec",        "Type": "int", "Operator": "not_equal", "Value": 1 }
]
Penting

WhereClause dan FilterParams memiliki tujuan berbeda dan dapat digunakan bersamaan. WhereClause diterapkan sebagai kondisi SQL dalam kueri database—mengurangi jumlah baris yang diambil dari tabel status item. FilterParams diterapkan setelah kueri mengembalikan hasil—menyaring set hasil di memori. Gunakan WhereClause untuk kondisi kolom yang diindeks guna meningkatkan performa kueri, dan FilterParams untuk penyaringan tingkat bidang pasca-kueri.

Untuk contoh operator, lihat Lampiran.

CompletelyFairFilter

Gunakan filter ini untuk memilih item dari setiap tautan recall secara proporsional terhadap skornya, sehingga tidak ada satu tautan pun yang mendominasi set hasil akhir.

"FilterConfs": [
  {
    "Name": "CompletelyFairFilter",
    "FilterType": "CompletelyFairFilter",
    "RetainNum": 500
  }
]

DimensionFieldUniqueFilter

Gunakan filter ini untuk menghapus item yang memiliki nilai yang sama pada bidang tertentu. Berbeda dengan UniqueFilter yang menghapus duplikat berdasarkan ID item, DimensionFieldUniqueFilter menghapus duplikat berdasarkan nilai bidang—misalnya, untuk menghindari merekomendasikan beberapa item dari merek atau kategori yang sama.

"FilterConfs": [
  {
    "Name": "DimensionFieldUniqueFilter",
    "FilterType": "DimensionFieldUniqueFilter",
    "Dimension": ""
  }
]

UniqueFilter

UniqueFilter menghapus duplikat berdasarkan ID item di seluruh tautan recall. Jika ID item yang sama muncul di beberapa tautan recall, hanya kemunculan pertama yang dipertahankan.

UniqueFilter tidak memerlukan entri di FilterConfs. Referensikan langsung berdasarkan nama di FilterNames.

Terapkan filter ke skenario

Setelah mendefinisikan filter di FilterConfs, tetapkan ke skenario menggunakan FilterNames. FilterNames adalah peta di mana setiap kunci merupakan nama skenario dan setiap nilai adalah daftar nama filter yang akan diterapkan.

"FilterNames": {
  "default": [
    "UniqueFilter"
  ]
}
  • default: Skenario fallback yang digunakan ketika tidak ada skenario lain yang cocok dengan permintaan.

  • UniqueFilter: Nilai dari bidang Name pada entri FilterConfs, atau UniqueFilter secara langsung jika menggunakan filter deduplikasi bawaan.

Beberapa filter dapat dicantumkan untuk satu skenario dan diterapkan secara berurutan:

"FilterNames": {
  "default": [
    "UniqueFilter",
    "holo_exposure_filter",
    "adjust_count_filter"
  ]
}

Lampiran

Referensi operator

Semua operator berikut digunakan dalam FilterParams.

equal — mencocokkan nilai persis:

{ "Name": "publicStatus", "Type": "int", "Operator": "equal", "Value": 0 }

not_equal — mengecualikan nilai persis:

{ "Name": "checkStatus", "Type": "int", "Operator": "not_equal", "Value": 2 }

greater — lebih besar dari nilai yang ditentukan:

{ "Name": "checkStatus", "Type": "int", "Operator": "greater", "Value": 2 }

greaterThan — lebih besar dari atau sama dengan nilai yang ditentukan:

{ "Name": "checkStatus", "Type": "int", "Operator": "greaterThan", "Value": 2 }

less — kurang dari nilai yang ditentukan:

{ "Name": "checkStatus", "Type": "int", "Operator": "less", "Value": 2 }

lessThan — kurang dari atau sama dengan nilai yang ditentukan:

{ "Name": "checkStatus", "Type": "int", "Operator": "lessThan", "Value": 2 }

in — mencocokkan salah satu nilai dalam array (mendukung int dan string):

{ "Name": "state", "Type": "int", "Operator": "in", "Value": [2, 4, 6] }
{ "Name": "state", "Type": "string", "Operator": "in", "Value": ["success", "ok"] }