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

好未来需要为用户推荐课程,请设计一个算法计算用户对某门课程的兴趣度,假设已知用户历史选课记录和课程标签(如数学、语文、编程),说明算法思路及数据结构选择。

好未来后端难度:中等

答案

1) 【一句话结论】:采用用户行为(协同过滤)与课程内容(基于内容)双特征融合的推荐算法,通过计算用户历史选课行为与目标课程标签的相似度,结合行为权重(如时间衰减),输出兴趣度评分,兼顾推荐准确性与可解释性。

2) 【原理/概念讲解】:推荐算法的核心是匹配用户偏好与课程特征,需结合协同过滤(用户行为相似度)与基于内容推荐(课程标签相似度)的优势。

  • 协同过滤:基于用户历史选课行为,计算用户间的相似度(如余弦相似度),找到与目标用户行为相似的用户群体,若这些相似用户选过目标课程,则提升兴趣度(类比:用户买过A、B商品,找买过A、B的用户推荐C商品)。
  • 基于内容推荐:利用课程标签(内容特征),计算用户历史选课标签与目标课程标签的相似度(如余弦相似度),直接匹配用户偏好与课程特征(类比:商品有“水果”“蔬菜”标签,找用户买过“水果”的用户推荐“苹果”)。
    两者结合:协同过滤捕捉用户潜在偏好(未显式表达的),基于内容提供推荐解释(如“因为您之前选过数学和编程,这门编程进阶课标签包含编程和数学”),提升推荐效果与可解释性。

3) 【对比与适用场景】:

方案定义特性使用场景注意点
协同过滤基于用户行为,计算用户/物品相似度依赖用户行为数据,能发现隐藏关联用户行为丰富(如选课记录多),冷启动问题数据稀疏时效果差,计算复杂(需计算所有用户相似度)
基于内容推荐基于物品内容特征(标签),匹配用户历史特征依赖物品特征,可解释性强课程标签明确(如数学、编程),新课程推荐需高质量标签,用户行为数据少时效果差
双特征融合结合协同过滤与基于内容推荐优势互补,提升准确性与可解释性用户行为与标签数据均可用,需平衡两者权重需设计融合策略(如加权),计算复杂度较高

4) 【示例】:
假设用户U1历史选课:数学(M)、编程(P)、语文(Y);目标课程C1标签:编程(P)、数学(M)。

  • 协同过滤部分:找与U1行为相似的用户(如U2历史选课:数学、编程、英语),计算U1与U2的余弦相似度(点积/(模长1×模长2) = (11+11+10)/(√3√3)=0.8165),若U2选过C1,则U1对C1的兴趣度增加。
  • 基于内容部分:计算U1历史标签向量([1,1,1])与C1标签向量([1,1,0])的余弦相似度=0.82(如示例中计算)。
  • 融合计算:假设协同过滤贡献0.4,基于内容贡献0.6,行为权重(近期行为权重0.7),则兴趣度=0.40.8165 + 0.60.82*0.7≈0.65(最终评分)。
    伪代码(融合版本):
def calculate_interest(user_history, course_tags, user_sim_score=0, time_weight=0.7):
    # 基于内容相似度
    user_tags = set(user_history)
    course_tags = set(course_tags)
    common_tags = user_tags & course_tags
    user_vec = [1 if t in user_tags else 0 for t in all_tags]
    course_vec = [1 if t in course_tags else 0 for t in all_tags]
    content_sim = sum(user_vec[i] * course_vec[i] for i in range(len(all_tags))) / (norm(user_vec) * norm(course_vec))
    
    # 协同过滤相似度(假设已计算,如0.8165)
    # time_weight: 近期行为权重(指数衰减,如time_weight = exp(-decay_rate * (current_time - last_time)))
    
    # 融合:加权求和
    interest = (user_sim_score * 0.4) + (content_sim * time_weight * 0.6)
    return interest

(注:all_tags是所有课程标签集合,norm是向量模长计算)

5) 【面试口播版答案】:
面试官您好,针对用户对某门课程的兴趣度计算,我会采用用户行为(协同过滤)与课程内容(基于内容)双特征融合的推荐算法。核心思路是:先提取用户历史选课的标签(如数学、编程),再结合用户行为相似度(找与用户选课习惯相似的其他用户),通过计算用户历史标签与目标课程标签的相似度(如余弦相似度),并给近期行为加权重(比如最近一个月的行为权重更高),最终输出兴趣度评分。
具体来说,比如用户之前选过“数学”和“编程”课程,目标课程“编程进阶”的标签包含“编程”和“数学”,那么先计算用户历史标签向量与目标课程标签向量的余弦相似度(得到0.82),再结合用户行为相似度(比如与该用户选课习惯最相似的用户也选过这门课,贡献0.4分),最后给近期行为加权重(比如0.7),最终兴趣度是两者加权后的结果(约0.65)。数据结构上,用哈希表存储用户-标签映射(用户ID→标签列表)和课程-标签映射(课程ID→标签列表),这样查询标签信息很快。这样既能利用用户行为数据捕捉潜在偏好,又能利用课程标签解释推荐理由,提升推荐的准确性和可解释性。

6) 【追问清单】:

  • 如何处理冷启动问题?(回答:新用户无历史选课记录时,采用基于内容推荐(用热门课程标签初始化用户标签向量);新课程无用户行为时,采用全局热门课程推荐。)
  • 如何优化计算效率?(回答:对用户-标签矩阵进行PCA降维(减少维度),或使用近似最近邻(ANN)算法(如Faiss)加速相似度计算。)
  • 如何确定行为权重(时间衰减)?(回答:通过A/B测试,比如设置不同衰减率(如0.1、0.2、0.3),对比推荐准确率,选择最优参数。)
  • 如何处理数据稀疏(用户选课少)?(回答:协同过滤时只考虑相似度高于阈值的用户(如top10%相似用户),或结合基于内容特征(如用户标签与课程标签的相似度)补充。)
  • 如何评估算法效果?(回答:用准确率(推荐列表中用户实际选课的课程占比)、召回率(用户实际选课的课程在推荐列表中的占比)、F1值,并通过A/B测试对比不同算法的推荐转化率。)

7) 【常见坑/雷区】:

  • 忽略冷启动:新用户/新课程无法推荐,导致推荐效果差。
  • 未考虑时间衰减:所有历史行为权重相同,近期行为影响不足,推荐结果过时。
  • 数据稀疏导致协同过滤不准:用户选课少,相似用户数量不足,推荐结果偏差大。
  • 标签质量影响结果:标签错误(如课程标签标注错误)会导致推荐错误,需保证标签准确性。
  • 计算复杂度高:大规模数据下,计算所有用户相似度耗时过长,需优化(如降维、近似算法)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1