Langkah 1 dari 6: Kenapa Tidak Menilai Semua Item?
Anggaran latency memaksa retrieval sebelum ranking
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
Item di katalog (M)1M
Biaya ranker per item0.10 ms
Anggaran latency per request100 ms
Requestfeed per detik saat puncak1,000
Pengguna terdaftar10M
Nilai semua item
100 s
Funnel
31 ms
Coreranker, semua item
100k
Coreranker, funnel
20
Menilai semua 1M item dengan ranker butuh 100 s per request, 1.000 kali anggaran, dan 1.000 request per detik akan membuat 100k core terus sibuk. Retrieval lebih dulu memangkas katalog menjadi 200 kandidat, yaitu item yang layak dinilai dengan teliti, sehingga seluruh request hanya butuh 31 ms.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Seret Item di katalog ke 100 juta dan Biaya ranker per item ke maksimum. Batang penilaian penuh tumbuh sampai berjam-jam, sementara funnel tetap dekat anggaran, karena biaya funnel bergantung pada jumlah kandidat N, bukan ukuran katalog. Angka core adalah request per detik × item yang dinilai × biaya per item, yaitu komputasi yang akan terus sibuk saat puncak. Katalog sepuluh kali lebih besar melipatkan angka ini sepuluh kali untuk penilaian penuh dan tidak mengubah funnel.
Langkah 2 dari 6: Candidate Generation
Dua tower dan dot product menemukan N teratas
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
diambil (top 200)relevan, ditemukanrelevan, terlewatpanah putih: vector pengguna
Kandidat yang diambil (N)200
Pengguna contoh#1 dari 300
Recall, semua pengguna
0.87
Pengguna #1 ditemukan
20 dari 20
Porsi katalog contoh
20%
Waktu ranking
20 ms
Model two-tower mempelajari satu vector per pengguna dan satu per item, sehingga dot product keduanya memprediksi afinitas. Retrieval mengambil semua item di seberang garis putus-putus, yaitu 200 teratas menurut dot product. Di sini ia menemukan 87% dari 20 item relevan tiap pengguna (diukur pada data contoh), karena 2 dimensi tidak bisa memuat 8 selera tersembunyi.
Vector ini adalah SVDrank-2 dari afinitas sebenarnya, hasil terbaik yang bisa dicapai model two-tower 2-D. Pada katalog 1 juta item, N yang sama adalah porsi yang jauh lebih kecil, jadi recall-nya akan lebih rendah.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Geser Pengguna contoh dan lihat batas putus-putus berputar bersama panah putih. Setiap item di seberang garis punya dot product yang lebih tinggi dengan vector pengguna itu daripada item mana pun sebelum garis, itu sebabnya retrieval bisa memakai indexapproximate nearest neighbor, bukan menilai item satu per satu. Cincin merah menandai item relevan yang ditempatkan vector 2-D di belakang garis. Menambah dimensi akan menangkap lebih banyak; menambah kandidat juga menangkapnya, dengan bayaran biaya ranking.
Langkah 3 dari 6: Ranking
Skor lebih kaya per item, dibayar per kandidat
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
Biaya ranker per item (murah ke kaya feature)0.10 ms
Pengguna contoh#1 dari 300
Noiseranker σ (simulasi)
0.160
Precision@10, semua pengguna
0.80
Waktu ranking
20 ms
Total request
31 ms
Ranker menilai tiap kandidat dengan feature yang lebih kaya daripada yang sanggup dibayar retrieval. Dalam simulasi ini, skornya adalah afinitas sebenarnya ditambah noise yang mengecil seiring naiknya biaya. Dengan 0,10 ms per item, precision@10, yaitu porsi top 10 yang relevan, bernilai 0,80 pada data contoh. Recall membatasinya: item yang terlewat retrieval tidak bisa di-rank.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Seret Biaya ranker per item dari 0,01 ke 0,5 ms dan lihat awan titik merapat ke diagonal. Tiap titik adalah satu kandidat: probabilitas klik sebenarnya di sumbu mendatar, skor ranker di sumbu tegak. Titik di diagonal dinilai sempurna. Cincin teal menandai 20 item relevan pengguna; yang jatuh di bawah garis putus-putus tidak masuk feed. Precision naik cepat di awal lalu mendatar, sementara waktu ranking tumbuh lurus seiring biaya.
Langkah 4 dari 6: Re-ranking untuk Feed
Menukar sedikit relevansi dengan keragaman lewat MMR
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
Maximal marginal relevance (MMR) menyusun feed satu slot demi satu slot. Tiap pilihan memaksimalkan λ × relevansi − (1 − λ) × kemiripan tertingginya dengan item yang sudah dipilih. Di sini kategori naik dari 3,6 ke 4,5 dengan 2,5% relevansi hilang. Porsi long-tail, yaitu item di luar 20% teratas menurut popularitas, hanya bergeser dari 8,5% ke 7,6%: keragaman kategori tidak sama dengan menjangkau item yang kurang populer.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Atur λ ke 0, lalu kembali ke 1. Pada 0, feed mengambil item paling berbeda yang bisa ditemukan, jadi kategori naik mendekati 8 dan relevansi anjlok. Kurva menunjukkan rentang yang berguna: antara sekitar 0,6 dan 0,8, kategori naik lebih cepat daripada relevansi turun. Kemiripan di sini adalah cosine antar-vector item tersembunyi. Di produksi, kemiripan sering berasal dari item embedding atau aturan sederhana, misalnya paling banyak dua item dari satu kreator.
Langkah 5 dari 6: Feedback Loop
Klik hanya datang dari yang ditampilkan feed
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
Ronde40
Laju eksplorasi ε (porsi slot untuk item acak)10%
CTR, ronde 40
42.1%
Gini impression
0.89
Katalog yang pernah tampil
100%
CTR dengan ε = 0
46.2%
Memberikan 10% slot ke item acak mengorbankan 4,2% CTR pada ronde 40 dan menampilkan 100% katalog, bukan 8% (simulasi). Koefisien Giniimpression, yang bernilai 0 saat semua item tampil merata dan 1 saat satu item mengambil semuanya, turun dari 0,97 ke 0,89. Model berikutnya dilatih dari log yang lebih luas ini.
Simulasi. Tiap estimasi dimulai dari prediksi two-tower dan diperbarui dari klik pengguna itu: (klik + 10 × prior) ÷ (impression + 10). P(klik) adalah afinitas sebenarnya.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Tekan Putar pada ε = 0, lalu ulangi pada 10%. Tanpa eksplorasi, cakupan berhenti di bawah 10% katalog dalam simulasi ini, karena item yang tidak pernah ditampilkan model tidak pernah bisa diklik, dan estimasinya tidak pernah berubah. Eksplorasi adalah perbaikan termurah: sebagian kecil slot menampilkan item yang belum pasti bagi model. Metode bandit memilih slot itu lebih cermat daripada pilihan acak, dan koreksi off-policy memberi bobot ulang pada klik di log saat model berikutnya dilatih.
Langkah 6 dari 6: Offline dan Online, lalu Tinjauan
Durasi A/B test dan desain dibandingkan dengan kebutuhan
Latency
31 ms
Recall
0.87
Feed P@10
0.72
Kategori
4.5
Hari uji
6
Desain untuk 10M pengguna · 1M item · 1.000 req/s · anggaran 100 ms Recall, precision, dan kategori diukur pada data contoh
✓Latencyretrieval + rank + re-rank ≤ 100 ms31 ms
✓Recall≥ 0.8, data contoh0.87
✓Precision@10 feed≥ 0.6, data contoh0.72
✓Keragaman ≥ 4 kategori, data contoh4.5
✓Durasi uji ≤ 14 hari6 hari
Laju dasar p₁ (porsi pengguna yang mengklik)5.0%
Minimum detectable effect (lift relatif)2.0%
Tingkat signifikansi α (dua sisi)0.05
Power (1 − β)80%
Pengguna harian (porsi pengguna terdaftar)3M (30%)
Porsi traffic dalam uji (kedua arm)10%
n = (1.96 + 0.84)² × [p₁(1−p₁) + p₂(1−p₂)] ÷ (p₂ − p₁)², p₂ = 5.10% hari = 2 × 752,700 ÷ 300,000 per hari = 5.0
Pengguna per arm
753k
Pengguna uji per hari
300k
Hari uji
6
Semua target terpenuhi: 31 ms per request, recall 0,87 dan precisionfeed 0,72 pada data contoh, 4,5 kategori per feed, dan uji 6 hari. Metrik offline seperti recall dan precision dihitung dari data log, yang hanya berisi apa yang ditampilkan model lama. A/B testonline membagi pengguna aktif antara desain lama dan baru, dan menjadi pemeriksaan terakhir.
Asumsi
Waktu retrieval (pencarian ANN + user tower)10 ms
Satu kemiripan item-item di re-ranker1.0 µs
Biaya ranker
0.10 ms per item
Waktu pada satu core. Core sibuk = request/s × item yang dinilai × biaya
Dunia contoh
300 pengguna · 1,000 item
Selera tersembunyi 8 dimensi ditambah noise, 8 kategori, seed 7. Recall, precision, dan keragaman diukur di sini, bukan pada 1 juta item
Item relevan
top 20 sebenarnya
20 afinitas sebenarnya tertinggi tiap pengguna, kunci jawaban untuk recall dan precision
Model two-tower
rank-2 SVD
Pendekatan dot product 2-D terbaik untuk afinitas sebenarnya. Model yang dilatih dari klik akan lebih buruk
Noiseranker
σ = 0.16 × √(0.1 ms ÷ cost)
Disimulasikan: ranker yang lebih mahal melihat lebih banyak feature, jadi skornya lebih dekat ke afinitas sebenarnya
Kumpulan re-rank
top 100
MMR hanya mengurutkan ulang bagian atas daftar hasil ranking
Feedback loop
K = 10 · 40 ronde
Disimulasikan, seed 11. Prior dihitung sebagai K impression
Ditetapkan untuk kebutuhan ini, bukan standar industri
Tidak dimodelkan
feature fetch, caching, position bias
Waktu retrieval mewakili jaringan dan pencarian feature
Semua konstanta adalah asumsi untuk kebutuhan ini, ditetapkan 25 Oktober 2026.
Turunkan Minimum detectable effect dari 2% ke 1%, dan durasi uji kira-kira menjadi empat kali lipat, karena ukuran sampel tumbuh sebesar satu per kuadrat selisihnya. Menaikkan porsi traffic memperpendek uji, tetapi menempatkan lebih banyak pengguna pada desain yang belum terbukti. Tiap pengguna dihitung sekali, di satu arm, jadi uji yang berjalan berhari-hari juga harus mencakup pola mingguan. Recall dan precisionoffline murah dihitung dan berguna memilih kandidat; A/B test menentukan mana yang dirilis.
Bagaimana feed rekomendasi dirancang?
Feed rekomendasi memilih segelintir item untuk tiap pengguna dari katalog yang terlalu besar untuk dinilai seluruhnya. Sistem produksi membagi kerja ini menjadi beberapa tahap: retrieval menyaring jutaan item menjadi beberapa ratus kandidat, ranker menilai kandidat itu dengan teliti, dan re-ranker mengurutkan ulang bagian atas daftar demi keragaman dan aturan bisnis. Tiap tahap memakai bagiannya dari anggaran latency, biasanya sekitar 100 ms per request.
Studi kasus ini merancang feed untuk 10 juta pengguna dan 1 juta item pada 1.000 request per detik. Latency, komputasi, dan durasi A/B test adalah aritmetika pasti. Recall, precision, dan keragaman diukur pada contoh sederhana ber-seed berisi 300 pengguna dan 1.000 item yang selera aslinya diketahui, jadi setiap pengukuran bisa dicek dengan kunci jawabannya. Akurasi ranker dan feedback loop adalah simulasi, dan diberi label begitu di halaman.
Ide utama
Ranker yang terjangkau untuk beberapa ratus item jauh terlalu lambat untuk sejuta item, jadi feed mengambil kandidat dulu dan hanya melakukan ranking pada kandidat itu.
Model two-tower memberi pengguna dan item vector yang dot product-nya memprediksi afinitas, sehingga retrieval menjadi nearest-neighbor search.
Recall saat retrieval membatasi semua tahap sesudahnya: item yang tidak terambil tidak bisa di-rank atau ditampilkan.
Biaya ranker per item berlipat sesuai jumlah kandidat, jadi ranker yang lebih kaya dan kandidat yang lebih banyak berebut anggaran latency yang sama.
Maximal marginal relevance menukar sedikit relevansi dengan keragaman; keragaman kategori saja tidak otomatis menjangkau item yang kurang populer.
Feed hanya mengumpulkan klik dari yang ditampilkannya, jadi tanpa eksplorasi, log dan model berikutnya menyempit ke sebagian kecil katalog.
Metrik offline memilih desain yang akan diuji; A/B test yang ukurannya disesuaikan dengan efek terkecil yang layak dideteksi menentukan desain yang dirilis.
Pertanyaan umum
Kenapa sistem rekomendasi memakai dua tahap, retrieval dan ranking?
Menilai semua item dengan model kaya berbiaya ukuran katalog × biaya per item: 1 juta item dengan 0,1 ms per item berarti 100 detik per request. Retrieval memakai model murah yang skornya bisa dicari lewat index, jadi ia mengembalikan beberapa ratus kandidat dalam hitungan milidetik. Ranker kaya lalu hanya memakai anggarannya untuk kandidat itu. Sistem YouTube tahun 2016 menjelaskan pembagian ini, dengan candidate generation yang mengisi ranking network terpisah.
Apa itu model two-tower?
Dua neural network, satu untuk pengguna dan satu untuk item, masing-masing memetakan input-nya ke vector berukuran sama. Prediksi afinitas adalah dot product kedua vector. Vector item bisa dihitung lebih dulu dan disimpan di vector index, jadi saat request datang, hanya vector pengguna yang dihitung, dan index mengembalikan item dengan dot product terbesar.
Berapa lama A/B test rekomendasi sebaiknya berjalan?
Cukup lama untuk mencapai ukuran sampel bagi efek terkecil yang layak dideteksi. Dengan laju klik dasar 5%, lift relatif 2%, α = 0.05, dan power 80%, tiap arm butuh sekitar 753.000 pengguna. Dengan 300.000 pengguna uji per hari, itu berarti 6 hari. Dalam praktiknya, uji umum dijalankan dalam hitungan minggu penuh, supaya perilaku hari kerja dan akhir pekan sama-sama tercakup.
Kenapa feed rekomendasi terus menampilkan item populer?
Klik hanya datang dari item yang ditampilkan feed, dan model hanya belajar dari klik itu. Item yang tampil lebih awal mengumpulkan bukti dan mempertahankan tempatnya, sedangkan item yang tidak pernah tampil tetap dengan estimasi awalnya. Dalam simulasi studi kasus ini, feed tanpa eksplorasi hanya pernah menampilkan kurang dari 10% katalog. Memberikan sebagian kecil slot untuk eksplorasi mengorbankan sebagian click-through rate dan memperluas hal yang bisa dipelajari model berikutnya.
Penjelasan terkait
Embedding· Mengubah kata dan kategori menjadi vector