zoukankan      html  css  js  c++  java
  • 画像和推荐

      假如有一款新闻APP,也有一些人在使用,这将会产生一些用户行为日志。我想根据这些用户日志构建一个画像系统,主要是新闻画像和用户画像,统计好这些画像,为个性化推荐做好铺垫。新闻画像和用户画像的一些常用特征如下:

    一.news profile

      这里可以采用json层次化表示一篇新闻,实时对抓取的新闻进行解析提取。新闻标签的提取应该是从粗到细逐步细化,比如从:一级类别->二级类别->具体的关键词、实体等。新闻画像的挖掘一般都是文本类挖掘,可以利用一些自然语言处理的常用方法去挖掘。

     

    二.user profile

      和新闻画像一样,可以采用json格式存储用户画像。用户基本信息可以从注册中收集;用户行为的记录包括曝光、点击、点赞、评论、转发、阅读时长等行为,包括每种行为的新闻列表;用户标签对于资讯类APP做推荐来説至关重要,只有知道用户的偏好内容标签才能知道用户具体的浏览偏好,这是最基础最直接的表达用户偏好的一种方式,这里将用户标签的偏好分为长中短,每种偏好都分为三层标签体系(与新闻标签体系一样), 每层都对应相应的标签及其权重。

      这里有两个关键点:

      1 .标签权重怎么算:一种最简略的方式,就是统计用户浏览过新闻标签的频率。为了防止某些标签长期占领前几位,可以对这些标签权重做衰减。

      2.标签列表怎么更新:长中期采用离线每天更新一次;短期可采用实时或近实时更新。比如,long长期偏好可以统计用户一到几个月的偏好标签;middle可以为一个星期或几个  星期;short可以一天的或是用来做实时标签统计(实时统计这一块可以作为信息流推荐,用户浏览完一些新闻后,可以在short中实时统计这些短期行为,基于这些行为可以在下  一次用户下刷时产生相关新闻推荐),long和middle可以一天只离线统计一次。

    三.recommendation process

      下面是一个简单的推荐流程图,包括离线和实时的计算过程。

      

      其中计算1-7中:

      1. 计算1

      主要用于生成新闻画像。将来源新闻解析入库,作为新闻库,建立倒排。新闻通过json形式来组织,内容主要包括新闻ID标题内容、来源、时间戳以及新闻标签等。

      2. 计算2

      本步骤主要是将用户产生的日志进行清洗后入库存储,采用批处理方式按小时进行存储。用户日志应该包括:用户ID,新闻ID,用户行为(比如浏览时长、曝光、点击、点赞、评  论及转发等)

      3. 计算3

      主要是离线统计用户长期和中期用户标签,长期标签(根据用户过去几个月的行为)中期标签(一天到几天时间)一般每天更新一次,并更新入库。

      4. 计算4

      根据当前用户的行为实时统计用户新闻标签画像,一方面将实时用户标签更新入库;一方面产生的实时用户标签传入算子5。实时用户标签的数据结构如下图,其中Profile中是用  户标签和其权重;Action中是用户浏览过的和跳过的新闻和时间戳。

      

      5.计算5

      根据用户实时行为标签从新闻库中实时获取最新相关的新闻,这些数据一方面更新入库;另一方面更新整合到缓存中的推荐列表中,供实时调用。

      6.计算6

      主要功能是离线产生推荐列表。其中的流程包括新闻的召回和排序,不同的召回策略为用户生成多样性候选集,排序策略将这些内容合在一起推荐给用户

      召回

      候选集的召回可以通过多种不同方式来产生这里列举几个召回策略:

      1)通过画像召回

      对于时效性高的新闻来说,用户的偏好是随着时间变化的,所以需要根据较短时间(几个小时甚至实时)生成用户画像然后根据画像召回新闻。

      用户的偏好也是一个稳定及缓慢变化的阶段,可以根据中长期画像(几天或几个月)将那些稳定的偏好整合到召回中作为候选集的一部分

      2) 通过地域召回

      用户倾向于关注本地新闻,所以根据用户IP(或用户拥有的地域标签)获取用户所在地,为用户召回特定地域的新闻

      3) 通过新热新闻召回

      新奇新闻和热门新闻可以满足人们追求好奇以及从众的心理,所以作为召回也是必然的。这里的新热新闻召回也可作为用户冷启动方案。

      4) 通过语义召回

      根据标签召回的依据是用户和新闻的标签重合度,主要应用在精确召回层面上。如果用户和新闻的标签没有交集,但又具有一定相关性(比如用户A有“汽车”标签,而新闻B有  “轿车”标签),这时就无法利用标签去召回。语义相似度可以缓解这种情况,通过表示学习找到用户标签语义相关的其它标签进行新闻召回,这也在一定程序上起到召回新闻多样  性的作用。可以利用word2vec,DSSM等语义模型计算相似度。

      排序

      召回被当作粗排,而排序可以作为精排,可以进一步减少推荐的数据集。

      1)规则排序,可以从不同的召回集中依次交替循环取出作为最终排序列。

      2)可以利用点击率预估方法,构建二分类样本进行模型训练学习。

      3)利用learning to rank进行排序学习。

      7.计算7

      为了解决用户冷启问题,即新用户推荐问题。

      新用户的推荐可采用如下几个策略:

      1)新热新闻作为推荐。

      2)利用用户注册信息(比如用户地域)来为用户生成相关推荐列表。

      3)在APP入口处,为用户提供可选择的感兴趣标签。

      4)选取不同类别的新闻推荐给用户,探索和引导用户偏好。

      下刷更新

        推荐分为离线推荐和实时推荐两部分。在离线阶段,每天会根据上述规则的方式生成推荐列表,为用户推荐几十到上百篇不等的新闻。当用户在浏览过程中会实时动态更新  用户的推荐列表,整合用户实时变化的兴趣

      根据用户行为实时更新推荐列表

        假设将给用户推荐的100篇新闻看成是一个环(如下图),每10篇新闻看成一,当用户浏览新闻时,根据用户在第一浏览行为(第一10篇新闻中用户会浏览自己感兴趣   的,不感兴趣的会跳过,每一的内容是根据离线阶段用不同的召回策略及排序策略生成的推荐)假设5秒是一个窗口(Window),当计算下一个窗口时,在第二最前面插入用户  在第一感兴趣的新闻的相关新闻,插入的新闻数量跟用户在第一个窗口浏览过的加上跳过的一样多,同时第一个窗口浏览过的和跳过新闻从环中剔除,由于删除的和插入的一  样多,总队列还是保持100个。此时从当前用户浏览的位置开始是新的第一,回到了队列最初的状态,整个过程是一个可以无限下刷的环。

        

      评估

      线下评估用于评估模型的优劣,比如推荐中常用的RMSE,点击预估的recall,precision,f1,auc等。

      线上评估中的A/B测试,gmv,ctr,cvr等。

     

     

  • 相关阅读:
    Oracle(创建序列)
    BoostrapValidator使用方法
    SpringBoot(八)----SpringBoot配置日志文件
    SpringBoot(七)-----查看配置报告
    eclipse导入新项目后,运行时找不到主类解决办法(转载)
    严重性代码说明项目文件行 禁止显示状态错误 C4996 fopen('fscanf'、strcmp):This function or variable may be unsafe. 最全解决办法
    Spring Boot(六)----application.properties文件加载顺序
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    异常处理(一):Non-parseable POM C:Usersadmin.m2 epositoryorgspringframework问题解决方案
    Spring Boot(五)----profile文件路径设置
  • 原文地址:https://www.cnblogs.com/little-horse/p/12387395.html
Copyright © 2011-2022 走看看