花名:越祈

部门:算法中心搜索策略组

入职时间:2017/06/01

主要从事蘑菇街推荐算法相关研发工作

蘑菇街是一家社会化导购电商平台,推荐一直是其非常重要的流量入口。在电商平台中,推荐的场景覆盖到用户浏览行为和交易的各个环节,如搜相似、商品详情页、购物车、订单和支付等。传统的itemCF、关联规则、simirank、swing等推荐相似召回技术也广泛应用于推荐各个场景中。在电商场景,计算商品和商品、用户和商品之间的相似性是一个非常重要的课题,但是受限大部分数据是稀疏,传统的关联规则,simirank等并不能很好的解决。按照前期的经验,在数据充足的头部热门商品上,各相似算法的效果相差不大,但在中部和长尾商品,效果差别明显。并且,受限于计算规模,在关系链上很难建立大于3跳的关系,故商品间的相似性关系表达也受限。

Embedding技术具有实现简单,表达能力强等优点,在一定程度上能有效解决上述问题。目前,团队小伙伴共同尝试了word2vec、node2vec以及基于点击行为的监督式模型。目前,线下评估效果和线上实验效果均有不错提升。其中原生的word2vec,偏向热门商品和类目相似,不符合预期。node2vec对比基线有提升,但是node2vec依赖随机游走的策略,比较耗资源,目前效果不如监督模型。本文重点描述监督式模型的Embedding在商品详情页推荐召回的试验结果。

1. 输入数据

(1)? 预训练好的商品向量:使用图像向量作为预训练好的商品向量输入模型,商品图像向量为512维,直接放入模型中容易撑爆内存,容易导致模型训练失败。使用sklean.decomposition.TruncatedSVD,首先将512维的图像向量降维到256维,再作为模型输入。

(2)? 用户N天点击数据:用户点击商品pair对作为正样本,label为1,随机构造用户未点击商品pair对作为负样本,label为0,正负样本比例为1:3。

2. 基础模型

预训练好的商品向量经过全连接层后维度与用户向量维度相同。经过全连接后的商品向量与用户向量矩阵相乘,并在axis=1维度上求和得到相关分,并加上偏差项。最后经过sigmoid_cross_entropy_with_logits计算得到loss。

整个模型思路简单,训练完成后,可以输出用户向量和商品向量。且后期能在多个环节上进行模型优化,如可以把矩阵相乘变成网络结构进行尝试。此外,用户向量是随机初始化,可以使用用户偏好、用户画像等更好的表示用户向量。

1. auc评估

1.1 评估数据

评估数据总共4列,分别为:用户id,用户点击序,详情页推荐场景用户点击/曝光商品,标签label(1为用户点击,0为曝光未点击)

?

1.2 评估结果

(1)监督模型商品向量比node2vec向量auc评估要高,相对提高约5%;

(2)监督模型商品向量&用户向量,比单独使用商品向量auc评估高,相对提高约1%;

(3)一天未更新向量,监督模型和node2vec商品向量,auc稳定;

(4)一天未更新商品向量和用户向量,由于用户行为变化较大,auc略微下降;

?

1.3 评估商品向量头部热门、中部和尾部商品auc

(1)监督模型和node2vec模型头部商品向量差距不大;

(2)监督模型在中部和长尾商品向量auc表现更好;

2.单个case评估item2item

计算每个商品最相似的topN个商品,查看商品相关性,给出3个例子,第一个为主商品,后面为通过商品向量计算的最相似的n个商品。

3.单个case评估user2item

第一为某用户真实的点击商品,第二行为使用用户向量和商品向量计算的改用户用最关的N个商品

case1:

case2:

case3:

4. 图像向量i2i分数相关性

分别使用图像商品向量和监督模型商品向量,计算每个商品的top200相似商品,重合率为31%,pearson相关性为0.685。

5. tsne低维可视化

5.1商品向量在叶子类目下tsne两两可视化

随机抽取50个叶子类目下的所有商品,tsne可视化结果如下:(左边为监督模型生成商品向量;右边为node2vec模型生成商品向量)

从两图中可视化效果可以看出,监督模型在叶子类目上的区分度更明显,效果更好.

监督模型

非监督模型

5.2 商品向量在店铺下tsne两两可视化

随机抽取50个店铺下的所有商品,tsne可视化结果如下:(左边为监督模型生成商品向量;右边为node2vec模型生成商品向量)

