在推荐领域,我们常常会遇到冷启动的问题,这可能在所有的推荐项目中或多或少都会涉及。对于该问题,通常的解决方法如下:

  • ①(提供非个性化的推荐)比如先推荐热门排行榜,收集一定用户数据后,再进行个性化推荐;

  • ②(用户冷启动)利用注册时的用户信息粗粒地个性化推荐;

  • ③(用户冷启动)使用用户注册登录后对某些物品进行反馈的兴趣信息进行个性化推荐。;

  • ④(物品冷启动)对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户;

  • ⑤(系统冷启动)引入专家的知识,迅速建立起物品的相关度表。

第1、2条非推荐冷启动,只是一种通常做法;第3条需要用户自己填写关键信息,体验比较差,而且大部分数据缺失(用户不愿意填写);第5条不予考虑,专家知识一是很难获取,二是个性化不够。

第4条则有点像我们今天要解决的问题,只不过传统的方法需要大量喜欢过相似物品的用户。而我们所设定的环境是在只有很少数据的情况下做启动数据集,这种少量数据学习能力来自于人类。

人类非常善于抽象的学习,比如我们看了一只鸭和一只鹅,被告知这是鸟类。再看到一只山鸡(第一次看),就大致的猜到同样属于鸟类。人类先对于鸭子这种具体动物进行学习,并进行高维抽象,抽象出来的特征可能是满足长脖子小脑袋,细腿的就可以归为鸟类了。人类对于动物的这种学习能力的整个过程可以归纳成神经网络训练模式:

训练阶段,在训练集中随机抽取 C 个类别,每个类别 K 个样本(总共 CK 个数据),构建一个meta-task,作为模型的支撑集(support set)输入;再从这 C 个类中剩余的数据中抽取一批(batch)样本作为模型的预测对象(batch set)。即要求模型从 CK 个数据中学会如何区分这 C 个类别,这样的任务被称为 C-way K-shot 问题。

训练过程中,每次训练(episode)都会采样得到不同 meta-task,所以总体来看,训练包含了不同的类别组合,这种机制使得模型学会不同 meta-task 中的共性部分,像如何提取重要特征及比较样本相似等。通过这种学习机制学到的模型,在面对新的未见过的任务时,也能较好地进行分类。

我们将尝试用什么方法进行训练或者学到特征呢?最近几年的小样本学习(Few shot Learning)研究主要分为三个类别:

  • Model Based:模型结构上想办法,最早利用记忆单元(RNN),后来发展到记忆网络,专门用一种结构来存储“确定”的特征。

  • Metric Based:可以用不太精确的话总结——找相似点、找差异化。为了度量动物或物体的相似和差异,所以才有了metric说法。

  • Optimization Based:学习的是一个模型参数是如何更新的。

根据我们任务的特点决定先使用metric based方法进行尝试。

在内容个性化推荐这个案例上做一些步骤分解和实验。

① 对于如何获取,初始的少量样本集我们请九名其他项目组的同事帮忙标注,简单来说,就是让他们在观看了感兴趣文章之后进行了点击的动作,并记录了点击动作。

② 将用户和搜索字段进行交叉组合,这里为简化整个模型表示,将搜索字段和内容的标签进行组合。这样总共得到四十九类,我们从中挑出来十九类作为测试集,在剩下的三十类中训练模型。

③ 模型结构:使用方案为三层模型,用该模型做一般方法的模型测试,将结果和我们的少样本学习模型进行对比。

1. 数据

1.1 样本标注

用户在聚合搜索demo上不同query下的浏览点击行为;

在每个query返回的新闻中,被点击的新闻标记为1;

未点击且新闻的位置位于任意一条被点击的新闻的上方,则标记为0。

1.2 字段说明

1.3 样本量

9名同事帮忙进行了标注

总样本量:756

1.4 样本划分

array([‘2_健康养生’, ‘2_娱乐’, ‘2_游戏’, ‘2_财经’, ‘2_教育’, ‘2_文化’, ‘2_科技’, ‘2_社会’, ‘2_母婴育儿’, ‘3_娱乐’, ‘3_时事’, ‘3_游戏’, ‘3_财经’, ‘3_科技’, ‘3_社会’, ‘4_健康养生’, ‘4_娱乐’, ‘4_时事’, ‘4_游戏’, ‘4_财经’, ‘4_教育’, ‘4_文化’, ‘4_科技’, ‘4_社会’, ‘4_母婴育儿’, ‘5_健康养生’, ‘5_娱乐’, ‘5_时事’, ‘5_游戏’, ‘5_财经’, ‘5_教育’, ‘5_文化’, ‘5_科技’, ‘5_母婴育儿’, ‘5_社会’, ‘8_娱乐’, ‘8_财经’, ‘8_科技’, ‘8_母婴育儿’, ‘9_游戏’, ‘9_社会’, ‘10_健康养生’, ‘10_财经’, ‘10_文化’, ‘10_科技’, ‘10_社会’, ‘13_游戏’, ‘13_财经’, ‘7_科技’], dtype=object)

