一文带你掌握推荐系统( 四 )

  • 切换指的是在不同的场景下采用不同的算法,比如资讯类产品优先基于内容推荐,找不到合适的内容再基于协同过滤,最后基于热门;
  • 分级指的是按照算法的效果好坏进行使用,优先使用效果好的算法,无推荐结果时再使用次好的算法;
  • 分层指的是把前一层算法输出的结果作为后一层的输入结果,然后再不断的进行优化 。
  • 以上,就是常用算法相关的内容,后面是基于推荐流程展开的内容,分别是挖掘、召回和排序 。
    挖掘
    挖掘也就是通常说的特征工程,有效的特征和特征组合直接决定着后续推荐结果的好坏 。本部分会简单的说下整体流程,以及常见的特征 。
    整体流程
    特征工程整体流程大致可以分为特征清洗、特征预处理、特征处理和特征监控这几部分 。
    特征清洗主要是将一些异常样本进行清洗,对一些样本进行采样 。
    特征预处理主要是对单个特征类型的一些转换,同时对异常值、缺失值进行处理,此外还有对多个特征的降维、选择 。
    特征处理主要是对特征进行离散、平滑、组合、聚合等处理,以达到更好的效果 。
    特征监控一方面是对特征的有效性进行分析,看特征是否真的有效,另一方面是监控特征的重要性是否有变化,避免影响模型效果 。
    常见的特征
    常见的特征可以分为用户特征、物品特征、相关性特征、环境特征、上下文特征等…
    用户特征指的是自然属性(姓名、性别、年龄等)、画像特征(兴趣爱好、行为等)、关系特征(人群属性、亲密度、关注关系等)…
    物品特征可以分为静态和动态两大类,静态指的是物品的固有属性,如分类、标签、关键词、主题、类型、语义等,动态指的是全局热度、分类热度、关键词热度等 。
    相关性特征指的是分类匹配、关键词匹配、语义匹配、uid-mid匹配、点击相似、兴趣分类相似、主题相似、兴趣词相似,向量相似等 。
    环境特征指的是时间、地点、网络环境、天气等…
    上下文指的是用户最近N条浏览内容、点击内容,或者是内容的相关内容,内容发布者的其他内容等 。
    下面为今日头条的一些特征,可以简单的了解下 。
    一文带你掌握推荐系统

    文章插图
     
    召回
    通常情况下候选集的数量可能有十万,百万甚至千万的量级,这种情况下如果直接计算用户相似度或者物品相似度的话,复杂度会非常高,成本也会非常大 。
    召回这个环节的主要任务就是从大规模的候选集中初步筛选出来一部分内容,供后续的排序环节使用,所以这个环节需要覆盖很广很全的范围 。
    召回的触发机制主要是基于用户特征和环境特征,比如用户画像相关、兴趣相关、行为相关、上下文相关等,此外还有一些运营规则和产品策略,比如热门、特定类型提权、降权等 。
    常见的召回策略包括上文算法部分的那些算法,以及一些其他策略,比如基于热门、内容、协同过滤、关联规则、图模型、地理位置、时间、用户关系等的召回策略…
    有了初步的召回集之后,就可以考虑一些过滤规则了,比如过滤掉用户曾经购买过、明确表示过不喜欢的物品或者已经失去了时效性的物品等 。
    如果候选集较小,可以考虑在生成候选集之后就进行过滤,如果候选集较大,可以考虑在初始推荐列表中再过滤掉不该在候选集中的物品 。
    排序
    按照排序类型来划分的话,排序可以分为粗排和精排,按照目标来划分的话,排序可以分为单目标排序和多目标排序 。
    单目标和多目标倒还好理解一些,毕竟不同的目标需要的模型和策略可能是不同的,那为什么类型又区分成粗排和精排 。
    主要可以分为两方面的原因,一方面大多数用户其实消费不了那么多内容,我们精心为用户准备了Top100的内容,大多数情况下用户可能只消费10条内容,那90条内容的工作量可能就浪费了 。
    另一方面排序的核心任务是对召回集给出的结果进行精准的排序,需要兼顾很多模型和特征,这就需要在效率、成本和性能之间做平衡了 。
    基于这两点原因,将排序又分为了粗排和精排两个阶段 。
    粗排阶段处理的物品数量在数百级,主要负责对召回的物品进行打分,也可以理解为用户的感兴趣程度 。
    精排阶段处理的物品在数十级,同时还会有一些产品规则方面的考虑,比如对于多样性、新颖性、兴趣探索方面的考虑,以及对于特定内容的加权、过滤或者强制隔离等 。


    推荐阅读