从图中可视化效果可以看出,监督模型在店铺上的区分度更明显,效果更好

监督模型

非监督模型

6. 评估总结

此外,还有一些与线上真实数据的召回率、命中率、准确率等评估指标,在此不一一给出。

在商品向量覆盖上,基于图像向量的监督模型,基本能覆盖蘑菇街平台上所有商品,而node2vec只能覆盖样本中用户有行为的商品。故监督模型embedding生成商品向量无论在各项离线苹果指标上,还是商品覆盖上,均提升明显。

商品详情页推荐场景召回阶段目前主要有两个召回策略,一个是传统相似算法融合模型,另一个是使用商品向量进行扩召回。传统相似算法融合模型召回的商品曝光占比约为70%,使用商品向量扩召回的商品曝光占比约为25%,其他5%。

线上整体提升效果为,pv点击率提升约3%,uv点击率提升约1.2%,gmv分天波动较大,平均提升约4%,且根据以往经验,gmv的提升需要更长的a/b测试时间,才能看出稳定效果。

对比node2vec模型和监督模型的商品向量,进行扩召回策略,在策略维度上,整体pv点击率提升25%,uv点击率14%。

此外整体效果上和分策略效果上,曝光/点击去重商品数,以及曝光/点击叶子类目数均提升明显。

详细分析实验数据,监督模型能在商品详情页推荐召回中召回更多相同叶子类目下的商品。详细数据、指标和分析过程,由于比较敏感,在此不详细给出。

目前,还仅将商品向量应用于线上,用户向量暂时还未进行小流量实验,后续会逐步验证线上效果。

?

目前只是在召回层使用Embedding向量,更多的成本在系统改造上,商品量离线全量计算cosine相似度问题已经解决,但线上实时计算,成本较大,目前正在逐步优化改进。商品详情页同店商品推荐场景,由于同店商品候选集较少,线上实时计算目前rt可接受,故能应用于商品详情页。工程系统改造后,可应用于其他推荐场景。后续也准备在排序阶段,以及搜索排序等多个场景加入Embedding向量的应用。

在多项离线数据评估指标和线上实验数据分析结果中,也发现node2vec模型,无论是在工程上还是样本构造,和一些小的trick上,效果上有更大的优化空间。目前,团队小伙伴也在node2vec模型上进一步优化,后续可继续对比离线和线上指标效果。

在embedding技术实践于蘑菇街推荐场景过程中,其离线评估指标的建立,非常重要,能一定程度上减少线上ab小流量实验测试的成本。细致的数据分析也能为后期迭代优化提供思路。

团体同学目前尝试的宽模型,在搜索排序场景提升明显。团队还有小伙伴正在尝试序列匹配模型应用于排序,进行在线打分,工程系统上正在逐步支持和完善,目前还在ab测试期间,离线评估提升较大,也期待实际线上效果。此外,结合宽模型和深度学习模型,应用于线上,也是后续考虑的重点方向。

embedding技术的应用,还有很大空间可以进行尝试,一方面可以尝试更多的Embedding技术,如基于文本数据、基于图结构模型、self-attention机制、多目标优化等,另一方面,可以尝试更多实体的Embedding,如用户向量化表示和意图识别等。下图也包含团队当前已经完成的部分工作和后续工作的重点方向。

Item2Vec是由O Barkan,N Koenigstein在他们2016年的论文“Item2Vec: Neural Item Embedding for Collaborative Filtering“[3]中提出的。论文把Word2vec的Skipgram with Negative Sampling (SGNS)的算法思路迁移到基于物品的协同过滤(item-based CF)上,以物品的共现性作为自然语言中的上下文关系,构建神经网络学习出物品在隐空间的向量表示。雅思是什么论文中还比较了Item2Vec和SVD在微软Xbox音乐推荐服务和Windows 10商店的商品推荐的效果,结果显示Item2Vec效果有所提升。该论文关注公众号输入:论文,即可获得。

点击原文阅读,有github,基于item2vec的python实现分享。

推荐阅读:

1,推荐系统之用户行为分析

2,推荐系统系列之隐语义模型

3,深度解析京东个性化推荐系统演进史

4,案例:Spark基于用户的协同过滤算法

