Line 算法与deepwalk的对比 和个人理解
用户的关注关系本身就是一个图结构,要从用户关注关系生成用户的embedding表示,其实就是做graph的emebding表示。
deepwalk+word2vec 比较简单,效果也还可以。这种方法再此不再介绍。
接下里记下我对line算法的一些理解。
先说line算法要解决的问题。
1、需要能够表示有向图。
2、能够体现节点的权重,边的权重。节点的权重论文中使用了节点的出度作为节点的权重。
3、能够体现节点的结构相似性,其实就是有相似的上下文。这个line算法分别提出了一阶相似和二阶相似。
接下来详细说说一阶和二阶相似性。
其中一阶相似是指直接有边相连的节点i,j 。用i节点的向量推出j节点向量的概率有多大。如果i和j没有边相连接,则一阶相似性为0。如果对应于用户的关注关系组成的图的话,这个其实就是好友间的相似。还需要指出的是一阶对于边直接认为是无向图的边,不考虑方向性。对于用户间一阶相似性的边权重可以通过用户间互动行为,统计出来一个亲密度。
二阶相似性,为了解决一阶相似没有考虑朋友的朋友间的相似性,而提出的。这种朋友的朋友之间的相似性是通过给每个顶点增加一个上下文向量来实现的。一个顶点有两个向量分别是上下文向量和本身的节点向量。上下文向量是说一个节点可以作为其相邻节点的上下文。两个不直接相连的节点越相似,也就是说他们的共同上下文节点越多,也就是他们的共同好友越多。
二阶相似性,会考虑边的权重,和节点的权重。论文中节点的权重使用节点的出度。
line算法与deepwalk的对比:
line考虑了边的权重,二阶相似还会考虑有向图的情况,类似单向的关注关系。
line算法在实现和训练过程中优化:
line算法定义了一阶和二阶相似的经验概率,就是从i节点推出j节点的经验概率,如何算。然后对于一阶的话是直接i节点向量和j节点向量来算,但是对于二阶需要计算softmax,softmax分母需要计算所有节点的上下文向量与节点i向量的点乘概率,直接算复杂度高。
line算法的代价函数是经验概率与计算的概率之间的KL散度,KL散度的优化其实等价于交叉熵。这一步存在的问题是代价函数会乘以权重。如果权重的方差比较大,那么这个训练就很成问题了。
对于计算softmax的问题,当然还是和训练word2vec时候一样通过选一些负样本,对负样本做采样来解决。在采样的时候使用alias算法减少时间复杂度。
解决权重系数对梯度传到的影响(乘系数之后会导致梯度特别大或者梯度特别小),通过对边按照权重进行采样来解决。采样之后就不需要乘权重了。
其实负采样和过采样的采样比例其实也等同于对这种类型的样本乘以系数。不过我的疑问就是这样采样之后有些边就不参与训练了吧。
存在的问题:
line的一阶和二阶向量是分开训练的,一阶向量和二阶向量如何结合。论文给出的方法是直接拼接起来,然后给一阶和二阶不同的权重。
line虽然考虑了一阶和二阶。但是也只是到邻居的邻居。对于有些节点边比较少,这种如何更好的训练。论文中提出了一个增加边的方式,构造些邻居的邻居之间的边,以及设置边权重的方式。
算法效果:
在稀疏数据上 line的一阶比二阶要好,增加邻居到邻居的边之后对效果有所提升。边比较多的话,一阶和二阶结合比单独使用一阶和二阶效果要更好。
Line 算法与deepwalk的对比 和个人理解的更多相关文章
- 算法的时间复杂度 & 性能对比
算法的时间复杂度 & 性能对比 累加算法性能对比 // js 累加算法性能对比测试 const n = 10**6; (() => { console.time(`for`); let ...
- NDT(Normal Distribution Transform) 算法(与ICP对比)和一些常见配准算法
原文地址:http://ghx0x0.github.io/2014/12/30/NDT-match/ By GH 发表于 12月 30 2014 目前三维配准中用的较多的是ICP迭代算法,需要提供一个 ...
- C++ 标准模板库(STL)——算法(Algorithms)的用法及理解
C++ STL中的算法(Algorithms)作用于容器.它们提供了执行各种操作的方式,包括对容器内容执行初始化.排序.搜索和转换等操作.按照对容器内容的操作可将STL 中的算法大致分为四类: (1) ...
- c#泛型与其他语言的对比(深入理解c#)
1.同c++模板的对比: c++模板有点像是发展到极致的宏.他们非常强大,但代价就是代码膨胀和不易理解. 在c++中使用一个模板时,会为那一套特定的模板实参编译代码,好在模板实参本来就在源代码中一样. ...
- 关于Eratosthenes筛子算法筛选小于n的素数的理解
今天在学习Java核心技术第九章集合框架中的BitSet时,遇到了这个算法.Eratosthenes筛子算法时一个查找素数的方法,这并不是查找素数的最好方法,但是测试编译程序性能的一种流行的基准. 一 ...
- Hash算法及java HashMap底层实现原理理解(含jdk 1.7以及jdk 1.8)
现在很多公司面试都喜欢问java的HashMap原理,特在此整理相关原理及实现,主要还是因为很多开发集合框架都不甚理解,更不要说各种其他数据结构了,所以造成面子造飞机,进去拧螺丝. 1.哈希表结构的优 ...
- 动画演示Sunday字符串匹配算法——比KMP算法快七倍!极易理解!
前言 上一篇我用动画的方式向大家详细说明了KMP算法(没看过的同学可以回去看看). 这次我依旧采用动画的方式向大家介绍另一个你用一次就会爱上的字符串匹配算法:Sunday算法,希望能收获你的点赞关注收 ...
- 纯Html+Ajax和JSP两者对比的个人理解
最近写个人web,用jsp+servlet做,突然想到一个问题:html+ajax似乎和jsp实现效果一样:那么,两者到底有什么区别呢? 这里参考老猿的一段话: 全站ajax会维护大量的js代码,如何 ...
- 算法系列001---dfs|多叉|解空间树理解
1.研究范围 1)多叉树,图的遍历 2)回溯法的解空间树=多叉树的遍历 2.研究方法 我们现在研究的是多叉树的遍历,突然想到为什么不能直接用二叉树的遍历方法呢?我们抱着这个问题,先找到多叉树的结构不同 ...
随机推荐
- 微信小程序tabBar的一个小坑
开始接触微信小程序的项目开发时,自己想添加底部导航,按照文档的方法在app.json添加tabBar,结果编译不出,工具台也没错误提示. 尝试在网上搜一下,看到有碰到类似情况的,解决方法是:app.j ...
- Qt编写数据可视化大屏界面电子看板2-配色方案
一.前言 做完整个数据可视化大屏界面电子看板系统后,为了提升点逼格,需要提供好几套默认的风格样式以供选择,这样用户可以选择自己喜欢的配色方案来作为整个系统的颜色方案,去看了下市面上大部分的大屏电子看板 ...
- openstack核心组件--cinder存储服务(6)
一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系 ...
- Springboot--关于使用webapp目录
前我在学习springBoot集成springMVC的时候发现webapp目录, 1. 直接右键运行,访问不到页面,原来并不是不支持啊,只是默认没有把它放在编译路径里面. 我们可以在项目的packag ...
- 【Abode Air程序开发】Flex air文件打包和运行
1 安装Adobe AIR 运行时,和java的JVM类似. Adobe AIR 运行时允许在桌面运行AIR应用程序,脱离游览器的束缚. 下载安装文件http://get.adobe.com/cn/a ...
- 在vue中使用Normalize初始化样式
参考链接:https://www.jianshu.com/p/34533b45aac1
- java面试指导2019-9-10
11. Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一 ...
- Jboss: Using reverse path on top path: /xxx
环境 jboss 5.2 原因 加载资源的协议错误.一般在加载文件的时候,URL 都是以 file: 开头,但是在 jboss 上时,由于其虚拟化了路径,导致协议不一致,并且找不到外部的配置文件. 分 ...
- _variant_t 与其他数据类型的转换
在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作方法: _com_error:定义抛出的error对象; _com_ptr_t:封装COM接口指针 ...
- 安装laravel框架
方式一:Windows版本通过composer来下载安装laravel框架 一:laravel是php的一个web框架.laravel框架安装主要依赖composer工具,本经验就介绍一下怎么在win ...