在信息爆炸的时代,如何将个性化内容精准地推送给目标受众,成为提升用户参与度和满意度的关键。然而,大规模应用推荐系统面临着诸多挑战:如何处理冷启动问题,确保推荐结果的多样性与相关性,以及维持系统的可扩展性。本文将深入探讨一种基于双塔模型的解决方案,该模型能够有效平衡个性化、效率和公平性,并能与大型语言模型(LLM) 深度集成,为个性化内容的生成和呈现提供强大的支持。

推荐系统的演进与双塔模型的优势

传统的推荐系统,例如本文提到的多分类器模型,在面对海量内容和快速增长的用户群时,往往会遇到瓶颈。多分类器模型将每条内容视为一个独立的类别,当新增内容时,需要重新训练整个模型,导致计算成本高昂且效率低下,可扩展性较差。此外,对于缺乏历史交互数据的新用户,多分类器模型难以给出有效的推荐,面临严重的冷启动问题。

双塔模型的出现,标志着推荐系统架构的一次重大革新。它将用户特征和内容特征分别编码到独立的“塔”中,生成用户和内容的嵌入向量(embedding vectors)。通过比较这些向量在共享向量空间中的相似度,可以高效地找出最相关的推荐。这种分离式的架构极大地提升了可扩展性,允许系统在不进行大规模重新训练的情况下,轻松处理新增的用户和内容。与多分类器模型相比,双塔模型在添加500个新的内容类别时,只需要为这些新条目生成嵌入向量,显著降低了计算成本。

双塔模型的核心架构与工作原理

双塔模型的核心在于两个关键的“塔”:用户塔和内容塔。

  • 用户塔(User Tower):负责将用户相关的特征转化为嵌入向量,以捕捉用户的个性化偏好。关键特征包括:

    • 账户年龄:用于平衡历史偏好和近期偏好,例如,账户年龄较短的用户,更依赖模型预测的偏好;而账户年龄较长的用户,则更侧重历史行为。
    • 互动历史:分析用户在不同内容类型上的互动模式,例如,用户经常阅读的文章类别、观看的视频时长等。
    • 行业类型和支持级别:提供上下文信息,根据行业规范和服务等级来定制推荐
  • 内容塔(Content Tower):负责将内容相关的特征转化为嵌入向量,以捕捉内容的本质属性。关键特征包括:

    • 内容类型:例如,文章、模块、辅导课程等。
    • 受欢迎程度:结合短期和长期的互动趋势,评估内容的受欢迎程度。
    • 产品元数据:将内容映射到特定的产品,实现更精准的推荐

通过这种架构,双塔模型能够有效地泛化,即使是新的或互动较少的内容,也能基于其元数据和与其他内容的相似性进行推荐,从而缓解冷启动问题。例如,对于金融服务行业的新用户,即使没有历史互动数据,双塔模型也能根据其账户年龄、行业类型以及相似用户画像,提供个性化推荐

数据准备与负样本抽样策略

高质量的数据是训练双塔模型的关键。为了让模型学习用户更可能参与的内容以及不太可能参与的内容,需要构建包含正向互动(用户与内容的互动)和策略性生成的负样本的数据集。

由于实际数据主要记录用户与内容的互动,模型缺乏用户不感兴趣的内容的信息。因此,需要生成负样本来代表“未互动”的内容。

负样本抽样策略旨在:

  • 保持平衡:维持负样本和正样本的适当比例,避免模型偏向特定产品或内容类型。例如,高参与度产品保持5:1的负正比例,低参与度产品则调整为3:1或2:1。
  • 增强多样性:从不同的产品类别中抽样内容,鼓励推荐的多样性。
  • 优化训练:使模型接触到各种场景,提高其泛化能力。

以下是一个简化的Python代码示例,展示了如何为用户生成负样本:

def create_negative_samples(user_data, content_pool, num_negatives=3):
    """
    为用户未互动的内容生成负样本。
    参数:
    user_data (dict): 用户互动内容和可用产品。
    content_pool (pd.DataFrame): 具有相关产品的可用内容。
    num_negatives (int): 要生成的负样本数量。
    返回:
    list: 负样本内容名称列表。
    """
    engaged_content = set(user_data['engaged_contents'])
    available_products = set(user_data['available_products'])

    # 筛选符合条件的负样本内容池
    negative_pool = content_pool[
        (content_pool['product'].isin(available_products)) &
        (~content_pool['content_name'].isin(engaged_content))
    ]

    # 抽样负样本内容
    sampled_negatives = negative_pool.sample(n=min(num_negatives, len(negative_pool)))
    return sampled_negatives['content_name'].tolist()

自定义损失函数与多样性控制

传统的损失函数,如二元交叉熵,主要关注分类准确性。然而,个性化推荐系统面临独特的挑战,需要更细致的方法。为了鼓励推荐结果的多样性,并避免过度推荐热门内容,需要自定义损失函数。

以下是一些自定义损失函数的示例:

  • 产品多样性惩罚(Product Diversity Penalty):惩罚模型过度推荐来自单个类别或产品的内容,鼓励多样性
def calculate_diversity_penalty(content_embeddings):
    """
    惩罚模型推荐相似产品,鼓励多样性。
    """
    similarity_matrix = tf.matmul(content_embeddings, content_embeddings, transpose_b=True)
    diversity_penalty = tf.reduce_mean(similarity_matrix) - tf.reduce_sum(tf.linalg.diag_part(similarity_matrix))
    return diversity_penalty
  • 基于分数的惩罚(Score-Based Penalty):减少对具有过高CSS(Customer Satisfaction Score)采用率的内容的推荐,确保推荐保持有意义且可操作。
