精华内容
下载资源
问答
  • 推荐系统召回策略之召回与Embedding召回

    千次阅读 多人点赞 2020-07-25 17:10:48
    召回与Embedding召回 1. 召回 1.1 概述2. 融合排序与策略 图1. 推荐系统整体架构 1. 召回 1.1 概述 所谓的“召回策略”就是指采用不同的策略、特征或者简单模型,分别召回一部分候选集,然后再把...

    在这里插入图片描述

    图1. 推荐系统整体架构

    推荐系统学习笔记系列链接:

    推荐系统学习笔记——特征工程
    推荐系统学习笔记召回策略之基于内容召回
    推荐系统学习笔记召回策略之基于协同过滤召回
    推荐系统召回策略之多路召回与Embedding召回


    1. 多路召回

    1.1 概述

    所谓的“多路召回策略”就是指采用不同的策略、特征或者简单模型,分别召回一部分候选集,然后再把这些候选集混合在一起后供后续排序模型使用的策略。

    然后我们来说说为啥需要用到多路召回策略,我们在设计召回层的时候,“计算速度”与“召回率”这两个指标是相互矛盾的,也就是说在提高计算速度的时候需要尽量简化召回策略,这就会导致召回率不尽人意,同样的,需要提高召回率时就需要复杂的召回策略,这样计算速度肯定会相应的降低。在权衡两者后,目前工业界普遍采用多个简单的召回策略叠加的“多路召回策略”。

    在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行。例如:新闻类的推荐系统中,我们可以按文章类别、作者、热度等分别进行召回,这样召回出来的结果更贴切实际要求,同时我们可以开辟多个线程分别进行这些召回策略,这样可以更加高效。

    在这里插入图片描述

    图2. 多路召回示意图

    1.2. 多说一点

    需要注意的是,在选择召回策略时需要充分考虑相关业务的特点,也就是说与业务强相关的。例如,对于新闻的召回来说,可以是“热点新闻”、“新闻类型”、“新闻类容”、“作者召回”等。

    如上图2所示,每一路的召回都会拉取前K个候选集,对于每一路的K的大小属于超参数,可以不同。K的大小一般需要通过离线评估加上线上A/B测试的方式确定合理的取值范围。

    虽然现在工业界普遍采用多路召回的策略,但是多路召回仍存在一些不可避免的缺陷,比如说,从策略选择到候选集大小参数的调整都需要人工进行,另外不同策略之间的信息也是割裂的,无法综合考虑不同策略对同一个物品的影响。当然,现在针对这些缺陷已经有了较好的解决方法——基于Embedding的召回,本文后面会讲到。

    1.3. 融合排序与策略

    在每个召回策略后都得到了一些候选集后,那么如何融合这些结果呢…

    举个例子:几种召回策略返回的列表(Item-id,权重)分别为:

    召回策略召回item列表(Item-Id:权重)召回item列表(Item-Id:权重)召回item列表(Item-Id:权重)
    召回策略1A:0.9B:0.8C:0.7
    召回策略2B:0.6C:0.5D:0.4
    召回策略3C:0.3D:0.2E:0.1

    针对上面我们有以下的融合策略:

    1. 按顺序展示
      比如召回策略“召回策略1 ”>“召回策略2”>“召回策略3”,那么就直接展示A、B、C、D、E即可

    2. 平均法
      在平均法中,分母为包含item列表中item-id的召回策略的个数,分子为权重之和。举例来说:1).B的计算方法:(0.8 + 0.6 )/2、 2). C的计算方法:(0.7 + 0.5 + 0.3)/3

    3. 加权平均
      在加权平均法中,我们自己指定相关的权重。例如,我们给三种策略的权重指定为0.4、0.3、0.2,则B的权重为(0.4 * 0.8 + 0.6 * 0.3 + 0 * 0.2)/ (0.4+0.3+0.2)。这个方法有个问题就是,每个策略的权重是自己设置的,并不准确,所以,就有了动态加权法

    4. 动态加权法
      计算XYZ三种召回策略的CTR,作为每天更新的动态权重。那么如何计算每种策略的CTR呢,依然举例来说:

      • 展现日志-带召回源:X,Y,Z,X,Y,Z
      • 点击日志-带召回源:点击X
      • 则每种召回的CTR = 点击数/展现数(X:1/2)

      这种方法的缺陷就是只考虑了点击率,并不全面。

    5. 机器学习权重法
      我们可以利用机器学习的方法来设置权重,比如说,使用逻辑回归LR分类模型预先离线算好各种召回的权重,然后做加权召回,这种方法考虑更多的特征以及环境因素,会更准确。

    以上融合排序的方法,成本逐渐增大,效果依次变好,可以按照成本进行选择,或者可以使用A/B测试来确定使用哪种方法。

    2. Embedding召回

    2.1 概述

    在上面提到了多路召回策略,也说到了它存在的不足之处,为了弥补多路召回的不足,就产生了现在的基于Embedding召回策略,另外,Embedding召回方法在实际效果以及速度上均不逊色于多路召回。事实上,多路召回中的“兴趣标签”、“兴趣Topic”、“热门”等信息均可以作为Embedding召回方法中的附加信息融合进最终的Embedding向量中,换句话说就是结合了基于Embedding召回与多路召回两种方法。

    我们在做Embedding召回时,可以把Embedding间的相似度作为唯一的判断标准,因此可以随意限定召回的候选集大小。
    在这里插入图片描述

    图3. Embedding召回方法总览

    2.2 Embedding召回的常见方法

    在介绍Embedding召回方法之前先简单介绍一些常见名词概念,如:I2I、U2I、U2U2I、U2I2I、U2TAG2I,如下图所示,其中“2”代表的是下图中的边,“U”与“I”代表的事下图中的节点。

    在这里插入图片描述

    图4. 召回系统推荐路径
    • I2I:计算item-item相似度,用于相似推荐、相关推荐、关联推荐;
    • U2I:基于矩阵分解、协同过滤的结果、直接给u推荐i;
    • U2U2I:基于用户的协同过滤,先找相似用户,再推荐相似用户喜欢的item;
    • U2I2I:基于物品的协同过滤,先统计用户喜爱的物品,再推荐他喜欢的物品;
    • U2TAG2I:基于标签的泛化推荐,先统计用户偏好的tag向量,然后匹配所有的item,这个tag一般是item的标签、分类、关键词等tag。

    下问主要介绍的是最常用的U2I与I2I方法。

    在这里插入图片描述

    图5. embedding召回推荐常用方法
    2.2.1 U2I召回方案

    初步:u2i 召回算法实现了,uese2vec,word2vec 个性化,crosstag,DSSM 个性化等召回算法;user2vec 是拿用户的 tag 向量和文章的 tag 向量求相似度,做的召回;DSSM 个性化是拿用户的 DSSM 向量和文章的 DSSM 向量求相似度,做的召回;crosstag 相当于多个 user2vec,需要把用户的 tag 按类别进行统计,每个类取 K 个 tag,共获取 m 组 tag,然后各组分别做 user2vec,最后汇总得到用户的推荐列表。

    进阶:uesr2vec 是在做召回的初级阶段,做的一些朴素的尝试,简单暴力见效快,存储压力大。每个 user 都存储一个推荐列表,在产品初期 DAU 不多时,矛盾还不明显,随着 DAU 不断提升,存储问题日益严重,这迫使我们想办法改变现状,可行的策略有两条,一个是把离线提前计算再存储转为线上即时计算不存储,另一个是把按人推荐转化为分群推荐。两种方法我们都做了实践。

    分群召回流程大体如下:

    在这里插入图片描述

    图6. embedding分群召回流程

    分群推荐我们尝试了簇召回,群画像召回,LSTM 分群,DSSM 分群,bnb 分群,增量聚类,动态规则聚类。

    簇召回就是先把所有用户的 tag 向量用聚类算法(如 minibatch-kmeans)聚成若干个簇(比如 500 个,根据肘点法确定),然后保存下簇标签,簇中心,每个用户所属的簇(一个用户可以隶属于一个簇或者多个簇)。得到用户所在的簇后,有两种做法,一种是根据实时点击日志,在簇内做实时 CF,也就是在簇内把点击过的新闻相互推。另一种做法是离线定时计算各个簇中心和候选新闻的相似度,然后和到每个簇的候选集。从实验效果来看簇内做实时 CF 效果要好一些。

    群画像召回是先把用户分群,然后把同一个群里的用户画像全部抽取出来,然后融合为一个群画像,相当于把这一群人合成了一个人,然后对于群画像,再使用和单个用户画像类似的个性化召回。

    LSTM 分群和簇召回类似,不过用户的向量是通过用户最近点击文章的 m 篇文章的 bert 向量(tag2vec 向量亦可)送入 LSTM 得到用户的向量,剩下的步骤和簇召回类似,该算法有一定提升但是计算速度慢,很难铺量。

    DSSM 分群,是把用户画像送入 DSSM,得到一个用户 64 维的向量,把文章画像送入 DSSM,得到一个文章的 64 维的向量,剩下的步骤和簇召回类似。该算法有提升显著,已经铺量使用。

    bnb 分群是借鉴 airbn(爱彼迎)公布的房源推荐算法,把文章的多个特征的 embedding(tag,topic,cat)拼接成一个向量,类似得到文章的向量。剩下的步骤和簇召回类似,该算法有一定提升,不十分显著。

    然后关于增量聚类与动态规则聚类后面有机会再补充说明吧。。。

    2.2.2 I2I召回方案

    单纯使用 fasttext+faiss 就可以实现好几路召回算法,比如 :iten2vec,media2vec,tag2vec,loc2vec,title2vec。

    tag2vec 就是利用词向量去做召回,比如可以用文章的标签向量表示文章的向量,如果一个文章有 4 个 tag(keywords: “蒋凡;离婚;张大奕;网红张大奕”)我们的经验是取前 3 个 tag,做等权重向量相加,效果最好。当然了这不是唯一的做法。关于 embedding 向量的用法有很多种比如,等权重相加,加权相加,取平均,取最大等。

    得到文章向量之后就是典型的 item2item 的计算过程了,利用 faiss 计算每篇文章的相似文章,比如为每一篇文章查询询出 1000 篇候选文章后,按相似度作一个截断,比如 cosin sim<0.6 舍去,对余下的文章,再利用文章的其他特征比如热度,CTR,新鲜度作一个加权,一路最简单的 tag2vec 召回就诞生了。

    其他召回和这个套路类似,就是训练 embedding 向量的时候,略有差异。tag2vec 是训练中文词语的向量,而 item2vec 是训练文章 ID(aid)所对应的向量,media2vec 训练的是文章的作者 ID(mid)所对应的向量,loc2vec 是训练地域名称所对应的向量,title2vec 是用 LSTM 训练得到的文章标题向量,doc2vec 是用 bert 计算出的文章正文(或者摘要)的向量。entity2vec 是利用我们自己构建的知识图谱通过 transE 得到的

    3. 自己的一些想法

    推荐系统本身是与企业的业务强相关的,尤其是召回部分,所以说只要是合乎业务要求的召回策略均是合理的。所以本人感觉抛开业务谈召回其实有种“夸夸其谈”的感觉,当然写的这些召回策略肯定也是对实际工作有着一定的指导意义,可以借鉴这些思路再结合实际业务肯定能收获很不错的效果。

    最后:因本人知识与视野的欠缺,本文有不足之处,诚恳接受批评!

    reference:

    1. 《深度学习推荐系统》 王喆著
    2. 《推荐系统 embedding 技术实践总结》腾讯技术实践著
    展开全文
  • 我们常用的精确率和召回率通常都用于二分类的问题上,那么在多分类上应该怎样去使用这些评价指标呢? 多分类的精确率和召回率 既然精确率和召回率的概念以及计算公式都指向二分类问题,那么我们不妨将多分类问题...

    我们常用的精确率和召回率通常都用于二分类的问题上,那么在多分类上应该怎样去使用这些评价指标呢?

    多分类的精确率和召回率

    既然精确率和召回率的概念以及计算公式都指向二分类问题,那么我们不妨将多分类问题转换为二分类问题来做。

    先来看一下精确率和召回率的概念:

    • 精确率是指分类正确的正样本个数占分类器判定为正样本的个数的比例。
    • 召回率是指分类正确的正样本真实正样本的比例。

    根据概念我们知道,在转换为二分类的过程中,我们重点在意的就是怎样去做正样本,其实我们可以把每个类别单独视为“正”,所有的其他类型视为“负”。

    举个例子:

    在进行例子之前,我们先来了解一个概念叫做——混淆矩阵。

    对于上面这个表格,我们就可以把它叫做是一个混淆矩阵,在混淆矩阵中,每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量。

    那么对于这个混淆矩阵我们就可以计算它每一个类别的精确率和召回率:

    • 分类1的精确率(此时把分类1当作正样本,其余为负样本):

    分类正确的正样本=43

    分类器判定为正样本=50

    P=43/50

    • 分类1的召回率:

    分类正确的正样本=43

    真实正样本=45

    R=43/45

    • 分类2的精确率(此时把分类2当作正样本,其余为负样本):

    分类正确的正样本=45

    分类器判定为正样本=50

    P=45/50

    • 分类2的召回率:

    分类正确的正样本=45

    真实正样本=51

    R=45/51

    • 分类3的精确率(此时把分类3当作正样本,其余为负样本):

    分类正确的正样本=49

    分类器判定为正样本=50

    P=4950

    • 分类3的召回率:

    分类正确的正样本=49

    真实正样本=54

    R=49/54

    得到了每个分类对应的P和R值他们的F1 score就可以用下面的式子算得:

    F1 score =\frac{2*precision*recall}{precision+recall}

     

    用代码实现一下该计算方式:

    
    M = [
        [14371, 6500, 9, 0, 0, 2, 316],
        [5700, 22205, 454, 20, 0, 11, 23],
        [0, 445, 3115, 71, 0, 11, 0],
        [0, 0, 160, 112, 0, 0, 0],
        [0, 888, 39, 2, 0, 0, 0],
        [0, 486, 1196, 30, 0, 74, 0],
        [1139, 35, 0, 0, 0, 0, 865]
    ]
    n = len(M)
    for i in range(n):
        rowsum, colsum = sum(M[i]), sum(M[r][i] for r in range(n))
        try:
            print ('precision: %s' % (M[i][i]/float(colsum)), 'recall: %s' % (M[i][i]/float(rowsum)))
        except ZeroDivisionError:
            print ('precision: %s' % 0, 'recall: %s' %0)
    

     

    展开全文
  • 行业分类-物理装置-纵向联邦推荐召回方法、装置、设备及可读存储介质.zip
  • 定义 TP-将正类预测为正类 FN-将正类预测为负类 FP-将负类预测位正类 TN-将负类预测位负类 准确率(正确率)=所有预测正确的样本/总的...应用多分类问题,把每个类别单独视为”正“,所有其它类型视为”负“,考虑...

    定义

    TP-将正类预测为正类

    FN-将正类预测为负类

    FP-将负类预测位正类

    TN-将负类预测位负类

    准确率(正确率)=所有预测正确的样本/总的样本 (TP+TN)/总

    精确率= 将正类预测为正类 / 所有预测为正类 TP/(TP+FP)

    召回率 = 将正类预测为正类 / 所有正真的正类 TP/(TP+FN)

    多分类下计算

    应用多分类问题,把每个类别单独视为”正“,所有其它类型视为”负“,考虑如下的混淆矩阵:
    M = [
    [14371, 6500, 9, 0, 0, 2, 316],
    [5700, 22205, 454, 20, 0, 11, 23],
    [0, 445, 3115, 71, 0, 11, 0],
    [0, 0, 160, 112, 0, 0, 0],
    [0, 888, 39, 2, 0, 0, 0],
    [0, 486, 1196, 30, 0, 74, 0],
    [1139, 35, 0, 0, 0, 0, 865]
    ]
    分别计算各个类别的精确率与召回率:

    n = len(M)
    for i in range(len(M[0])):
        rowsum, colsum = sum(M[i]), sum(M[r][i] for r in range(n))
        try:
            print 'precision: %s' % (M[i][i]/float(colsum)), 'recall: %s' % (M[i][i]/float(rowsum))
        except ZeroDivisionError:
            print 'precision: %s' % 0, 'recall: %s' %0
    

    参考

    https://www.zhihu.com/question/56403549/answer/151310817

    展开全文
  • 瞎聊机器学习——多分类的精确率和召回率.pdf
  • 写在前面: sklearn(三)计算recall:使用metrics.recall_score()计算二分类召回率 1.sklearn.metrics.recall_score()的使用方法 2.例子

    写在前面:

    sklearn(三)计算recall:使用metrics.recall_score()计算二分类的召回率


    1.sklearn.metrics.recall_score()的使用方法

    使用方式:

    sklearn.metrics.recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', 
    sample_weight=None, zero_division='warn')

    输入参数:

    y_true:真实标签。

    y_pred:预测标签。

    labels:可选参数,是一个list。可以排除数据中出现的标签,比如负类别比较多时,去除负类。

    pos_label:字符串或者int类型,默认值是1。多分类情况下:

    • 如果计算整体的 recall,可忽略该参数
    • 如果labels=[pos_label] 并且average != 'binary',则返回该类别的recall

    average:字符串类型,取值为 [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]。多分类必须的参数,如果为None,则返回每一类的recall,否则,根据其参数返回整体的召回率。

    'macro':用于多分类,只有两个属性可以选择 ‘macro’ 和 ‘weighted’ 。' macro ':计算每个标签的指标,并计算它们的未加权平均值。不考虑样本类别是否平衡。' weighted ':计算每个标签的指标,并找到它们的平均值,对(每个标签的真实实例的数量)进行加权。

    'micro':

    整体计算TP、FN、FP,然后根据公式计算得分。

    'macro':

    计算每个标签的指标,并计算它们的未加权平均值。不考虑样本类别是否平衡。

    'weighted':

    计算每个标签的指标,并找到它们的平均值,对(每个标签的真实实例的数量)进行加权。This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall.

    'samples': (没用它)

    sample_weight:(没用它)

    zero_division:(没用它)

    输出:

    正样本召回率,浮点型。

    2.例子

    此处需要一个混淆矩阵的手算例子,后续补充ing

     

    demo:

     

     

     

     

    展开全文
  • 多分类的 准确率 召回率 代码

    千次阅读 2020-02-18 10:45:28
    from sklearn.metrics import classification_report,confusion_matrix ...# 准确率 召回率 F1 每个类的数据量 precision_recall_report = classification_report( y_true=all_groundtruth_list, y_pre...
  • 八、推荐系统召回融合排序 召回与融合排序 召回 推荐服务一般有个环节(召回、粗排序、精排序),一般会使用召回策略,互相弥补不足,效果更好。比如说: 实时召回- U2I2I, 几秒之内根据行为...
  • 推荐系统中的召回

    千次阅读 2019-08-02 15:58:14
    召回(match)”指从全量信息集合中触发尽可能的正确结果,并将结果返回给“排序”。 召回的方式有多种:协同过滤、主题模型、内容召回和热点召回等,而“排序(rank)“则是对所有召回的内容进行打分排序,...
  • 多分类问题中的精确率与召回

    万次阅读 2018-08-08 14:40:04
    实际上,精确度(precision)是二元分类问题中一个常用的指标。  精确度就是标记为“正”,而确实是”正“的样本占所有标记为“正”的样本的比例。  TPTP+FPTPTP+FP   和精确率一起出现的还有另一个指标召回率...
  • 推荐系统中的召回算法

    千次阅读 2019-09-01 21:37:26
    推荐策略的两个关键问题分别是“召回”和“排序”。“召回(match)”指从全量信息集合中触发尽可能正确的结果,并将结果返回给“排序”。召回算法主要有:基于内容匹配的召回,基于协同过滤的召回
  • 基于内容召回 图1. 推荐系统整体架构
  • 机器学习基础(五十三)—— 精确率与召回率(多分类问题精确率和召回率的计算)
  • # plt.legend(loc='bottom right') # plt.show() # print(roc_auc_score(y_train_5,y_scores_forest)) ######## 类别分类器(OvA——一对 OvO——一对一) ######### # OvA: 分几类就创建几个二分类器 # OvO: 每两...
  • K-NN 分类 III . K-NN 分类实例 IV . K-NN 分类 准确性评估方法 V . 保持法 VI . kk-交叉确认法 VII . K-NN 分类结果评价指标 VIII . 分类 判定 二维表 IX . 准确率 X . 召回率 XI . 准确率与召回率关联 XII . 准确...
  • 如何理解推荐系统中的召回

    千次阅读 2019-04-29 10:30:57
    推荐系统中的精度(precision)和召回(recall)本质上和二元分类中的概念是一样的。 推荐系统往往只推荐有限个(如k个)物品给某个用户。真正相匹配的物品我们称之为相关物品(也就是二元分类中的阳性)。 k召回...
  • 分类-物理装置-一种汽车召回管理方法及系统.zip
  • 今天也要加油鸭~ ...目前工业界的推荐系统,在召回阶段,一般都采取召回策略。比如典型的召回路有:基于用户兴趣标签的召回;基于协同过滤的召回;基于热点的召回;基于地域的召回;基于Topic的召回
  • 分类推荐系统中,对其结果进行评价,经常用到准确率、召回率、F-score这些指标。 下面介绍其概念,举例阐述。 准确率(Precision):检索出的相关文档/检索出的文档总数,衡量的是系统的查准率。 召回率...
  • 1:这个文章是youtube发表的paper,主要是将dnn应用到推荐召回与排序中。这里主要从几张图说起,不做直接翻译,是带着讲解方式,把重点更清晰的理解出来。首先看下面这个图: 这个图展示了,推荐的整体架构,从上...
  • 前言在使用机器学习的方法解决分类问题时,我们通常需要一个指标来衡量我们模型的性能,以下介绍一些常用的分类性能指标,在实际应用中可以依照应用需求采用相应的指标。错误率错误率是使用最普遍、最简单同时又是最...
  • 目录 MNIST 训练一个二分类器 使用交叉验证测量精度 混淆矩阵 精度和召回率 精度/召回率权衡 ROC曲线 类别分类器 错误分析 标签分类 输出分类 MNIST MNIST数据集,这是一组由美国高中生和人口调查局员工手写...
  • 推荐系统召回模型之YouTubeNet

    千次阅读 2020-05-21 21:20:54
    YouTubeNet 是推荐系统步入深度DNN时代的开山之作,文中所提到的推荐系统框架非常经典,基本上奠定了后来推荐系统的主要步骤:召回和排序。至今在工业界有着广泛的应用。1.系统概...
  • 个性化推荐召回的方法

    千次阅读 2019-03-26 15:44:48
    在海量的信息中,用户找到所需、所想、所爱的优质内容变得异常困难,个性化推荐也因此应运而生。 个性化推荐是在大数据分析和人工智能技术的基础上,通过用户行为分析,进行深度计算,从而给用户提供高质量的个性化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,989
精华内容 11,195
关键字:

多分类推荐召回