基于局部敏感哈希的并行矩阵分解计算实现方法与流程

文档序号:18869845发布日期:2019-10-14 19:16阅读:203来源:国知局
基于局部敏感哈希的并行矩阵分解计算实现方法与流程

本发明涉及信息推送技术领域,尤其涉及一种基于局部敏感哈希的并行矩阵分解计算实现方法。



背景技术:

近年来,随着电子商务的兴起,推荐系统得到了更为广泛的应用,同时也为推荐系统的研究注入了新的活力,例如amazon、ebay、淘宝网都采用了智能推荐系统来为用户提供个性化的推荐服务。高质量的推荐能够增加用户对网站的信任度,使用户产生依赖心理,提高用户的忠诚度。除了在电子商务领域的应用之外,随着个性化的信息服务逐渐成为web应用技术的热点,推荐系统在新闻、电影、书籍、微博等的个性化推荐中也取得了不同程度的成功。近两年来,在新兴的web应用中,社交网络(微博、twitter、facebook、googleplus)的发展尤为迅速,社交网络实际为用户提供了一个新闻发布、即时通信和在线交友的平台。

为了建立推荐系统,其需要比较不同的对象:项目与用户。现有技术中有两种主要的方法来促进这种比较分别为:邻域方法和隐藏因子模型。

邻域方法集中于计算项目之间或者用户之间的关系。基于项目的方法为基于同一用户对相似项目的评级来评估用户对项目的偏好,在某种意义上,这些方法通过将用户看作额定项目的篮子来将用户转换到项目空间。这样,我们不再需要将用户与项目进行比较,而是直接将项目与项目相关联。

隐藏因子模型,例如奇异值分解(svd),包括通过将项目和用户转换到相同的隐藏因子空间,从而使得它们直接可比较的替代方法。潜在空间试图通过描述产品和用户根据用户反馈自动推断的因素来解释评级。例如,当产品是电影时,因子可能是明显的维度,如喜剧与戏剧、动作片或动画片;不好理解的维度,如角色发展的深度;或者是完全不可理解的维度。

在结合两者的融合推荐系统模型中,不仅要计算项目的两两之间的相似度,这有着巨大但不必要的计算量;同时在单线程计算矩阵分解时十分耗时且有着部分冗余的计算量。

因此,有必要提供一种新的基于局部敏感哈希的并行矩阵分解计算实现方法来解决上述问题。



技术实现要素:

针对相关技术的推荐系统由于要计算项目的两两之间的相似度,从而有着巨大但不必要的计算量,同时由于在单线程计算矩阵分解时十分耗时且有着部分冗余的计算量的技术问题,本发明提供了一种能有效缩短计算时间、提高计算效率的基于局部敏感哈希的并行矩阵分解计算实现方法。

一种基于局部敏感哈希的并行矩阵分解计算实现方法,其包括如下步骤:

s1、根据评分矩阵计算评分平均值u,随机初始化用户偏执项bu、项目偏执项bi、用户因子pu、项目因子qi及邻域模型因子w和隐式反馈因子c,并分配cpu和gpu的内存空间;

s2、将cpu内存数据转移到gpu的全局内存;

s3、通过gpu编程语言cuda分别实现对每个项目的评分计算多次其哈希值、对哈希值都相等的项目两两计算相似度值,计算每个项目的最相似的top-k个相似项目及对bu、bi、pu、qi、w和c进行更新;

s4、根据所需精度要求确定学习速率γ以及迭代次数;

s5、迭代结束后,将gpu全局内存数据转移到cpu内存;

s6、处理结果展示。

优选的,所述步骤s3中lsh计算公式为:

其中为高维向量,为服从高斯分布的随机向量,w为桶的大小,b为服从0到w的均匀分布的随机变量。

优选的,所述步骤s3中相似度计算公式为:

其中ρij为pearson相关系数,nij为项目i和项目j都有评分的用户数目。

优选的,所述步骤s3中稀疏矩阵分解更新公式为:

bu←bu+γ1(eu,i-λ1bu)

bi←bi+γ2(eu,i-λ2bi)

pu←pu+γ3(eu,i·qi-λ3pu)

qi←qi+γ4(eu,i·pu-λ4qi)

其中:λ为防止过拟合的正则化参数,γ为每个参数的学习速率,

sk(i)为与项目i最相似的k个项目,r(u)为用户u有评分的项目,n(u)为用户u未评分的项目。

