课程笔记:推荐系统入门


前言:
算是给自己搞点新的事情去处理吧,输出有助于自己整理思路
越到后面越晕,二刷的时候再整理一下笔记吧,现在估计很乱,和我现在脑子里的思路一样。


1. 入门概念

1.1 推荐系统的目的:
找到user和item之间的联系
1.2 推荐适用场景:
什么时候不适合于做推荐:

  • 工具类产品
  • 物品过少,联系不会造成太多影响
  • 用户留存回访低,这个情况下,推荐也是很难去处理的。
  • 当增加的连接数主要靠增加的活跃用户和增加物品数做贡献,那么就不适合增加推荐系统,而当连接可以自发生长,那么就比较适合推荐系统加速这个过程。(我理解就是,如果客户留存不强,或者对陈旧物品完全没想法,那么整体下来,推荐就是比较难做的,推荐能做的,就是增加用户看到的物品的可能性)

这里我就衍生出2个问题:

  1. 广告类的推荐是不是都会存在留存过低的问题?
  2. 内容推荐/电商类的推荐才是真的可以累积经验的?

1.3 推荐系统预测问题模式:

  • 评分预测:
    • 预测目标:预测分数与实际分数差距越来越小(量化标准之一:均方根误差)
    • 难点:数据质量,评分分布
  • 行为预测
    • 优势:数据量比用户明确的评分反馈大
    • 预测行为方式:预测行为发生概率(点击率)or 预测物品相对排序(rank算法)。
      感觉是,行为预测解决数据不均衡问题,解决大头部分,然后,评分预测解决最终的点击率提升

1.4 几个常见问题

  • 冷启动问题:新用户/不活跃用户/新物品/展示次数较少的物品,解决方案都是加数据,从已有数据中学习
  • 探索利用问题:已有兴趣点与新兴趣点需要做到平衡。大部分推荐感兴趣,小部分试探新的兴趣。
  • 安全问题

1.5 推荐系统的几个关键元素

  • ui 和ue
  • 数据
  • 领域知识
  • 算法

2. 内容推荐

1. 用户画像

  • 整体用户画像的适用阶段:匹配评分与召回。
  • 构建方向:可以自己从业务逻辑构建,也可以直接适用机器学习方法(潜语意模型,矩阵分解得到的隐因子,embedding向量)
  • 评价指标:排序好坏/召回策略

2. 文本建立到用户画像
(感觉就是word2vec方法?)

2.1 结构化文本/构建特征方式

  • 关键词提取:TF-IDF和TextRank
  • 实体识别:基于词典的方法结合CRF模型
  • 内容分类:将文本按照分类体系分类
  • 文本:从文本直接划分多个类簇
  • 主题模型:从文本中提取主题向量,在预测各个主题的概率分布。
  • 嵌入:embedding方法。

TF-IDF方法

  1. 在一篇文字中反复出现的词更重要
  2. 在所有文本中都频繁出现的词更不重要
原理.png

特点.png

TextRank方法
出现共现关系的会互相支持对方成为关键词。

内容分类方法
短文本分类方法:SVM
现有开源方法:facebook的FastText

实体识别:
序列标注问题(隐马尔可夫模型或者条件随机场)
词典法:先分毫词典,然后使用 trie-tree数据结构存储,然后匹配。
工业级别工具:spaCy,NLTK

聚类
算法:LDA主题模型算法(达到软聚类效果,一个文本属于多个类簇),需要计算k个主题之间两两相似程度,筛选较低的k值。
开源工具:Gensim,PLDA

词嵌入
词向量的用途:(word2vec)

  • 词之间相似度描述,扩充结构化标签
  • 累加得到文本稠密向量
  • 用于聚类,可以得到更好的语意聚类效果

2.2 标签选择
前面的方法为特征构建,然后这一步是建立标准做特征筛选。

常用方法:
卡方检验(词和类别的关系,如果有关系,则为关键词)

image.png

image.png

image.png

信息增益(和决策树里面的信息增益感觉差不多,就是看增加一个特征之后,信息增加多少,从而判断最重要的特征)

卡方针对每一个行为单独筛选一套标签,然后信息增益是针对全局做统一筛选。

2.3 内容推荐框架

image.png

主要步骤与核心点:

  • 数据源头扩充
  • 数据清洗与信息提取:内容挖掘与用户分析(抓住主题,直接到嵌入分析),产出为结构化内容库,内容分析模型(分类器模型,主题模型,实体识别模型,嵌入模型)
    • 内容推荐算法:Lucene中的BM25F算法
  • 算法

3. 近邻推荐

3.1 协同过滤

3.1.1 基于用户的协同过滤

核心:用户物品关系矩阵
计算方式:通过用户物品向量计算用户相似度。
输出:

image.png

