🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Bagaimana cara kerja sistem rekomendasi?

Bagaimana cara kerja sistem rekomendasi?

  • Scenarios
December 01, 2020
Shiyu Chen

Sistem rekomendasi didukung oleh algoritme yang pada awalnya membantu manusia untuk menyaring email yang tidak diinginkan. Pada tahun 1990, penemu Doug Terry menggunakan algoritme penyaringan kolaboratif untuk menyortir email yang diinginkan dari email sampah. Dengan hanya "menyukai" atau "membenci" sebuah email, berkolaborasi dengan orang lain yang melakukan hal yang sama pada konten email yang serupa, pengguna dapat dengan cepat melatih komputer untuk menentukan apa yang harus didorong ke kotak masuk pengguna-dan apa yang harus diasingkan ke folder email sampah.

Dalam pengertian umum, sistem rekomendasi adalah algoritme yang memberikan saran yang relevan kepada pengguna. Saran dapat berupa film untuk ditonton, buku untuk dibaca, produk untuk dibeli, atau apa pun tergantung pada skenario atau industrinya. Algoritme ini ada di sekitar kita, mempengaruhi konten yang kita konsumsi dan produk yang kita beli dari perusahaan teknologi besar seperti Youtube, Amazon, Netflix, dan masih banyak lagi.

Sistem rekomendasi yang dirancang dengan baik dapat menjadi penghasil pendapatan yang penting, pengurang biaya, dan pembeda yang kompetitif. Berkat teknologi open-source dan biaya komputasi yang menurun, sistem rekomendasi yang disesuaikan tidak pernah semudah ini untuk diakses. Artikel ini menjelaskan cara menggunakan Milvus, sebuah database vektor sumber terbuka; PinSage, sebuah graph convolutional neural network (GCN); deep graph library (DGL), sebuah paket python yang dapat diskalakan untuk deep learning pada grafik; dan dataset MovieLens untuk membangun sebuah sistem rekomendasi berbasis grafik.

Langsung ke:

Bagaimana cara kerja sistem rekomendasi?

Ada dua pendekatan umum untuk membangun sistem rekomendasi: pemfilteran kolaboratif dan pemfilteran berbasis konten. Sebagian besar pengembang menggunakan salah satu atau kedua metode tersebut dan, meskipun sistem rekomendasi dapat bervariasi dalam hal kompleksitas dan konstruksi, sistem ini biasanya mencakup tiga elemen inti:

  1. Model pengguna: Sistem rekomendasi membutuhkan pemodelan karakteristik, preferensi, dan kebutuhan pengguna. Banyak sistem rekomendasi yang mendasarkan saran mereka pada masukan tingkat item implisit atau eksplisit dari pengguna.
  2. Model objek: Sistem rekomendasi juga memodelkan objek untuk membuat rekomendasi objek berdasarkan potret pengguna.
  3. Algoritma rekomendasi: Komponen inti dari setiap sistem rekomendasi adalah algoritme yang menggerakkan rekomendasinya. Algoritme yang umum digunakan termasuk penyaringan kolaboratif, pemodelan semantik implisit, pemodelan berbasis grafik, rekomendasi gabungan, dan banyak lagi.

Pada tingkat tinggi, sistem rekomendasi yang mengandalkan penyaringan kolaboratif membangun model dari perilaku pengguna di masa lalu (termasuk input perilaku dari pengguna yang serupa) untuk memprediksi apa yang mungkin diminati pengguna. Sistem yang mengandalkan pemfilteran berbasis konten menggunakan tag terpisah yang sudah ditentukan sebelumnya berdasarkan karakteristik item untuk merekomendasikan item yang serupa.

Contoh pemfilteran kolaboratif adalah stasiun radio yang dipersonalisasi di Spotify yang didasarkan pada riwayat mendengarkan, minat, perpustakaan musik, dan banyak lagi. Stasiun radio ini memutar musik yang tidak disimpan atau diminati oleh pengguna, tetapi sering kali disukai oleh pengguna lain yang memiliki selera yang sama. Contoh pemfilteran berbasis konten adalah stasiun radio berdasarkan lagu atau artis tertentu yang menggunakan atribut input untuk merekomendasikan musik yang serupa.

Alat untuk membangun sistem pemberi rekomendasi

Dalam contoh ini, membangun sistem rekomendasi berbasis grafik dari awal bergantung pada alat-alat berikut:

Pinsage: Sebuah jaringan konvolusi graf

PinSage adalah jaringan konvolusi graf berjalan acak yang mampu mempelajari penyematan untuk simpul-simpul dalam graf berskala web yang berisi miliaran objek. Jaringan ini dikembangkan oleh Pinterest, sebuah perusahaan pinboard online, untuk menawarkan rekomendasi visual tematik kepada para penggunanya.

Pengguna Pinterest dapat "menyematkan" konten yang menarik minat mereka ke "papan", yang merupakan kumpulan konten yang disematkan. Dengan lebih dari 478 juta pengguna aktif bulanan (MAU) dan lebih dari 240 miliar objek yang disimpan, perusahaan ini memiliki jumlah data pengguna yang sangat besar sehingga mereka harus membangun teknologi baru untuk mengikutinya.

1.png 1.png

PinSage menggunakan grafik bipartit pin-board untuk menghasilkan embedding berkualitas tinggi dari pin yang digunakan untuk merekomendasikan konten yang mirip secara visual kepada pengguna. Tidak seperti algoritma GCN tradisional, yang melakukan konvolusi pada matriks fitur dan grafik penuh, PinSage mengambil sampel dari node/Pin terdekat dan melakukan konvolusi lokal yang lebih efisien melalui konstruksi dinamis grafik komputasi.

