全部产品
Search
文档中心

Artificial Intelligence Recommendation:Algoritma Swing

更新时间:Sep 18, 2025

Topik ini menjelaskan algoritma Swing yang dikembangkan oleh Alibaba.

Pengenalan algoritma Swing

Swing adalah algoritma pencocokan baru yang dibuat oleh Alibaba. Tidak seperti algoritma tradisional yang menghitung kemiripan node berdasarkan kedekatan node, seperti tetangga umum, Adamic/Adar, kemiripan kosinus, kemiripan Jaccard, kosinus, dan Rooted PageRank, Swing mempertimbangkan struktur graf dan dapat diperluas ke node dua-hop dengan struktur graf dimensi tinggi. Swing anti-kebisingan dan secara signifikan meningkatkan akurasi dibandingkan dengan algoritma penyaringan kolaboratif tradisional.

Indeks item-to-item (I2I) yang dihasilkan melalui Swing, sebagai data dasar utama, banyak digunakan dalam berbagai skenario rekomendasi Taobao di perangkat seluler dan PC. Swing juga digunakan dalam layanan iklan TTPOD dan Alimama dari Alibaba Group, memberikan manfaat yang jelas.

Persiapan sampel

  1. Buat tabel input.

CREATE TABLE IF NOT EXISTS swing_test_input
(
  user_id   bigint,
  item_list string -- item_list adalah bidang wajib, dan terdiri dari setidaknya sub-bidang item_id, timestamp, dan norm. item_list berisi item secara berurutan yang diklik oleh pengguna.
)
lifecycle 7;

Item dalam item_list dipisahkan dengan titik koma (;). Informasi setiap item terdiri dari minimal tiga sub-bidang: item_id, norm, dan timestamp. item_id harus menjadi sub-bidang pertama. Nilai sub-bidang timestamp harus dalam format %Y%m%d%H%M%S. Jika Anda tidak perlu menggunakan sub-bidang timestamp, Anda dapat menentukan nilai yang sama untuk semua item. norm mewakili popularitas terkini (jumlah klik) suatu item. Jika Anda tidak perlu menggunakannya, Anda dapat menentukan 1 untuk semua item. Item dalam item_list harus didaftarkan berdasarkan urutan waktu dari yang paling awal hingga yang paling baru sesuai dengan waktu ketika item tersebut diklik.

Catatan

Nilai item_id harus bertipe numerik.

  1. Buat tabel output.

CREATE TABLE IF NOT EXISTS swing_test_result
(
    item_id   BIGINT COMMENT 'ID item jangkar',
    item_list STRING COMMENT 'Daftar item serupa'
)
LIFECYCLE 7;

Tabel output terdiri dari dua kolom: item_id dan item_list. Kolom item_list memiliki format berikut: item_id1,score1,coccur1,ori_score1;item_id2,score2,coccur2,ori_score2. ori_score1 adalah skor kesamaan asli. score1 adalah skor yang dihasilkan setelah nilai maksimum dinormalisasi. coccur1 adalah jumlah kemunculan bersama.

Perintah PAI

pai -name swing_rec_ext 
    -project algo_public 
    -DinputTable='swing_test_input/ds=20250809'
    -DoutputTable='swing_test_result/ds=20250809'
    -DmaxClickPerUser='500'
    -DmaxUserPerItem='600'
    -Dtopk='100'
    -Dalpha1='5'
    -Dalpha2='1'
    -Dbeta='0.3'

Parameter algoritma

Parameter

Deskripsi

Tipe Parameter

inputTable

Tabel input: Urutan klik pengguna; mendukung tabel partisi dan non-partisi.

Gunakan "/" untuk menggabungkan nama tabel dan nilai partisi.

outputTable

Tabel output: indeks i2i; mendukung tabel partisi dan non-partisi.

Gunakan "/" untuk menggabungkan nama tabel dan nilai partisi.

maxClickPerUser

Panjang maksimum daftar item setiap pengguna. Jika panjang daftar item melebihi batas, item terbaru akan dipotong dan disimpan.

Bilangan bulat. Nilai default: 600.

maxTimeSpan

Jumlah hari maksimum antara dua klik di mana dua item yang diklik dianggap memiliki hubungan tetangga.

Bilangan bulat. Nilai default: 1.

maxUserPerItem

Jumlah pengguna yang mengklik setiap item. Angka ini digunakan untuk menghitung k tetangga terdekat setiap item.

Bilangan bulat. Nilai default: 700.

topk

Jumlah k tetangga terdekat yang disimpan untuk setiap item pemicu.

Bilangan bulat. Nilai default: 200.

alpha1

Parameter algoritma Swing. Untuk informasi lebih lanjut, lihat Rumus [1].

Bilangan bulat. Nilai default: 5.

beta

Parameter algoritma Swing. Untuk informasi lebih lanjut, lihat Rumus [1].

Bilangan real. Nilai default: 0,3.

alpha2

Parameter algoritma Swing. Untuk informasi lebih lanjut, lihat Rumus [1].

Bilangan bulat. Nilai default: 1.

pos_time

Nomor seri bidang yang sesuai dengan timestamp. Dimulai dari 0. Dalam contoh sebelumnya, nomor seri bidang adalah 2.

Bilangan bulat. Nilai default: 2.

pos_norm

Nomor seri bidang yang sesuai dengan popularitas item. Dimulai dari 0. Dalam contoh sebelumnya, nilainya adalah 1.

Bilangan bulat. Nilai default: 1.

Rumus [1]: