Membina sistem pengesyoran menggunakan Redis dan Python: Cara memberikan pengesyoran yang diperibadikan
Dalam era Internet, sistem pengesyoran telah menjadi salah satu fungsi teras platform utama. Dengan menganalisis gelagat pengguna dan pilihan peribadi, sistem pengesyoran boleh menyediakan pengguna dengan pengesyoran kandungan yang diperibadikan. Artikel ini akan memperkenalkan cara menggunakan Redis dan Python untuk membina sistem pengesyoran mudah, dan memberikan contoh kod yang berkaitan.
Redis ialah sistem storan nilai kunci berprestasi tinggi sumber terbuka. Ia menyokong pelbagai struktur data, seperti rentetan, senarai, set, set tertib, dsb., dan menyediakan pelbagai perintah dan fungsi yang sesuai untuk pelbagai senario. Dalam sistem pengesyoran, Redis boleh digunakan untuk menyimpan data tingkah laku pengguna dan hasil pengesyoran, serta melaksanakan pertanyaan dan pengiraan data dengan pantas.
Langkah pertama dalam sistem pengesyoran ialah mengumpul dan merekod data gelagat pengguna. Kita boleh menggunakan struktur data set yang dipesan Redis untuk melaksanakan modul rakaman tingkah laku pengguna. Berikut ialah contoh mudah:
import redis # 连接Redis r = redis.Redis(host='localhost', port=6379, db=0) # 记录用户行为 def record_user_behavior(user_id, item_id): r.zincrby('user_behavior', 1, f'{user_id}:{item_id}') # 获取用户行为排行榜 def get_user_behavior_ranking(): return r.zrevrange('user_behavior', 0, -1, withscores=True)
Dalam contoh di atas, kami merekodkan tingkah laku pengguna dalam koleksi pesanan user_behavior
melalui perintah zincrby
dan menggunakan ID pengguna dan ID item dikenal pasti sebagai ahli set yang dipesan. Perintah zincrby
boleh melakukan operasi kenaikan automatik pada ahli tertentu bagi set yang dipesan, menjadikannya lebih mudah untuk kami mengira bilangan tindakan pengguna pada item yang berbeza. zincrby
命令将用户的行为记录在user_behavior
有序集合中,并使用用户ID和物品ID作为有序集合的成员进行标识。zincrby
命令可以对有序集合的指定成员进行自增操作,方便我们统计用户在不同物品上的行为次数。
推荐系统的核心是推荐模型和推荐算法。在本文中,我们将使用协同过滤算法来实现一个基于用户的推荐系统。以下是一个简单示例:
# 构建协同过滤推荐模型 def build_collaborative_filtering_model(): # 获取用户行为数据 behavior_data = get_user_behavior_ranking() # 构建用户相似度矩阵 similarity_matrix = {} for i in range(len(behavior_data)): user1, behavior1 = behavior_data[i] user1 = user1.split(':')[0] for j in range(i+1, len(behavior_data)): user2, behavior2 = behavior_data[j] user2 = user2.split(':')[0] # 计算用户相似度(这里简化为用户行为次数的比较) similarity = abs(int(behavior1) - int(behavior2)) # 更新用户相似度矩阵 if user1 not in similarity_matrix: similarity_matrix[user1] = {} similarity_matrix[user1][user2] = similarity if user2 not in similarity_matrix: similarity_matrix[user2] = {} similarity_matrix[user2][user1] = similarity return similarity_matrix # 根据用户行为和相似度矩阵进行推荐 def recommend_items(user_id, similarity_matrix): user_similarities = similarity_matrix[user_id] items = {} for user, similarity in user_similarities.items(): for item in r.zscan_iter(f'user_behavior', match=f'{user}:*'): item_id = item.decode().split(':')[1] items[item_id] = items.get(item_id, 0) + similarity sorted_items = sorted(items.items(), key=lambda x: x[1], reverse=True) return [item[0] for item in sorted_items[:5]]
在上述示例中,我们通过build_collaborative_filtering_model
函数构建协同过滤推荐模型,计算用户间的相似度,并使用recommend_items
# 记录用户行为 record_user_behavior(1, 'item1') record_user_behavior(1, 'item2') record_user_behavior(2, 'item2') record_user_behavior(2, 'item3') # 构建推荐模型 similarity_matrix = build_collaborative_filtering_model() # 获取推荐结果 recommendations = recommend_items(1, similarity_matrix) print(recommendations)
Dalam contoh di atas, kami membina model pengesyoran penapisan kolaboratif melalui fungsi build_collaborative_filtering_model
, mengira persamaan antara pengguna dan menggunakan recommend_item
fungsi berdasarkan matriks Persamaan untuk cadangan. Ini memudahkan pengiraan persamaan dan pemerolehan keputusan pengesyoran, dan boleh dioptimumkan dan ditambah baik mengikut keperluan khusus dalam projek sebenar.
Atas ialah kandungan terperinci Membina sistem pengesyoran menggunakan Redis dan Python: Cara memberikan pengesyoran yang diperibadikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!