【转载】Emdedding向量技术在蘑菇街推荐场景的应用的更多相关文章

  1. 机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第29篇文章,我们来聊聊SVD在上古时期的推荐场景当中的应用. 推荐的背后逻辑 有没有思考过一个问题,当我们在淘宝或者是 ...

  2. 机器学习之路: python 实践 word2vec 词向量技术

    git: https://github.com/linyi0604/MachineLearning 词向量技术 Word2Vec 每个连续词汇片段都会对后面有一定制约 称为上下文context 找到句 ...

  3. [转载] Android逃逸技术汇编

    本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/ 摘    要 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉 ...

  4. WCF技术的不同应用场景及其实现分析

    这一篇文章,是总结一下WCF技术,以及基于这个技术发展出来的几个典型应用场景,并且我将尝试对这些不同的WCF实现的原理进行一些比较分析. 关于WCF这个技术的基本概念,如果你不是很清楚,可以参考一下有 ...

  5. 转载:负载均衡器技术Nginx和F5的优缺点对比

    https://blog.csdn.net/zxc456733/article/details/78861100 nginx(一) nginx详解 nginx是一个被广泛使用的集群架构组件,我们有必要 ...

  6. 转载:P2P技术原理及应用(2)

    转载allen303allen的空间 在Gnutella网络中存在以下问题: 冗余消息多,对带宽的消耗存在一定的浪费.Gnutella网络协议采用泛洪式(Flooding)消息传播机制,这种消息传播机 ...

  7. 行人重识别(ReID) ——技术实现及应用场景

    导读 跨镜追踪(Person Re-Identification,简称 ReID)技术是现在计算机视觉研究的热门方向,主要解决跨摄像头跨场景下行人的识别与检索.该技术能够根据行人的穿着.体态.发型等信 ...

  8. (转载)Autodesk面试技术题解答

    Autodesk面试技术题解答 By SmartPtr(http://www.cppblog.com/SmartPtr/)          近一年以来,AUTODESK的面试题在网上是闹的沸沸扬扬, ...

  9. 【转载】Windows上那些值得推荐的良心软件-整理 easybcd 引导工具 easyuefi 引导工具

    您查询的关键词是:清理dism知乎 以下是该网页在北京时间 2019年03月17日 21:56:16 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 htt ...

随机推荐

  1. Jquery选择器大全汇总

    一.选择器 1.三个基本选择器,$("#ID") .$(".className")  .$("tagName") 2.其他选择器 //htm ...

  2. 题解 zr1212 【20WC集训】货币

    题目链接 我们给每个连通块图上一种颜色.不同的连通块涂不同的颜色. 首先,我们定义\(f_r\)表示:使\([l,r]\)包括\([1,r]\)里所有颜色的最大的\(l\). 然后我维护一个变量\(p ...

  3. webpack 命令 Module build failed (from ./node_modules/babel-loader/lib/index.js) 错误问题解决方案

    在项目中运行的时候出现报错,错误为Module build failed (from ./node_modules/babel-loader/lib/index.js) 解决方案: 控制台输入  np ...

  4. SpringIOC初始化过程源码跟踪及学习

    Spring版本 4.3.2,ssm框架 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 web.xml <!--配置获取项目的根路径,java类中使用System.getProperty ...

  5. 页面的html调试

    点击页面按下键盘的F12,或者鼠标右键选择检查(N) 会弹出一个窗口,这个窗口就是调试窗口 如上图所示,第一个图标是标签元素选择器,点击使用后,在页面上移动,会在Elements的区域找到你鼠标选中的 ...

  6. 新闻类网站的通用爬虫--GNE

    GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容.标题.作者.发布时间.正文中的图片地址和正文所在的标签源代码.GNE在提 ...

  7. Spring的JDBC的使用(配置和CRUD)

    导包: Spring的JDBC模板的使用 一.默认连接池 创建数据库 create database spring4; use spring4; create table account(id int ...

  8. 简述DDD,战略设计

    从What.How.Why三个层面进行了梳理. What:DDD是什么?DDD是用来解决软件复杂度的问题,是一种软件思想. Why:为什么DDD可以解决软件复杂度?对于规模造成的复杂度,可以借助限界上 ...

  9. Kafka--初识Kafka

    前言 数据为企业的发展提供动力.我们从数据中获取信息,对他们进行分析处理,然后生成更多的数据.每个应用程序都会产生数据,包括日志消息,度量指标,用户活动记录,响应消息等.数据的点点滴滴都在暗示一些重要 ...

  10. 3 —— node —— 文件追加内容

    思想 : 先读取 , 再追加 const fs = require('fs') fs.readFile("./hello.txt","utf-8",(err,d ...