最近碎片时间看七个世界,一个星球,不亏是9.9分的纪录片啊,敬畏自然,敬畏生命。真想以后有时间多出去走走,不过还是要有眼前的苟且…… (写于凌晨00:26,哭) 如果图挂了,请移步知乎:https://zhuanlan.zhihu.com/p/90783845


参考博客和文献

zhuanlan.zhihu.com/p/64

zhuanlan.zhihu.com/p/63

作者源码 github.com/aditya-grove

业内解决方案

手淘的embedding方案:

zhuanlan.zhihu.com/p/32

阿里凑单算法:

zhuanlan.zhihu.com/p/33

阿里巴巴分布式图神经网络的实现:

github.com/alibaba/eule

一句话概括

n2v这些图的算法,本质上就是特征提取器!!!特征提取器!!!特征提取器!!!对graph进行采样(Sampling),对采出来的序构建模型(Embedding),最终把节点转化为特征向量,即embedding。

图算法的优势

graph是对复杂的连接关系建模,通过用户行为序列,能够更好地学的items的高阶相似关系。

同时,在构建数据集的过程中,能够让长尾商品获得更多的训练,弥补数据稀疏的问题,有效提升覆盖率。

Deepwalk

14年KDD:《DeepWalk: Online Learning of Social Representations》

Deepwalk的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,得到物品的embedding。

RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件


上图出自阿里Embedding实践paper:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

(TIPS:传统的randomWalk对于B点作为起始点,下一跳走到A和E的概率是相同的,而阿里文章是加了权重的)

算法流程4步:

  1. 图a展示原始的用户行为序列
  2. 图b基于这些用户行为序列构建了物品相关图,可以看出,物品A,B之间的边产生的原因就是因为用户U1先后购买了物品A和物品B,所以产生了一条由A到B的有向边。如果后续产生了多条相同的有向边,则有向边的权重被加强。在将所有用户行为序列都转换成物品相关图中的边之后原始的deepwalk paper中是没有权重的,就是randomWalk),得到全局的物品相关图。
  3. 图c采用随机游走的方式随机选择起始点,对每个节点重新生成部分物品序列(采样)。得到局部相关联的训练数据,deepwalk将这组序列当成语言模型的一个短句,最大化给定短句某个中心词时,出现上下文单词的概率。
  4. 图d最终将这些物品序列输入word2vec模型,生成最终的物品Embedding向量。

deepwalk的跳转概率:定义为到达节点vi后,下一步遍历vi的临接点vj的概率。跳转概率和跳转节点的出边权重正相关(跳转概率 = 当前出边权重/所有出边的权重和)。

随机游走生成的所有单词序列,在语言模型的框架下可以理解为,在给定所有游走过的节点的前提下,下一个游走/访问到的节点是v_i的可能性:


假设有如下映射函数,得到节点的潜在表示(也就是后面得到的embedding,也就是抽取的节点特征)。


利用神经概率语言模型建模的知识,则deepWalk中对节点单词表达的概率建模方法就归结为以下最优化问题:

(目标函数是最大似然函数,样本|参数;使用单词来预测context;context是给定节点单词的左右两边w窗口内的单词组成;不考虑句子中context单词出现的顺序,直接最大化所有出现在上下文中单词的概率)


gamma次迭代执行deepwalk算法。每次循环中,先打乱词汇表V,生成一个随机排序来遍历所有节点。然后得到以每个节点为始节点的随机游走序列W_vi,利用语言模型SkipGram更新节点的embedding表达。

Node2vec


2016年出现的n2v,相较于DeepWalk,是通过调整随机游走权重的方法使graph embedding的结果在网络的同质性(homophily)结构性(structural equivalence)中进行权衡。

用作者的原话来理解: use flexible, biased random walks that can trade off between local and global views of the network。

具体来讲,网络的“同质性”指的是距离相近节点的embedding应该尽量近似,如图4,节点u与其相连的节点s1、s2、s3、s4的embedding表达应该是接近的,这就是“同质性“的体现。

“结构性”指的是结构上相似的节点的embedding应该尽量接近,图4中节点u和节点s6都是各自局域网络的中心节点,结构上相似,其embedding的表达也应该近似,这是“结构性”的体现。

node2vec区别于deepwalk,主要是通过节点间的跳转概率。跳转概率是三阶关系,即考虑当前跳转节点,以及前一个节点 到下一个节点的“距离”,通过返回参数p和进出(或叫远离)参数q控制游走的方向(返回还是继续向前)

节点跳转示意图如下:


其中,d_tx指的是节点t到节点x的距离,参数p和q共同控制着随机游走的倾向性。

参数p被称为返回参数(return parameter),p越小,随机游走回节点t的可能性越大,node2vec就更注重表达网络的结构性