优选的,所述步骤s1中为利用malloc函数以及cudamalloc函数分别进行分配cpu与gpu内存空间。

优选的,所述步骤s2中为通过cudamemcpyhosttodevice函数将cpu内存数据转移到gpu的全局内存。

优选的,所述步骤s5中为通过cudamemcpydevicetohost函数将gpu全局内存数据转移到cpu内存。

优选的,所述步骤s5中将gpu全局内存数据转移到cpu内存后,还包括通过cudafree函数释放gpu内存空间。

优选的,所述步骤s6中处理结果展示后,还包括通过free函数释放cpu内存空间。

与相关技术相比,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法可以充分利用系统的硬件资源,从实际操作层面验证了相似度计算和融合矩阵分解模型的并行化计算方式,从而显著提升了整个推荐系统的效率,也就是说,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法通过利用基于局部敏感哈希的并行矩阵分解计算达到高效率、高稳定和高精度的要求。

附图说明

图1为本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法的流程图;

图2为图1所示步骤s3的具体流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种基于局部敏感哈希的并行矩阵分解计算实现方法,所述基于局部敏感哈希的并行矩阵分解计算实现方法通过在gpu上应用局部敏感哈希加速相似度的计算,并行实现稀疏矩阵的分解。通过在gpu上实现哈希值的计算、相似度的计算、相似度top-k计算和稀疏矩阵分解,不仅大大节省了相似度的计算时间,而且能够提高整个矩阵分解的计算效率,整个方法既能满足推荐系统的一般性要求,同时也能在增加用户和项目时快速进行扩展,且适用于多种推荐系统。

可以理解的是,在融合推荐系统模型的前提下,并行算法的目标在于最小化更新每个评分的运行时间,其工作重点在通过将密集型计算过程转移到gpu上较多线程执行来优化更新每个评分的应用程序。与cpu上多线程的融合推荐系统模型并行不同,gpu上更新可以在较cpu上百倍甚至千倍的线程上进行密度函数、平衡态分布函数以及参数计算,而且cpu和gpu上的相互通信时间代价是固定的。

请结合参阅图1。本发明提供了一种基于局部敏感哈希的并行矩阵分解计算实现方法,其包括如下步骤:

步骤s1、根据评分矩阵计算评分平均值u,随机初始化用户偏执项bu、项目偏执项bi、用户因子pu、项目因子qi(皆为f维向量,低秩f)及邻域模型因子w和隐式反馈因子c,分配cpu和gpu的内存空间;

在本实施例中,所述评分矩阵表示用户对项目(项目可以理解为具体的商品)评分,通过预先收集数据,从而构建所述评分矩阵,所述评分矩阵的构建可通过任意现有技术实现。

具体的,所述步骤s1中分配cpu和gpu的内存空间为利用malloc函数以及cudamalloc函数分别进行分配cpu与gpu内存空间。

步骤s2、将cpu内存数据转移到gpu的全局内存(globalmemory);

具体的,所述步骤s2中将cpu内存数据转移到gpu的全局内存为通过cudamemcpyhosttodevice函数将cpu内存数据转移到gpu的全局内存。

步骤s3、通过gpu编程语言cuda分别实现lsh计算内核、相似度计算内核、top-k计算内核和稀疏矩阵分解内核,所述lsh计算内核用于对每个项目的评分多次计算其哈希值,所述相似度计算内核用于对哈希值都相等的项目两两计算相似度值,所述top-k计算内核用于计算每个项目的最相似的k个相似项目,所述稀疏矩阵分解内核用于对bu、bi、pu、qi、w和c进行更新;

请结合参阅图2。具体的,所述步骤s3包括如下步骤:

步骤s3.1、对每个项目计算多次其哈希值;

所述步骤s3.1中lsh(locality-sensitivehashing)计算公式为:

其中为高维向量,为服从高斯分布的随机向量,w为桶的大小,b为服从0到w的均匀分布的随机变量。

步骤s3.2、对哈希值都相等的项目两两计算相似度;

所述步骤s3.2中相似度计算公式为:

其中ρij为pearson相关系数,nij为项目i和项目j都有评分的用户数目。

步骤s3.3、计算每个项目的最相似的top-k个相似项目;

步骤s3.4、参数更新;

所述步骤s34中稀疏矩阵分解更新公式为:

bu←bu+γ1(eu,i-λ1bu)

bi←bi+γ2(eu,i-λ2bi)

pu←pu+γ3(eu,i·qi-λ3pu)

qi←qi+γ4(eu,i·pu-λ4qi)

其中:λ为防止过拟合的正则化参数,γ为每个参数的学习速率(每个参数的学习速率不同),

sk(i)为与项目i最相似的k个项目,r(u)为用户u有评分的项目,n(u)为用户u未评分的项目。

步骤s4、根据所需精度要求确定学习速率γ以及迭代次数。

优选的,所述步骤s4中还可以加入正则化参数λ;

所述学习效率γ影响精度提升速度。

步骤s5、迭代结束后,将gpu全局内存数据转移到cpu内存;

具体的,所述步骤s5中将gpu全局内存数据转移到cpu内存为通过cudamemcpydevicetohost函数将gpu全局内存数据转移到cpu内存。

优选的,所述步骤s5中将gpu全局内存数据转移到cpu内存后,还包括通过cudafree函数释放gpu内存空间。

s6、处理结果展示。

所述处理结果展示包括对cpu内存数据进行处理并保存到输出数据文件。

优选的,所述步骤s6中处理结果展示后还包括通过free函数释放cpu内存空间。

优选的,所述基于局部敏感哈希的并行矩阵分解计算实现方法在步骤s1之前还包括:

步骤s0、搭建cuda运行环境。

具体的,所述步骤s0包括如下步骤:

s0.1、安装对应nvidia显卡驱动;

在本实施例中,采用nvidia的p100显卡。

s0.2、安装cudasdk;

s0.3、配置运行时参数。

可以理解的是,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法通过主机端(cpu)调用设备端(gpu)的内核进行计算,实现对项目哈希值的计算、相似度的计算、top-k的计算以及参数更新。而对于整个并行计算的性能指标可通过加速比以及每秒钟更新评分值进行测评,具体的计算公式如下:

并行算法加速比=串行算法运算时间/并行算法运算时间;

每秒钟更新评分数=每次迭代更新评分数*迭代次数/并行计算时间;

通过分别计算局部敏感哈希下计算相似度和矩阵分解在gpu下的加速比,最终可得出的相似度计算加速比为5.1、矩阵分解的加速度比为10。

同时另一个性能指标每秒钟更新评分数,通过不同因子低秩f和不同top-k以及不同线程的情形下进行实际计算,可以得出对应于具体的nvidia显卡而言,低秩f和k以及线程数的选取将很大影响此性能指标。特别的,在本实施例中,对于nvidia的p100显卡而言,当低秩f为128,k为256,线程数为128时,我们可得出的每秒钟更新评分数为2.15*107。这表明程序的运行性能将得到很大的提高,从而对显卡的硬件资源也得到充分的利用。也就是说,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法极大的提升了对硬件资源的利用,同时也增加了计算效率。

为了便于理解,举例而言,本实施例中采用netflix数据集,用户数为480189,项目数为17770,评分数为99072112,通过所述基于局部敏感哈希的并行矩阵分解计算实现方法更新。在nvidia的p100显卡下,当低秩为128,k为256,线程数为128时,我们每次迭代所花费的时间为4.6s。与相关技术相比,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法的效果是在达到所需精度的情况下,基于nvidiap100gpu上更新速度优于cpu更新,平均加速比为10。

本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法通过在nvidia的gpu上进行运算基于局部敏感哈希的相似度计算减少了80%以上的计算量,并且应用nvidia显卡的gpu上统一计算设备编程架构(cuda)相比较cpu上将所用时间减少了75%。

同时应用nvidia显卡的gpu上统一计算设备编程架构(cuda)实现矩阵分解时间为cpu上矩阵分解时间的十分之一。

本发明提供的基于局部敏感哈希额并行矩阵分解计算实现方法不仅可大大节省相似度的计算时间,而且能够提高整个矩阵分解的计算效率。

与相关技术相比,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法可以充分利用系统的硬件资源,从实际操作层面验证了相似度计算和融合矩阵分解模型的并行化计算方式,从而显著提升了整个推荐系统的效率,也就是说,本发明提供的基于局部敏感哈希的并行矩阵分解计算实现方法通过利用基于局部敏感哈希的并行矩阵分解计算达到高效率、高稳定和高精度的要求。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1