def calculate_score_penalty(css_scores, threshold=60):
    """
    惩罚高CSS分数,避免推荐过度采用的产品。
    """
    penalty = tf.maximum(0.0, (css_scores - threshold) / 40.0)
    return tf.reduce_mean(penalty)
  • 内容不平衡惩罚(Content Imbalance Penalty):通过更重地加权来自代表性不足的类别的推荐来调整内容不平衡。

总损失函数通过组合各种惩罚项计算得出,确保准确性、多样性和相关性之间的平衡。这些组件包括产品多样性、过度高参与度分数、不正确的推荐的惩罚。通过整合这些组件,该模型可以更好地与用户偏好保持一致,同时促进公平性和多样性

整体层(Holistic Layer)的最终优化

为了确保推荐结果是多样、相关且以用户为中心,需要在双塔模型之上应用一个整体层。该层通过整合额外的业务和用户特定约束,将原始模型预测细化为最终的推荐集合。

  • 历史参与度和模型预测的动态平衡:根据用户的账户年龄调整历史用户互动和预测兴趣的权重。对于新用户,优先考虑预测;对于长期用户,则更强调历史行为。
  • 跨内容类别的多样性:确保推荐涵盖广泛的内容类型,同时利用大型语言模型(LLM) 来定制每个推荐的呈现方式。例如,对于时间有限的用户,可以将长篇文章总结为关键要点;或者重新措辞培训内容以适应初学者或高级用户。
  • 避免冗余:消除重复或重叠的推荐,最大限度地提高建议内容的多样性和独特性。
  • 按产品类型公平分配:确保推荐在不同产品之间按比例分配,以反映用户偏好和业务优先级。

与大型语言模型(LLM)的集成

双塔模型的嵌入向量架构可以与大型语言模型(LLM) 无缝集成,实现更高级的个性化。例如:

  • 上下文内容摘要LLM可以根据用户的嵌入向量,重新措辞或总结推荐的内容,创建高度个性化的摘要。
  • 动态FAQ生成:基于互动历史和产品元数据,LLM可以实时生成上下文相关的FAQ或支持内容。
  • 冷启动预热:对于新用户或内容,LLM可以基于相似的嵌入向量生成合成互动数据或模拟反馈,提升模型的早期性能。

这种协同作用允许构建一个闭环系统,其中机器学习选择最佳的内容候选,而AI动态地呈现或重塑它们以适应用户。

个性化推荐案例:Sales Cloud 和 Service Cloud

以下案例展示了如何根据用户的使用阶段和反馈,个性化推荐 Sales Cloud 和 Service Cloud 的内容:

  • Sales Cloud 的入职阶段
    • 挑战:没有历史数据,侧重于基础知识和设置。
    • 推荐内容:关于创建报告、机会层级的知识文章,以及关于账户、联系人、潜在客户和机会的 Trailhead 模块。
  • Service Cloud 的扩展阶段
    • 挑战:在优先采用 Service Cloud 的同时,保持对 Sales Cloud 的平衡关注,避免偏向最受欢迎的功能。
    • 推荐内容:关于案例管理最佳实践、自动案例用户的知识文章,以及关于客户服务、Salesforce 服务云体验、机会管理、潜在客户列表视图的 Trailhead 模块。
  • 既定参与阶段
    • 挑战:确保推荐在产品之间保持平衡,避免过度推广已采用的功能,并关注用户偏好的内容类型。
    • 推荐内容:关于 Einstein Conversation Insights for Sales、账户数据策略的 Trailhead 模块,以及关于自动案例用户的知识文章。
  • 高级偏好阶段
    • 挑战推荐应针对高级用例,并避免已采用的产品。
    • 推荐内容:关于 Einstein Messaging Insights、Marketing Cloud Engagement Release Readiness、Behavioral Triggers in Journey Builder 的 Trailhead 模块,以及关于跟踪 Marketing Cloud “List-Unsubscribe” Opt-Outs 的知识文章。

双塔模型的优势与性能提升

双塔模型克服了传统多分类器模型的局限性,带来了显著的优势:

  • 可扩展性:能够无缝处理新增的内容或用户,无需进行大规模重新训练。
  • 冷启动处理:利用元数据为新用户或新内容提供有意义的推荐
  • 增强的偏好建模:更准确地理解用户偏好及其与可用内容的对齐方式。
  • 多样性和公平表示:确保用户收到多样化的推荐,避免过度依赖热门内容。

与之前的多分类器相比,双塔模型在多个关键指标上实现了显著的性能提升:

  • 更高的准确性:召回率和精确率指标在关键内容类型上提高了15-20%。
  • 增强的冷启动处理:可以使用元数据有效匹配新用户和内容。
  • 可扩展的推荐:该架构支持不断增长的内容库,无需频繁的重新训练或手动干预。
  • 反馈整合:显式反馈的整合有助于提高用户满意度,因为推荐现在更好地反映了个人偏好。

结论与展望

双塔模型代表了个性化推荐系统的一次变革性飞跃,它解决了可扩展性多样性冷启动挑战。通过分离用户和内容表示,整合创新损失函数以及利用整体层,该模型确保推荐不仅准确而且平衡和多样化。其成功强调了创新、反馈整合和整体设计在满足用户和企业不断变化的需求方面的重要性。

展望未来,双塔模型等传统机器学习架构与新兴生成式AI的结合将开启个性化的新领域。未来不仅仅是推荐内容,而是考虑到用户共同创造内容。随着大型语言模型(LLM) 变得更加上下文感知,嵌入变得更加丰富,“展示什么”和“如何表达”之间的桥梁将会消失,从而创建一个由结构化数据和生成智能驱动的无缝个性化引擎。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注