参数q被称为进出参数(in-out parameter),q越小,则随机游走到远方节点的可能性越大,node2vec更注重表达网络的同质性,反之,当前节点更可能在附近节点游走。

TIPS:

在阿里的博客中,说了一种问题:在训练embedding时候,负采样策略要根据item出现频率采样,但是不同于语言模型中单词的频率分布那样是近似不变的,item出现的频次与zipf并不完全吻合,不同时间段的数据间也呈现一定的波动趋势,针对这个现象,阿里采用边训练边统计每个item的出现频次,维护一个能够按照item出现频次生成负样本的动态采样器。这个思路挺不错的,考虑最近实现一下。

Node2vec伪代码分析

整体分三步:

  1. 计算转移概率矩阵,即构建全网转移概率图。

(preNode, curNode, [curNode所有邻居dstNode的跳转概率] )

  1. 采样,生成训练样本序列
  2. 梯度下降优化

维度d,每个节点生成r个长度为l的语料序列。上下文context长度为k。

start node : u

初始节点u和它的邻域表示:{u,s4,s5,s6,s8,s9}

u的邻域:$N_s(u)=(s_4,s_5,s_6,s_8,s_9)$

walk是节点u生成的随机游走的样本结果集。为了便于说明,上下两个伪代码框分别从0开始编号。

第5行到第8行对每个顶点进行r轮游走,生成长度为l的顶点序列,保存在集合walks中。

第9行是做梯度下降优化。推荐使用负采样

node2vecWalk部分的第1步是初始化序列walk,只需注意此时walk已经包含了两个元素[pre, curr],然后进行l步n2v游走。第3行获取walk中上一步的节点作为当前节点curr,…剩下就没有难度了。

注意,在GetNeighbors中,对于当前节点curr,可以对所有邻居采样,再计算。

代码写得很清楚,只需要注意构建图的时候,对每个节点先走一步,产生(prevNodeId ,currentNodeId) 这个itempair,在调用node2vecWalk,对currentNodeId走l轮,产生(item1,item2,item3..)

如何评价n2w的效果

n2w的结果是每个节点的embedding表示,无法直接评价效果,需要结合具体项目。

例如我司item分类,利用得到的item embedding,结合item 的label,训练一个分类器,根据分类器的常用指标,间接评价embedding效果。

所以单纯的说n2w的结果好坏是没有意义的,节点序列生成策略、Node2Vec网络的隐层维度、分类器的选型和参数,均影响分类结果的指标。

推荐场景中,商品的“同质性”和“结构性”的理解

这里要感谢

王喆

大佬,从微观扫描和宏观扫描的角度解释,我就直接总结了:

同质性指的是距离相近节点的embedding应该尽量近;

结构性”指的是结构上相似的节点的embedding应该尽量接近;

两者在n2v中通过跳转概率控制。

原文解释:宽度优先搜索(BFS) 反映结构性;深度优先搜索(DFS)反映同质性

所以原文中p越小,越容易返回,一直在起始点周边震荡,微观搜索,发现节点处于中心还是边缘,结果越反映结构性,q越小,越容易往远处走,进行更广范围的搜索,才能发现不同“群体”的节点之间的相似性,才能更加体现宏观的同质性

  1. 同质性相同的物品很可能是同品类、同属性、或者经常被一同购买的物品,而结构性相同的物品则是各品类的爆款、各品类的最佳凑单商品等拥有类似趋势或者结构性属性的物品
  2. 用户集中浏览时的商品同质性高,例如详情页相关商品推荐;各入口屏的商品结构性相似高,例如app首页、子频道首页推荐商品?

有向图?无向图?

假设有[i1,i2,w],有向图i1和i2是有顺序的,只记录item1 ->item2的关系[i1,i2,w],而无向图中,两个方向都要有i1->i2, i2->i1,即[i1,i2,w]和[i2,i1,w]

目前我司使用无向图来产生embedding,使用有向图会是计算量大大提升,离线效果暂时没有提高多少。

p,q的调参

离线尝试了一周,因为和w2v是紧密相连的,还不知道怎么评测生成embedding的好坏,只能感官的从生成的虚拟语料集看相邻的item之间的关系。

目前考虑为了让较相似的商品在序列中距离较近,p设了一个较大值,q<1,还是能和相反情况有少许区别的。

不知道各位看官有没有什么评测、调参经验,可以分享一下,非常感谢!

(码字不易,调格式更不易…)