问题:

  1. 矩阵稀疏处理方式:大部分元素由于是0,所以可以用CSR或者COO存储。
  2. 相似度计算:随机抽出10维计算。现有技巧:DIMSUM 算法,或者把循环使用向量来计算。
  3. 用户量大:原始矩阵map成用户对,值为两个用户对同一个物品的评分积。
    • 遍历用户喜欢物品列表
    • 获取相似用户列表
    • 拼接为:(相似用户id,物品id,1),value(相似度)
      (相似用户id,物品id,0),value(喜爱程度*相似度)
    • 结果: (相似用户id,物品id,0)/(相似用户id,物品id,1)
  4. 优化:
    • 对热门物品增加惩罚。
    • 增加喜欢程度的时间衰减。

3.1.2 基于物品的协同过滤

  1. 物品之间相似度优化:
    • 物品中心化:感觉就是归一化,去掉边缘值。value-avg(value)
    • 用户中心化:用户维度,计算均值,然后把他打过的分都减去均值 value-avg(value)
  2. 计算推荐结果:
    topk问题:
    目标:计算用户u对物品i的分数
  • 遍历u打过分的m个物品,计算这些物品与i的相似度
  • 相似度*用户评分,处以相似度的和,就得到加权平均
    直接推荐相似物品
  • 直接推荐和物品i相似度较高的物品
    slope one 算法
    遗留问题:
    slope one怎么做到在线更新

3.1.3 相似度:

数据分类:

  • 欧式距离(计算绝对差异)
  • 余弦相似度(计算方向差异)
  • 皮尔逊相似度:实际上也是余弦相似度,不过弦对向量做了中心化。向量各自减去均值,再计算相似度。
  • jaccard 相似度(只适合bool类型):交集元素个数在并集中所占比例。适用于隐式反馈。
    遗留问题:
    社交网络会适合那一类方法:


    image.png

4. 矩阵分解

4.1 netflix prize中推荐算法

近邻模型问题:

  1. 物品之间相关性。
  2. 矩阵稀疏导致计算结果不稳定。

矩阵分解:技术的svd算法(奇异值分解)
机器学习框架核心(损失函数/优化算法)

image.png

增加偏置信息:(比svd要多学习2个参数)


image.png

增加历史行为:
在学习参数上增加:x(隐式反馈的物品向量),y(用户属性向量)

时间因素:

  • 评分按照时间加权
  • 对评分时间划分区间,不同时间区间分别学习出隐因子向量
  • 对特殊的期间,如节日,周末等训练对应的隐因子

4.2 矩阵分解优化方法

image.png

评价标准:

  1. 偏差:偏差大,欠拟合
  2. 方差:方差大,过拟合

交替最小二乘法

image.png

优点:
image.png

隐式反馈
one-class:从解决评分预测问题专向解决预测行为
算法改进成:加权交替最小二乘:
(行为的次数是对行为的置信度反应)

image.png

问题:真谛没有反馈的缺失值怎么处理

  • 隐式反馈只有正类别确定,负类别是假设的。所以很可能导致正负类样本很不均衡。
    解决方案:根据物品的热门程度做负采样。

算法汇总:

  • topk:facebook有开源的faiss 和NMSLIB
  • 先推荐产品簇,然后再增加排序统计算法作为最终推荐结果。

4.3 排序算法:贝叶斯个性化排序(BPR模型)

目标:能够较好的为用户排列出更好的物品相对顺序
计算相对顺序。
评价标准:auc
目标函数:目标函数的构造和auc是搭配的。
训练方法:结果重复抽样的梯度下降

5. 模型融合:

  • 挖掘
  • 召回
  • 排序

经典融合模型:gbdt+lr

梯度下降优化算法:google13年发布的FTRL

image.png

特征组合:

因子分解机:用于模型融合,对召回结果重新排序。

FFM:(需要对样本做归一化)

wide and deep模型:

image.png

6.mab:

bandit算法:

把推荐具体物品,上升到选择策略。


image.png

bandit算法:计算选择会带来多少遗憾,遗憾越少越好。bandit累积遗憾增长慢,就是好算法

image.png
image.png

常用算法:
汤普森采样算法:每一类基于不同的贝塔分布,取随机数,取最大。


image.png
image.png

ucb算法:同样的以平均收益为基准,对于选择次数不足的给予照顾,选择倾向是哪些确定收益较好的算法:


image.png

贪婪算法:感觉就是,给一个随机数e(0-1),以1-e的概率选择平均收益最大类。

同bandit算法解决冷启动问题:


image.png

结合上下文的bandit算法:

LinUCB算法
随着m增加,置信上边界减少

image.png

高级版ucb:
有部分特征对应的参数是在左右候选之间共享的,就是无论哪个被选中,都会去更新这部分参数。