uid+query组合总共49类,从中随机挑选19类作为测试集,在剩下的30类中训练模型。

2. 常规机器学习方案

2.1 模型

将title通过gru编码成50维的向量(采用word2vec预训练的中文embeding);

将1.2节文章与用户相关的特征与title句向量合并起来作为输入;

输出二分类预测。

2.2 训练过程

从训练集中随机抽取5类作为验证集,以验证集roc auc作为指标,通过earlystopping获取最优的epoch数;

在全量的训练集上训练模型,迭代上一轮获取的最优epoch数。

2.3 模型效果

测试集样本比例: 10.08%

roc-auc: 0.7212

预测为正样本的概率分布

0.0 0.007172
0.1 0.009078
0.2 0.010963
0.3 0.012515
0.4 0.015086
0.5 0.018062
0.6 0.023171
0.7 0.055075
0.8 0.148563
0.9 0.462343

希望正样本的召回率尽可能高,但是整体准确率不低于70%,设置阈值为0.17。

正样本召回率58%,正样本准确率19%。

3. Few-shot learning

3.1 模型

左右对称的孪生网络,共享embedding层与gru层;

每一半的结构与2.1中的结构一致,分别处理support set与query set的数据;

最后将support set与query set的向量相减后连接全连接层输出,support set与query set对应的样本是否为同一类。

3.2 模型训练

在训练集中,每次随机抽取10类,并在这10类中随机抽取10个样本作为support set,并将这10类中的剩余样本作为query set;

在抽取出的每一类中排列组合support set与query set中的样本构成样本对,对应的y为两个样本是否为同类;

经过预训练,确认迭代次数(episode)为58次效果最好。

模型改进

在经典的孪生网络中,从support set中找出与query样本最接近的support样本,并以它的标签作为结果输出,这将导致模型无法输出连续的概率值,受限较多。

因为在冷启动时正样本(点击新闻)的比例较低,而我们更加关注的也是正样本,因此在support set与query set配对时,只考虑正样本support set与query样本的配对,并将正样本中匹配度最高的概率值作为预测正样本的概率输出,这样就可以计算roc-auc,并且调整阈值获取不同要求的分类器。

3.3 模型效果

测试集样本比例: 10.08%

roc-auc: 0.7932

预测为正样本的概率分布

0.0 0.148644
0.1 0.518002
0.2 0.593140
0.3 0.622962
0.4 0.639287
0.5 0.652968
0.6 0.666845
0.7 0.680736
0.8 0.707907
0.9 0.784186

希望正样本的召回率尽可能高,但是整体准确率不低于70%,设置阈值为0.65。

正样本召回率75%,正样本准确率23%。

4. 模型对比

Few-shot learning优于常规方法;

对于常规方法如果不使用online learning,产生新的用户行为时只能重新训练模型;而Few-shot learning在预测时,可以将最新的用户行为作为support set,实时利用上新的数据,提升冷启动时的模型效果。

可以看出,小样本学习的模型结果比正常模型的结果的几个指标都要好。当然因为现在的测试用样本量较少,无法准确地描述出差距。但多次实验结果表明:总体来说,小样本学习模型,在样本量比较匮乏的情况下,是优于一般模型的。

5. 改进方向

  • encode文章title时使用预训练的bert

  • 挖掘更多用户行为与文章相关的特征

  • 优化Few-shot learning中的交叉验证方案

6 参考文献

[1] Oriol Vinyals’ talk on “Model vs Optimization Meta Learning”
[2] Gregory Koch, Richard Zemel, and Ruslan Salakhutdinov. “Siamese neural networks for one-shot image recognition.” ICML Deep Learning Workshop. 2015.
[3] Oriol Vinyals, et al. “Matching networks for one shot learning.” NIPS. 2016.
[4] Flood Sung, et al. “Learning to compare: Relation network for few-shot learning.” CVPR. 2018.
[5] Jake Snell, Kevin Swersky, and Richard Zemel. “Prototypical Networks for Few-shot Learning.”CVPR. 2018.
[6] Adam Santoro, et al. “Meta-learning with memory-augmented neural networks.” ICML. 2016.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).
[8] Tsendsuren Munkhdalai and Hong Yu. “Meta Networks.” ICML. 2017.
[9] Sachin Ravi and Hugo Larochelle. “Optimization as a Model for Few-Shot Learning.” ICLR. 2017.