Melakukan konvolusi pada seluruh lingkungan node akan menghasilkan grafik komputasi yang sangat besar. Untuk mengurangi kebutuhan sumber daya, algoritma GCN tradisional memperbarui representasi node dengan menggabungkan informasi dari lingkungan k-hop-nya. PinSage mensimulasikan random-walk untuk menetapkan konten yang sering dikunjungi sebagai lingkungan utama dan kemudian membangun konvolusi berdasarkan hal tersebut.

Karena sering terjadi tumpang tindih dalam lingkungan k-hop, konvolusi lokal pada node menghasilkan komputasi yang berulang. Untuk menghindari hal ini, pada setiap langkah agregat, PinSage memetakan semua node tanpa perhitungan berulang, kemudian menghubungkannya ke node tingkat atas yang sesuai, dan akhirnya mengambil embedding dari node tingkat atas.

Perpustakaan Graf Dalam: Paket python yang dapat diskalakan untuk pembelajaran mendalam pada graf

dgl-framework-building-graph-based-recommender-milvus.png dgl-kerangka-pembangunan-kerangka-pembelajaran-berbasis-grafik-milvus.png

Deep Graph Library (DGL) adalah paket Python yang dirancang untuk membangun model jaringan syaraf berbasis graf di atas kerangka kerja deep learning yang sudah ada (misalnya, PyTorch, MXNet, Gluon, dan banyak lagi). DGL mencakup antarmuka backend yang ramah pengguna, sehingga mudah untuk ditanamkan dalam kerangka kerja berdasarkan tensor dan yang mendukung pembuatan otomatis. Algoritma PinSage yang disebutkan di atas dioptimalkan untuk digunakan dengan DGL dan PyTorch.

how-does-milvus-work.png bagaimana-cara-kerja-milvus.png

Milvus adalah basis data vektor sumber terbuka yang dibuat untuk mendukung pencarian kemiripan vektor dan aplikasi kecerdasan buatan (AI). Pada tingkat tinggi, cara kerja Milvus untuk pencarian kemiripan adalah sebagai berikut:

  1. Model pembelajaran mendalam digunakan untuk mengubah data yang tidak terstruktur menjadi vektor fitur, yang diimpor ke Milvus.
  2. Milvus menyimpan dan mengindeks vektor fitur.
  3. Berdasarkan permintaan, Milvus mencari dan mengembalikan vektor yang paling mirip dengan vektor input.

Membangun sistem rekomendasi berbasis grafik dengan Milvus

beike-intelligent-house-platform-diagram.jpg beike-intelligent-house-platform-diagram.jpg

3-building-graph-based-recommender-system.png 3-membangun-sistem-rekomendasi-berbasis-grafik.png

Membangun sistem rekomendasi berbasis grafik dengan Milvus melibatkan langkah-langkah berikut:

Langkah 1: Mempersiapkan data

Prapemrosesan data melibatkan pengubahan data mentah menjadi format yang lebih mudah dimengerti. Contoh ini menggunakan kumpulan data terbuka MovieLens[5] (m1-1m), yang berisi 1.000.000 peringkat dari 4.000 film yang dikontribusikan oleh 6.000 pengguna. Data ini dikumpulkan oleh GroupLens dan mencakup deskripsi film, peringkat film, dan karakteristik pengguna.

Perhatikan bahwa set data MovieLens yang digunakan dalam contoh ini memerlukan pembersihan atau pengaturan data minimal. Namun, jika Anda menggunakan set data yang berbeda, jarak tempuh Anda mungkin berbeda.

Untuk mulai membangun sistem rekomendasi, buatlah grafik bipartit pengguna-film untuk tujuan klasifikasi dengan menggunakan data historis pengguna-film dari set data MovieLens.

graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()

Langkah 2: Latih model dengan PinSage

Vektor penyisipan pin yang dihasilkan menggunakan model PinSage adalah vektor fitur dari informasi film yang diperoleh. Buat model PinSage berdasarkan graf bipartit g dan dimensi vektor fitur film yang disesuaikan (256-d secara default). Kemudian, latih model tersebut dengan PyTorch untuk mendapatkan h_item embeddings dari 4.000 film.

# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
   for i in range(len(blocks)):
   blocks[i] = blocks[i].to(device)
   h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)

Langkah 3: Memuat data

Muatkan h_item embeddings film yang dihasilkan oleh model PinSage ke dalam Milvus, yang akan mengembalikan ID yang sesuai. Impor ID dan informasi film yang sesuai ke dalam MySQL.

# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)

Dapatkan embedding yang sesuai di Milvus berdasarkan ID film, lalu gunakan Milvus untuk menjalankan pencarian kemiripan dengan embedding ini. Selanjutnya, identifikasi informasi film yang sesuai dalam database MySQL.

# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()

Langkah 5: Dapatkan rekomendasi

Sistem sekarang akan merekomendasikan film yang paling mirip dengan kueri penelusuran pengguna. Ini adalah alur kerja umum untuk membangun sistem rekomendasi. Untuk menguji dan menggunakan sistem rekomendasi dan aplikasi AI lainnya dengan cepat, cobalah bootcamp Milvus.

Milvus dapat memberi daya lebih dari sekadar sistem rekomendasi

Milvus adalah alat canggih yang mampu mendukung beragam kecerdasan buatan dan aplikasi pencarian kemiripan vektor. Untuk mempelajari lebih lanjut tentang proyek ini, lihat sumber-sumber berikut:

  • Baca blog kami.
  • Berinteraksi dengan komunitas sumber terbuka kami di Slack.
  • Gunakan atau kontribusikan ke basis data vektor paling populer di dunia di GitHub.

Like the article? Spread the word

Terus Baca