从入门DeepWalk到实践Node2vec相关推荐

  1. Dubbo入门(2) - 简单实践

    作者:不洗碗工作室 - Marklux 出处:Dubbo入门(2) - 简单实践 版权归作者所有,转载请注明出处 在了解什么是分布式框架之后,我们需要上手实践一下,来了解整个系统是如何运作起来的. 本 ...

  2. python编程入门指南 明日科技-python从入门到项目实践明日科技三剑客书籍视频...

    ┃ code(实例源码) ┃ ┃ 03.rar ┃ ┃ 04.rar ┃ ┃ 05.rar ┃ ┃ 06.rar ┃ ┃ 07.rar ┃ ┃ 08.rar ┃ ┃ 09.rar ┃ ┃ 10.rar ...

  3. asp.net从入门到精通配套课件_MATLAB从入门到算法实践第八期本周六直播

    推荐Matlab算法经典课程,此课程已经经过7次升级和打磨,累计超过3000多人学习,想从零基础入门和想提高Matlab编程水平的同学推荐加入学习. 讲师介绍 董辰辉 Matlab 畅销书主编.上市公 ...

  4. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统

    注:欢迎关注datawhale:https://datawhale.club/ 系列: 知识图谱入门一:知识图谱介绍 知识图谱入门2-1:实践--基于医疗知识图谱的问答系统 知识图谱入门2-2:用户输 ...

  5. python从入门到精通 明日科技 电子书-python从入门到项目实践 (明日科技) 配套视频教程+源码...

    <Python 从入门到项目实践>从入门学习者的角度出发,通过简洁有趣的语言.丰富多彩的实例.挑战大脑的任务.贴近开发实战的项目,循序渐进地让读者在实践中学习,在实践中提升实际开发能力. ...

  6. Python人脸识别——从入门到工程实践

    参考书籍:<Python人脸识别从入门到工程实践> 全书共8章: 第 1 章:介绍了人脸识别的基础知识和必备常识: 第 2~4 章:详细讲解了与人脸识别相关的数学.机器学习.计算机视觉.O ...

  7. Web 前端从入门菜鸟到实践老司机所需要的资料与指南合集

    http://web.jobbole.com/89188/ 2016 – 对于未来五年内Web发展的7个预测 2015 – 我的前端之路:从命令式到响应式,以及组件化与工程化的变革 怎么成为一名优秀的 ...

  8. python入门与提高实践 老男孩_跟老男孩学Linux运维:MySQL入门与提高实践

    第10章 MySQL数据库日志知识与企业应用实践 10.1 MySQL常用日志文件知识 10.2 错误日志的介绍与配置 10.3 普通查询日志的介绍与配置 10.4 二进制日志的介绍与配置 10.5  ...

  9. 【Python刷题篇】Python从0到入门4|字典复习、函数入门、综合实践

    Python从0到入门3目录 前言 Q1:字典复习-首都 Q2:函数入门-求差 Q3:函数入门-牛牛的朋友 Q4:综合案例:自动售卖饮料机 Q5:综合案例-被8整除的数字 Q6:综合案例-披萨店的订单 ...

最新文章

  1. python 执行vba脚本_用python批量执行VBA代码
  2. javascript笔记:深入分析javascript里对象的创建(上)续篇
  3. AWS — Nitro System
  4. Java 14 Hotspot 虚拟机垃圾回收调优指南!
  5. ★Linux磁盘配额的使用 ★——牛刀小试
  6. 数据结构之优先队列:最小索引优先队列,Python代码实现——15
  7. 剖析疫情环境下的国内云市场:大势所趋,正是大展拳脚的好时机!
  8. C 语言实例 - 斐波那契数列
  9. 有标号的DAG计数 II
  10. chattr使用解释
  11. Spring Boot 项目优化和Jvm调优 (楼主亲测,真实有效)
  12. 年轻人,在公司混日子,伤害的是自己!
  13. 【转载】华为荣耀V9的手机录屏功能如何开启
  14. 短视频开发,录制视频添加背景音乐功能实现
  15. 建筑业营业税改征增值税调整的通知(二)〔2018〕392号
  16. unity 获取多个坐标点的中心点
  17. 如何用机器学习算法计算特征重要性
  18. 国民技术GPIO配置推挽输出模式
  19. html5订货系统,order-admin
  20. 数据库与数据仓库的区别

热门文章

  1. BusyBox移植与新增命令
  2. 【愚公系列】2023年06月 攻防世界-Web(babyweb)
  3. 01星球第二天 2023/2/28
  4. shiro详解-shiro史上最全学习笔记
  5. 代码保护软件VMP逆向分析虚拟机指令:VMP代码的提取
  6. 已解决实现心型图案时报错TypeError: ‘float‘ object cannot be interpreted as an integer
  7. 【双目视觉】双目立体匹配
  8. 让字符码跟着迈克杰克逊一起舞蹈,致敬天王经典舞蹈
  9. 网页被重新刷新(网址后面自动添加了?)
  10. 神犇营-my1088-麻将游戏