个性化推荐系统设计(2.2)——Few-shot Learning用于冷启动的探索相关推荐

  1. 计算机配件推荐系统论文摘要,个性化推荐系统设计

    内容简介: 个性化推荐系统设计,毕业设计,共65页,29540字,附外文翻译. 摘要 个性化推荐系统根据用户的历史数据,利用推荐算法向他们推荐可能感兴趣的商品.协同过滤(CF)是目前研究最多.应用最广 ...

  2. 141.如何个性化推荐系统设计-1

    141.1 什么是个性化推荐系统? 个性化推荐系统就是根据用户的历史,社交关系,兴趣点,上下文环境等信息去判断用户当前需要或潜在感兴趣的内容的一类应用. 大数据时代,我们的生活的方方面面都出现了信息过 ...

  3. 143.如何个性化推荐系统设计-3

    143.1 算法介绍 协同过滤算法 协同过滤(Collaborative filtering, CF)算法是目前个性化推荐系统比较流行的算法之一. 协同算法分为两个基本算法:基于用户的协同过滤(Use ...

  4. 142.如何个性化推荐系统设计-2

    142.1 离线训练 离线训练流程 如何线上实时反馈特征? 在线计算,与曝光日志一起上报,离线直接使用 如何解决曝光不足问题? 使用CTR的贝叶斯平滑(CTR = 曝光次数 / 点击次数) 所有新闻自 ...

  5. 个性化推荐系统设计(3.1)——如何评价个性化推荐系统的效果

    准确率与召回率(Precision & Recall)   准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量.其中精度是检索出相关文档数与检索出的文档总数的比率 ...

  6. 智能个性化推荐系统设计

    推荐系统构成 * 召回层 - 对海量的数据进行召回 * 排序层 - 对召回后的数据进行排序,排序结果返回给用户 推荐系统架构  基于物品的推荐系统架构  基于用户的推荐系统架构

  7. 【阅读笔记】联邦学习实战——联邦个性化推荐案例

    联邦学习实战--联邦个性化推荐案例 前言 1. 引言 2. 传统的集中式个性化推荐 2.1 矩阵分解 2.2 因子分解机 3. 联邦矩阵分解 3.1 算法详解 3.2 详细实现 4 联邦因子分解机 4 ...

  8. 一种基于机器学习的电影推荐系统设计

    摘 要 在互联网时代下,信息量呈指数级增长.海量数据以0.1 方式编码存放在磁盘等设备中非常方便,但是对于人类来说,我们的脑容量有限,在海量数据中挑选出适合自己的信息变得非常困难.简直如大海捞针,即使 ...

  9. 爱奇艺火爆的背后,个性化推荐排序是如何配合的?

    作者:Michael,推荐算法助理研究员,2014年硕士毕业于北京邮电大学后加入爱奇艺.从事推荐算法的研发和管理工作,对于机器学习和深度学习在推荐上的应用有着丰富的经验. 在当前这个移动互联网时代,除 ...

最新文章

  1. 系列文章丨AlphaGo Zero, 对普通人来说意味着什么?
  2. 漫谈九品中正制和现阶段阶层分层
  3. linux相关系统下qtcreator调试程序
  4. bpython_Python机器学习(入门)
  5. 九.jmeter性能测试基础实践(1)
  6. 比较nio大体上优于io的方面
  7. 常见移动机器人轮直径校准
  8. 音频特征-梅尔频率倒谱系数(MFCC)详解
  9. Object类中的wait()和notify()
  10. 车牌号识别系统(carOR)
  11. tensorflow pb ckpt pbtxt
  12. vue引用echarts
  13. 尝试Python的websockets库的最基础功能
  14. 软件测试工程师面试如何做好自我介绍?
  15. 关于submit() 对象不支持此属性或方法的解决方法
  16. 基础爬虫实战案例之获取游戏商品数据
  17. RTP PS PES ES H264协议学习
  18. 老照片修复_使用条款
  19. SSD_学习笔记记录
  20. 5个高质量PPT模板网站,赶紧马住。

热门文章

  1. 微信小程序存在的风险_微信小程序存在哪些风险
  2. 计算机毕业设计之java+springcloud基于vue的智慧养老平台-老人信息管理-敬老院管理系统
  3. 自己动手编译Android 8.0源码
  4. 89岁,他拿下人生第三个博士学位
  5. vue3 预览docx文件
  6. [Android 之美] 那些你不知道的APK 瘦身,让你的APK更小
  7. 初识iPhone基带通讯
  8. 非磺化花菁和磺化花菁有机染料Cyanine dyes的说明应用
  9. 怎么攻击天猫商家 java,天猫店铺被恶意攻击,大家看看是怎么做的。
  10. 原生Ajax五个基本步骤(面试题)