image.png
image.png

bandit算法与协同过滤结合

COFIBA算法:
内容相关。

image.png

image.png

针对第i个用户,每次推荐时做如下操作:


image.png

更新类簇的办法:


image.png

image.png
image.png

ee问题:

  1. 真的在探索的时候不能推荐质量过低的问题
  2. 需要有精心的产品设计

7. 深度学习在推荐系统中的应用:

深度学习中可以帮助推荐系统的部分:

  1. embedding:矩阵分解的隐因子,word2vec(目的是得到词的嵌入向量)
  2. predicting

各种2vector-》 AntoEncoder:学习不同的嵌入向量
youtube 视频推荐

image.png

rnn构建个性化音乐

结合上时间属性之后的优化

image.png

其他应用算法:

rank算法:

  1. 热门排行榜
  2. 针对老用户也推荐热门产品
  3. 整理兜底方案

时间因素

image.png

image.png

好评率预估公式:威尔逊区间


image.png
image.png

加权采样算法:

有限数据集

  • 等概率采样
  • 利用指数分布


    image.png
image.png

流采样

  • 蓄水池采样:


    image.png

推荐候选的去重策略:

去重:

  1. 内容源去重
  2. 不重复的给用户推荐

simhash算法
最开始主要是搜索引擎公司使用。

image.png

不太重要的词,设置权重为1或者-1
(每个词hash成一个整数,有jenkins算法)

BloomFilter 算法 布隆过滤器
防止重复内容。(针对内容id的去重复)

image.png


工程部分:
只想说,前面的理论是入门的个鬼,完全跪了。
看工程部分能不能不那么令人头秃


常见架构:

1. 典型信息流架构:

Activity Stream的feed架构


image.png

2. netflix个性化推荐架构:

image.png

在线任务:防止重复的过滤,简单算法逻辑,模型预测阶段,商业目标相关的过滤与调权,场景有关的逻辑,互动性强的算法。
离线任务:模型训练与推荐结果计算。
近线任务:数据来源是实时的,进入在线数据库,等到有发生请求再提供服务。(流计算,storm,spark streaning,flink,manhattan)

image.png

3. 总览推荐框架和搜索,广告的关系:

image.png

搜索:解决为精准快速的展示结果,主要目标为降低延迟与提高相关性
推荐:时间杀手,给用户展示多样性,
广告:给信息找人,带有纯粹的商业目标。

架构抽象

  1. 过滤候选:推荐系统中的召回则为过滤候选。
  2. 排序候选:排序上的差异主要是目标不一样。(排序模型:BM25,Learn to rank模型)
  3. 个性化输出:

推荐系统与搜索引擎是存在互助的。搜索累积客户兴趣,推荐满足长期兴趣。

常见模块:

1. 数据采集

数据采集:

  • 报表统计
  • 数据分析:找原因,数据质量,为什么好或者坏。知道商业推广,开发方式。
  • 机器学习:

日志的数据模型:

  • 数据属性
  • 物品数据
  • 事件
  • 关系数据

收集哪些数据:

  • 埋点
  • 业务数据库(用户,事件,事件发生时间,从什么事件而来,事件发生时用户属性,事件发生时物品属性)

用什么工具:


image.png

质量检测:

  • 完整性
  • 一致性
  • 正确
  • 及时

2.实时推荐:

需要满足:数据实时进来,实时计算,实时更新
实时流数据:kafka,storm,flink

效率提升:

  1. 剪枝:利用hoeffding不等式确认确认不用更新物品对相似度。(发现一个物品对更新次数达到最少更新次数,或者是相似度小于设定阈值,就直接判定不相似)
  2. 加窗:滑动窗口(近k次会话,近k次行为记录)
  3. 采样:短时间大量的数据
  4. 缓存:使用redis或者memcached

3. 数据驱动与实验平台:

重叠实验平台:(划分流量的方法,基于流量来做切分)

image.png
image.png
image.png

bandit算法同时可以做测试,选择不同的参数组合,策略,动态实时的跟进用户表现给出选择策略。

3. 推荐系统服务化:

效果保证:

1. 指标:

现在有多好:

  1. 评分准确度:rmse
  2. 排序
  3. 分类准确率
  4. 社交关系数量/用户停留时长
  5. 新颖性

推荐系统是否健康,能好多久

  1. 个性化:取一天的日志,计算用户推荐列表的平均相似度。
  2. 基尼系数:推荐次数越不平均,基尼系数就趋近于1
  3. 多样性。

2. 攻击方式:

image.png
image.png

防护方式:


image.png
image.png

3. 开源工具与框架:

内容分析(主题模型/词嵌入/文本分类)

image.png

协同过滤与矩阵分解

image.png

模型融合

image.png


产品部分:
扫一下就好


答题还是跪了:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容