51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个用户兴趣匹配算法,用于社交App中推荐好友或内容。请说明如何利用用户行为数据(如点赞、评论、分享)构建用户画像,并计算用户之间的相似度(如余弦相似度),以及如何处理冷启动问题。

Tencent软件开发-移动客户端开发方向难度:中等

答案

1) 【一句话结论】
核心是通过用户行为数据构建加权兴趣向量,利用余弦相似度计算用户间兴趣相似性,结合矩阵分解缓解数据稀疏性,并采用内容标签+内容热度的冷启动策略,实现精准好友/内容推荐。

2) 【原理/概念讲解】
用户画像构建:先清洗用户行为数据(过滤系统自动点赞、误操作等无效行为),对点赞(+2)、评论(+1)、分享(+3)加权,每个内容ID为向量维度,互动次数为值,形成用户兴趣向量(类比:向量长度和方向体现兴趣强度,维度是内容,值是偏好权重)。
相似度计算:用余弦相似度衡量向量夹角,夹角越小(值越接近1)兴趣越相似(如用户A和B都偏好科技+新闻,向量夹角小,相似度高)。为处理数据稀疏性,当用户互动内容少时,用矩阵分解(如SVD)降维,提取潜在兴趣因子,补充内容特征(如标签、类别),避免低质量行为影响结果。
冷启动策略:新用户无历史行为时,结合内容标签(热门标签排序)和内容热度(近期互动多的内容),通过内容特征与用户兴趣向量的匹配,提升推荐个性化(如新用户u4推荐标签最多且近期互动多的内容)。

3) 【对比与适用场景】

推荐策略定义特性使用场景注意点
基于内容推荐基于内容特征(标签等)推荐相似内容依赖内容特征,用户行为少时效果差用户行为稀疏,内容特征明确(如标签)需内容特征提取,冷启动问题
协同过滤(基于用户)基于用户间行为相似性推荐依赖用户历史,冷启动严重用户行为丰富,社交关系强数据稀疏性,计算复杂度高
混合推荐结合内容+协同过滤互补优势,提升效果复杂场景,需多种数据实现复杂,需平衡权重(如内容30%,协同70%)

4) 【示例】

# 1. 数据清洗与加权
def clean_actions(actions):
    valid = [(item_id, action, weight) for item_id, action, weight in actions 
             if not (action == "like" and weight == 0)]
    return valid

# 2. 构建用户行为矩阵(用户-内容)
user_actions = {
    "u1": [(1, "like", 2), (2, "comment", 1), (3, "share", 3)],
    "u2": [(1, "like", 2), (4, "share", 3)],
    "u3": [(2, "like", 2), (5, "comment", 1)]
}
for user in user_actions:
    user_actions[user] = clean_actions(user_actions[user])

# 3. 矩阵分解(处理稀疏性,用SVD降维)
from sklearn.decomposition import TruncatedSVD
import numpy as np
user_item_matrix = np.zeros((len(user_actions), len(set(item_id for actions in user_actions.values() for item_id, _, _ in actions))))
for i, (user, actions) in enumerate(user_actions.items()):
    for item_id, _, weight in actions:
        idx = list(set(item_id for actions in user_actions.values() for item_id, _, _ in actions)).index(item_id)
        user_item_matrix[i, idx] = weight

svd = TruncatedSVD(n_components=50)  # 降维到50维
user_vectors = svd.fit_transform(user_item_matrix)

# 4. 相似度计算优化(倒排索引+ANN)
from faiss import IndexFlatIP
index = IndexFlatIP(50)  # 维度50
index.add(user_vectors)

# 5. 冷启动:新用户u4
new_user = "u4"
content_tags = {
    1: ["科技", "新闻"],
    2: ["科技", "评论"],
    3: ["科技", "分享"],
    4: ["科技", "分享"],
    5: ["科技", "评论"]
}
content_popularity = {item_id: sum(1 for user in content_to_users[item_id] if user != new_user) for item_id in content_tags}
recommended_items = sorted(content_tags.items(), key=lambda x: (content_popularity.get(x[0], 0), len(x[1])), reverse=True)[:3]
print(f"新用户u4推荐:{recommended_items}")

5) 【面试口播版答案】
各位面试官好,关于用户兴趣匹配算法,核心是通过用户行为数据构建加权兴趣向量,利用余弦相似度计算用户间兴趣相似性,并结合矩阵分解缓解数据稀疏性,同时采用内容标签+内容热度的冷启动策略,实现精准好友/内容推荐。首先,用户画像构建:我们会先清洗用户行为数据,过滤系统自动点赞、误操作等无效行为,对点赞(+2)、评论(+1)、分享(+3)加权,每个内容ID为维度,互动次数为值,形成用户兴趣向量。比如用户对科技类内容的互动越多,向量中对应维度值越高,兴趣越强。接着计算相似度,用余弦相似度衡量向量夹角,夹角小则兴趣相似,比如两个用户都偏好科技+新闻,向量夹角小,相似度高。为了处理数据稀疏性,当用户互动内容少时,用矩阵分解(如SVD)降维,提取潜在兴趣因子,补充内容特征,避免低质量行为影响结果。冷启动方面,新用户无历史行为时,结合内容标签(热门标签排序)和内容热度(近期互动多的内容),比如新用户u4,推荐标签最多且近期互动多的内容。这样既解决冷启动问题,又提升推荐个性化。总结来说,通过行为数据建模、相似度计算优化和冷启动策略,实现精准推荐。

6) 【追问清单】

  • 问:如何处理用户行为数据稀疏性问题?
    回答要点:用矩阵分解(如SVD)降低维度,提取潜在兴趣因子,或采用基于内容的混合推荐,补充内容特征(如标签、类别)。
  • 问:如何优化相似度计算效率?
    回答要点:使用倒排索引(内容ID到用户ID的映射),减少计算量;或采用近似最近邻(ANN)算法(如FAISS),加速大规模用户相似度计算,降低时间复杂度。
  • 问:如何动态更新用户画像?
    回答要点:定期(如每天)更新用户行为数据,重新计算用户向量;或采用增量更新,只更新新增行为对应的向量元素,平衡更新频率与系统负载。
  • 问:如何平衡推荐的新鲜度和用户兴趣?
    回答要点:引入时间衰减因子,近期行为权重更高;或采用混合策略,结合热门内容推荐(新鲜度)和用户兴趣推荐(个性化),动态调整权重(如近期行为权重0.7,历史行为0.3)。
  • 问:冷启动策略中,如何考虑用户潜在兴趣?
    回答要点:结合内容热度(如近期热门内容)和用户标签(如用户可能感兴趣的标签),通过内容特征与用户兴趣向量的匹配,提升推荐个性化。

7) 【常见坑/雷区】

  • 数据稀疏性处理不足:未考虑用户互动内容少的情况,导致相似度计算不准确,推荐效果差。
  • 相似度计算效率低:未优化大规模用户相似度计算,导致推荐延迟,影响用户体验。
  • 冷启动策略单一:仅按标签数量排序,未考虑内容热度或用户潜在兴趣,推荐结果缺乏个性化。
  • 用户行为权重设置不合理:所有行为同等对待,低质量行为(如误点赞)影响用户画像质量。
  • 未考虑用户兴趣动态变化:定期更新频率过高或过低,导致推荐过时或滞后。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1