推荐系统中的常用算法——DeepWalk算法
时间:2022-07-25
本文章向大家介绍推荐系统中的常用算法——DeepWalk算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 概述
DeepWalk算法是在KDD2014中提出的算法,最初应用在图表示(Graph Embedding)方向,由于在推荐系统中,用户的行为数据固然的可以表示成图的形式,因此DeepWalk算法也常被用于推荐系统中的item embedding的计算。Graph Embedding使用低维稠密向量的形式表示途中的节点,使得在原始图中相似(不同的方法对相似的定义不同)的节点其在低维表达空间也接近。
2. 算法思想
DeepWalk算法借鉴了word2vec算法的思想,word2vec是NLP中一种常用的word embedding方法,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。DeepWalk算法与word2vec类似,使用图中节点与节点的共现关系来学习节点的向量表示。在DeepWalk中通过使用随机游走(RandomWalk)的方式在图中进行节点采样来模拟语料库中的预料,进而使用word2vec的方式学习出节点的共现关系。
2.1. RandomWalk
RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件,其算法思想如下所示:
其代码大致如下:
def deep_worker(self):
for _ in range(self.nums):
for node in self.G.nodes():
self.node_series.append(self.random_walker(node))
def random_walker(self, first_node):
series = [first_node]
for _ in range(1, self.walk_length):
nodes_list = list(self.G.adj[first_node])
first_node = random.choice(nodes_list)
series.append(first_node)
return series
2.2. word2vec
word2vec的基本原理不再在本文中详细给出,可以参阅其他的一些材料,Python下可以通过gensim里的Word2Vec实践:
from gensim.models import Word2Vec
w2v_model = Word2Vec(walks,sg=1,hs=1)
参考文献
- Perozzi B, Alrfou R, Skiena S. DeepWalk: online learning of social representations[J]. 2014:701-710.
- DeepWalk源码
- 《DeepWalk: Online Learning of Social Representations》笔记
- C实现的DeepWalk
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go 多版本管理
- 空谈分布式系统设计之幂等性
- 空谈发件箱模式(outbox pattern)
- 《一起学sentinel》六、Slot的子类及实现之FlowSlot和DegradeSlot
- Hive UDF/UDAF 总结
- 3分钟短文:用Laravel发一封“漂洋过海”的电子邮件
- leetcode之单词替换
- KMP算法分析
- Spring Boot 系列:最新版优雅停机详解
- 前端学数据结构与算法(八): 单词前缀匹配神器-Trie树的实现及其应用
- 突击并发编程JUC系列-Locksupport 与 Condition
- 01.视频播放器框架介绍
- C#扫描器编写各种问题荟萃
- JavaScript中的浅拷贝与深拷贝
- 自己实现一个VUE响应式--VUE响应式原理