CN110175287A - 一种基于Flink的矩阵分解隐式反馈推荐方法和系统 - Google Patents
一种基于Flink的矩阵分解隐式反馈推荐方法和系统 Download PDFInfo
- Publication number
- CN110175287A CN110175287A CN201910426635.0A CN201910426635A CN110175287A CN 110175287 A CN110175287 A CN 110175287A CN 201910426635 A CN201910426635 A CN 201910426635A CN 110175287 A CN110175287 A CN 110175287A
- Authority
- CN
- China
- Prior art keywords
- user
- dataset
- matrix
- project
- flink
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Software Systems (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Flink的矩阵分解隐式反馈推荐方法,提出了一种基于用户活跃度与项目流行度的矩阵分解隐式反馈推荐模型,并采用一种基于单个元素坐标下降的学习方法来进行模型的训练,相对于目前流行的分配缺失值统一权重的矩阵分解隐式反馈推荐方法(WMF)而言,不仅提高了方法的预测准确率,同时降低了方法执行的时间复杂度。另外为了解决大数据环境下离线批处理过程时模型训练效率低和实时流处理场景下模型不能在线更新导致推荐精度下降的问题,本发明采用一种分块的矩阵划分策略,并采用一种路由表的策略来缓存需要通过网络传输的数据信息,使得方法能够高效并行化实现的同时,产生较小的通信开销,且该并行方法具备良好的扩展性。
Description
技术领域
本发明属于推荐系统与分布式计算的交叉技术领域,更具体地,涉及一种基于Flink的矩阵分解隐式反馈推荐方法和系统。
背景技术
推荐系统向用户提供他们感兴趣事物的个性化推荐,提供用户想要搜寻的信息。但是随着信息技术的快速发展,数据的规模剧增,工业隐式反馈推荐数据的规模已经达到百亿级别,且不断地有大量新数据产生,这对隐式推荐算法的准确率、模型训练复杂度以及模型实时更新能力都提出了巨大的挑战。随着云计算的发展,云计算平台提供了强大的并行计算能力,但是并不是所有的隐式反馈推荐算法都能够高效在云平台上并行实施,因此如何利用现有云平台下的计算资源来设计一种准确、高效以及能够在线进行模型更新的并行隐式反馈推荐算法具有很大的应用价值。
现有云平台下的并行隐式反馈推荐算法,通常采用一种分配缺失数据一致权重的矩阵分解模型,通过将用户对项目稀疏评分矩阵映射到低维的用户和项目潜在因子空间,然后内积用户和项目的潜在因子特征向量来预测未知评分信息,并采用一种分块的矩阵划分策略来在云平台上并行化实施,该策略通过将原始评分矩阵、用户特征向量矩阵和项目特征向量矩阵分块并分配到云平台中不同机器中去来实现并行计算。
然而,上述现有的并行隐式反馈推荐算法存在一些不能忽略的技术问题:
1、该方法是将所有缺失数据都当作负反馈数据,并给所有缺失数据分配统一的权重,这种做法不能有效反应负反馈数据的真实情况,从而影响推荐精度;
2、该方法通常采用交替最小二乘法(Alternating Least Square,简称ALS)实现学习过程,其时间复杂度较高,模型并行训练的效率较低;
3、该方法无法实现模型的在线更新,从而导致实时推荐的精度下降。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于Flink的矩阵分解隐式反馈推荐方法,其目的在于,解决现有大数据平台上并行隐式反馈推荐方法中存在的推荐精度低、模型训练时间长、且无法实现模型的在线实时更新的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于Flink的矩阵分解隐式反馈推荐方法,包括以下步骤:
(1)使用Flink数据源接口获取用户历史隐式反馈数据,并对该历史隐式反馈数据进行预处理,以得到处理后的历史隐式反馈数据;
(2)根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型,利用构建的矩阵分解模型对历史隐式反馈数据进行处理,以生成训练好的用户特征向量矩阵Datasetumf、项目特征向量矩阵Datasetimf、以及用户的离线推荐列表;
(3)使用Flink实时数据源接口从用户获取实时隐式反馈数据,并对该实时隐式反馈数据进行预处理,以得到处理后的实时隐式反馈数据,并利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新,并利用更新后的模型生成用户的实时推荐列表。
优选地,步骤(1)中对历史隐式反馈数据进行预处理具体为,先使用Flink平台中的Reduce算子计算历史隐式反馈数据中的用户数量M和项目数量N,利用Flink平台中的map算子处理M*N大小的用户-项目矩阵中存在交互信息的位置,将存在交互信息的位置设置为1,并生成初始用户-项目交互数据集Dataset0,该数据集采用三元组形式(用户id,项目id,1)表示用户-项目矩阵中用户和项目之间的交互信息。
优选地,步骤(2)中根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型的过程包括以下步骤:
(2-1)构建目标函数:
其中R表示用户与项目交互信息矩阵,R∈(M×N),Rui表示用户u与项目i交互信息,u∈[1,M],i∈[1,N],表示Rui的预测值,Pu表示第u个用户的特征向量,Qi表示第i个项目的特征向量,Wui代表Rui的权重,λ表示正则化系数,w0表示交互信息矩阵R中缺失数据的权重系数,du代表用户u的活跃度,ci代表项目i的流行度,
(2-2)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的用户id对交互信息矩阵R进行分块,从而得到用户分块集合Datasetu,用户分块集合Datasetu中元素的分块id计算公式为:用户分块id=用户id%用户分块数量,其中用户分块数量等于启动Flink平台时设定的并行度;
(2-3)利用Flink平台的Groupby算子,并根据步骤(2-2)中得到的分块集合Datasetu聚合每个分块中的用户id,得到每个分块中用户id集合Datasetub;
(2-4)利用Flink平台的Cogroup算子,对步骤(2-2)得到的分块集合Datasetu和步骤(2-3)得到的用户集合Datasetub进行合并处理,以得到用户的出块信息集合Datasetuo;
(2-5)利用Flink平台的Groupreduce算子,对步骤(2-2)得到的分块集合Datasetu进行分组处理,以得到每个分块对应的项目集合Datasetipb;
(2-6)利用Flink平台的Sortgroup算子,对步骤(2-5)得到的项目集合Datasetipb进行处理,以得到用户的入块信息Datasetui;
(2-7)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的项目id对交互信息矩阵R进行分块,从而得到分块集合Dataseti,分块集合Dataseti中元素的计算公式为:项目分块id=项目id%项目分块数量,其中项目分块数量等于运行Flink平台集群的CPU核数;
(2-8)利用Flink平台的Groupby算子,并根据步骤(2-7)中得到的分块集合Dataseti聚合每个分块中的项目id,得到每个分块中项目id集合Datasetib;
(2-9)利用Flink平台的Cogroup算子,对步骤(2-7)得到的分块集合Dataseti和步骤(2-8)得到的项目集合Datasetib进行合并处理,以得到项目的出块信息集合Datasetio;
(2-10)利用Flink平台的Groupreduce算子,对步骤(2-7)得到的分块集合Dataseti进行分组处理,以得到每个分块对应的用户集合Datasetupb;
(2-11)利用Flink平台的Sortgroup算子,对步骤(2-10)得到的项目集合Datasetupb进行处理,以得到项目的入块信息Datasetii;
(2-12)利用Flink平台的map算子对用户的出块信息Datasetuo进行处理,以得到用户特征向量矩阵集合Datasetum,并对项目的出块信息Datasetio进行处理,以得到项目特征向量矩阵集合Datasetim;
(2-13)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以初始化大小k*k用户缓存矩阵DataSetHq1和DataSetHq2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHq1和DataSetHq2设为广播变量,该map算子处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(2-14)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以初始化大小k*k项目缓存矩阵DataSetHp1和DataSetHp2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHp1和DataSetHp2设为广播变量,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15)利用Flink平台的Iterate迭代算子对用户特征向量矩阵集合Datasetum和项目特征向量矩阵集合Datasetim进行交替更新,以得到训练好的用户特征向量矩阵集合Datasetumf和项目特征向量矩阵集合Datasetimf;
(2-16)利用Flink平台的Join算子对步骤(2-15)训练好的用户特征向量矩阵Datasetumf和项目特征向量矩阵Datasetimf进行合并操作,以生成用户的离线推荐列表;
优选地,步骤(2-1)中,du与ci的计算公式如下所示:
其中hu=|Ru|/|R|,|Ru|表示第u个用户的历史交互数据个数,|R|表示总的历史交互数据个数,则hu表示第u个用户的交互数据占总的历史交互数据的比例,fi=|Ri|/|R|,|Ri|表示第i个项目的历史交互数据个数,fi表示第i个项目的交互数据占总的历史交互数据的比例,α表示用户活跃度的影响程度,β表示项目流行度的影响程度。
优选地,用户的出块信息用于缓存每个用户块中有哪些用户特征向量需要发送到对应项目块中用于计算,避免同一个用户块中的特征向量多次发送至相同的项目块,用户出块信息集合Datasetuo中每个用户块出块信息使用一个位图数组来保存,其中每个位图的位数等于项目块个数,用于表示一个用户的特征向量需要发往哪些项目块,用户的入块信息用于缓存每一个用户块中用户对应的评分信息以及相应的项目id,用于判断同一个用户块中的多个用户是否对传入的项目特征向量存在评分信息,项目的出块信息用于缓存每个项目块中有哪些项目特征向量需要发送到对应用户块中用于计算,避免同一个项目块中的特征向量多次发送至相同的用户块;项目出块信息集合Datasetio中每个项目块出块信息使用一个位图数组来保存,其中每个位图的位数等于用户块个数,用于表示一个项目特征向量需要发往哪些用户块;项目的入块信息用于缓存每一个项目块中项目对应的评分信息以及相应的用户id,用于判断同一个项目块中的多个项目是否对传入的用户特征向量存在评分信息。
优选地,步骤(2-16)具体是将训练好的用户特征向量矩阵Datasetumf中每个用户的用户特征向量与项目特征向量矩阵Datasetimf中的所有项目特征向量进行内积操作,以得到与用户-项目矩阵中缺失数据对应的每个用户的预测值集合,将该预测值集合中的元素进行排序,获取前n个值对应的项目作为该用户的推荐项目,并根据所有用户的推荐项目生成用户的离线推荐列表,其中n可根据待推荐项目的数量自行设定。
优选地,步骤(2-15)包括以下子步骤:
(2-15-1)利用Flink平台的Join算子对项目的出块信息Datasetio、以及项目特征向量矩阵Datasetim进行合并处理,以得到用于计算用户特征向量矩阵Datasetum的项目特征向量信息集合Datasetifv;
(2-15-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15-1)得到的项目特征向量信息Datasetifv进行合并处理,在该合并处理过程中需要根据以下公式更新用户特征向量矩阵Datasetum:
其中Puf表示用户特征向量矩阵Datasetum中第u个用户对应第f个元素,Hq1和Hq2都是k*k的缓存矩阵,且矩阵的下标ff和kf分别表示矩阵中第f行第f列、以及第k行第f列的元素。
(2-15-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15-4)利用Flink平台的Join算子对用户的出块信息Datasetuo、以及用户特征向量矩阵Datasetum进行合并处理,以得到用于计算项目特征向量矩阵Datasetim的用户特征向量信息Datasetufv;
(2-15-5)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15-4)得到的用户特征向量信息Datasetufv进行合并处理,在该合并处理过程中需要根据以下公式更新项目特征向量矩阵Datasetim:
其中Qif表示用户特征向量矩阵Datasetim中第i个用户对应第f个元素。
(2-15-6)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
优选地,步骤(3)中,对实时隐式反馈数据进行预处理是使用Flink窗口机制控制实时隐式反馈数据的规模,具体是设置滚动窗口的窗口大小,再将用户-项目矩阵中不存在交互信息的相应位置设置为1,并将预处理后形成的实时隐式反馈数据形成实时数据集DataStream0;步骤(3)
中,利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵
Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新包括以下子步骤:
(3-1)利用Flink平台的Map算子DataStream0进行处理,以得到更新之后用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf;
(3-2)利用Flink平台的Join算子对步骤(3-1)中得到用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf进行合并操作,以生成用户的在线推荐列表。
优选地,步骤(3-1)包括如下子步骤:
(3-1-1)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(3-1-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15)中最后得到的离线项目特征向量信息Datasetimf进行合并处理,得到实时更新之后的用户特征向量Dataseturf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的用户特征向量:
(3-1-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(3-1-4)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15)中最后得到的离线用户特征向量信息Datasetumf进行合并处理,得到实时更新之后的项目特征向量Datasetirf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的项目特征向量:
按照本发明的另一方面,提供了一种基于Flink的矩阵分解隐式反馈推荐系统,包括:
第一模块,用于使用Flink数据源接口获取用户历史隐式反馈数据,并对该历史隐式反馈数据进行预处理,以得到处理后的历史隐式反馈数据;
第二模块,用于根据第一模块处理后的历史隐式反馈数据构建矩阵分解模型,利用构建的矩阵分解模型对历史隐式反馈数据进行处理,以生成训练好的用户特征向量矩阵Datasetumf、项目特征向量矩阵Datasetimf、以及用户的离线推荐列表;
第三模块,用于使用Flink实时数据源接口从用户获取实时隐式反馈数据,并对该实时隐式反馈数据进行预处理,以得到处理后的实时隐式反馈数据,并利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新,并利用更新后的模型生成用户的实时推荐列表。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
1、本发明能够解决现有方法中不能有效反应负反馈数据的真实情况,从而导致推荐精度低的技术问题:由于本发明采用了步骤(2-1)中将隐式反馈推荐算法目标函数中加入了用户活跃度和项目流行度,这种做法将根据用户活跃度和项目流行度分配每个缺失数据不一样的权重,因此模型能够有效地获取负反馈信息,从而提高了推荐精度。
2、本发明能够解决现有方法中存在的时间复杂度较高且并行训练效率较低的技术问题:由于本发明采用了步骤(2-2)到(2-12),模型训练过程中采用一种基于单个元素坐标下降的方法(EALS)来进行模型的更新,因此能够有效降低模型的时间复杂度;同时,并行计算过程中缓存了用户特征向量和项目特征向量的出入块信息来减少在Flink平台上面并行训练时产生的通信开销,因此有效地提升了并行训练效率。
3、本发明能够解决现有方法中由于无法实现模型的在线更新,从而导致实时推荐的精度下降技术问题:由于本发明采用了步骤(3-1)到(3-2),利用实时隐式反馈数据来进行模型的实时更新,从而提高模型的实时推荐精度。
4、本发明提出的方法能够同时应用于大规模隐式反馈数据的离线推荐场景和在线推荐场景,且本方法提出的模型不仅局限于应用在Flink平台上面,同时也可以在其他大数据平台上面高效地实施(例如Spark平台)。
附图说明
图1是本发明基于Flink的矩阵分解隐式反馈推荐方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,本发明提供了一种基于Flink的矩阵分解隐式反馈推荐方法,包括以下步骤:
(1)使用Flink数据源接口获取用户历史隐式反馈数据,并对该历史隐式反馈数据进行预处理,以得到处理后的历史隐式反馈数据;
具体而言,使用Flink数据源接口获取用户的历史隐式反馈数据是指从其它数据库或者文件系统中获取用户的历史隐式反馈数据,这些数据库或者文件系统可以是例如亚马逊的简单存储服务(Simple Storage Service,简称S3)、Hadoop分布式文件系统(Hadoopdistributed file system,简称HDFS)等。
隐式反馈数据是指不具体表明用户偏好的数据,例如用户的商品浏览数据。
对历史隐式反馈数据进行预处理具体是指先使用Flink平台中的Reduce算子计算历史隐式反馈数据中的用户数量M和项目(Item)数量N,利用Flink平台中的map算子处理M*N大小的用户-项目矩阵中存在交互信息的位置,将存在交互信息的位置设置为1,并生成初始用户-项目交互数据集Dataset0,该数据集采用三元组形式(用户id,项目id,1)表示用户-项目矩阵中用户和项目之间的交互信息。
例如,如果历史隐式反馈数据中,第1个用户和第1个项目存在交互,则用户-项目矩阵中第一行第一列的元素为1,在初始用户-项目交互数据集Dataset0中,该交互信息的表示方式为(用户1,项目1,1)。
(2)根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型,利用构建的矩阵分解模型对历史隐式反馈数据进行处理,以生成训练好的用户特征向量矩阵Datasetumf、项目特征向量矩阵Datasetimf、以及用户的离线推荐列表;
本步骤中,根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型的过程包括以下步骤:
(2-1)构建目标函数:
其中R表示用户与项目交互信息矩阵,R∈(M×N),Rui表示用户u与项目i交互信息,u∈[1,M],i∈[1,N],表示Rui的预测值,Pu表示第u个用户的特征向量,Qi表示第i个项目的特征向量,Wui代表Rui的权重,λ表示正则化系数,w0表示交互信息矩阵R中缺失数据的权重系数,du代表用户u的活跃度,ci代表项目i的流行度,du与ci计算公式如下所示:
其中hu=|Ru|/|R|,|Ru|表示第u个用户的历史交互数据个数,|R|表示总的历史交互数据个数,则hu表示第u个用户的交互数据占总的历史交互数据的比例,fi=|Ri|/|R|,|Ri|表示第i个项目的历史交互数据个数,fi表示第i个项目的交互数据占总的历史交互数据的比例,α表示用户活跃度的影响程度,β表示项目流行度的影响程度。
(2-2)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的用户id对交互信息矩阵R进行分块,从而得到用户分块集合Datasetu,用户分块集合Datasetu中元素的分块id计算公式为:用户分块id=用户id%用户分块数量,其中用户分块数量等于启动Flink平台时设定的并行度;
(2-3)利用Flink平台的Groupby算子,并根据步骤(2-2)中得到的分块集合Datasetu聚合每个分块中的用户id,得到每个分块中用户id集合Datasetub;
(2-4)利用Flink平台的Cogroup算子,对步骤(2-2)得到的分块集合Datasetu和步骤(2-3)得到的用户集合Datasetub进行合并处理,以得到用户的出块信息集合Datasetuo;
用户的出块信息用于缓存每个用户块中有哪些用户特征向量需要发送到对应项目块中用于计算,避免同一个用户块中的特征向量多次发送至相同的项目块,其中用户出块信息集合Datasetuo中每个用户块出块信息使用一个位图(bitmap)数组来保存,其中每个位图的位数等于项目块个数,来表示一个用户需要发往哪些项目块,例如用户u需要发送到项目块h中,则将bitmapu的第h位置为1。
(2-5)利用Flink平台的Groupreduce算子,对步骤(2-2)得到的分块集合Datasetu进行分组处理,以得到每个分块对应的项目集合Datasetipb;
(2-6)利用Flink平台的Sortgroup算子,对步骤(2-5)得到的项目集合Datasetipb进行处理,以得到用户的入块信息Datasetui;
用户的入块信息用于缓存每一个用户块中用户对应的评分信息以及相应的项目id,用于判断同一个用户块中的多个用户是否对传入的项目特征向量存在评分信息。
(2-7)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的项目id对交互信息矩阵R进行分块,从而得到分块集合Dataseti,分块集合Dataseti中元素的计算公式为:项目分块id=项目id%项目分块数量,其中项目分块数量等于运行Flink平台集群的CPU核数;
具体而言,项目分块数量等于启动Flink平台时设定的并行度。
(2-8)利用Flink平台的Groupby算子,并根据步骤(2-7)中得到的分块集合Dataseti聚合每个分块中的项目id,得到每个分块中项目id集合Datasetib;
(2-9)利用Flink平台的Cogroup算子,对步骤(2-7)得到的分块集合Dataseti和步骤(2-8)得到的项目集合Datasetib进行合并处理,以得到项目的出块信息集合Datasetio;
项目的出块信息用于缓存每个项目块中有哪些项目特征向量需要发送到对应用户块中用于计算,避免同一个项目块中的特征向量多次发送至相同的用户块,其中项目出块信息集合Datasetuo中每个项目块出块信息使用一个位图(bitmap)数组来保存,其中每个位图的位数等于用户块个数,来表示一个项目需要发往哪些用户块,例如项目i需要发送到用户块h中,则将bitmapi的第h位置为1。
(2-10)利用Flink平台的Groupreduce算子,对步骤(2-7)得到的分块集合Dataseti进行分组处理,以得到每个分块对应的用户集合Datasetupb;
(2-11)利用Flink平台的Sortgroup算子,对步骤(2-10)得到的项目集合Datasetupb进行处理,以得到项目的入块信息Datasetii;
项目的入块信息缓存每一个项目块中项目对应的评分信息以及相应的用户id,用于判断同一个项目块中的多个项目是否对传入的用户特征向量存在评分信息。
(2-12)利用Flink平台的map算子对用户的出块信息Datasetuo进行处理,以得到用户特征向量矩阵集合Datasetum,并对项目的出块信息Datasetio进行处理,以得到项目特征向量矩阵集合Datasetim。
(2-13)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以初始化大小k*k用户缓存矩阵DataSetHq1和DataSetHq2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHq1和DataSetHq2设为广播变量,该map算子处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(2-14)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以初始化大小k*k项目缓存矩阵DataSetHp1和DataSetHp2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHp1和DataSetHp2设为广播变量,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15)利用Flink平台的Iterate迭代算子对用户特征向量矩阵集合Datasetum和项目特征向量矩阵集合Datasetim进行交替更新,以得到训练好的用户特征向量矩阵集合Datasetumf和项目特征向量矩阵集合Datasetimf;
本步骤包括以下子步骤:
(2-15-1)利用Flink平台的Join算子对项目的出块信息Datasetio、以及项目特征向量矩阵Datasetim进行合并处理,以得到用于计算用户特征向量矩阵Datasetum的项目特征向量信息集合Datasetifv;
(2-15-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15-1)得到的项目特征向量信息Datasetifv进行合并处理,在该合并处理过程中需要根据以下公式更新用户特征向量矩阵Datasetum:
其中Puf表示用户特征向量矩阵Datasetum中第u个用户对应第f个元素,Hq1和Hq2都是k*k的缓存矩阵,且矩阵的下标ff和kf分别表示矩阵中第f行第f列、以及第k行第f列的元素。
(2-15-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15-4)利用Flink平台的Join算子对用户的出块信息Datasetuo、以及用户特征向量矩阵Datasetum进行合并处理,以得到用于计算项目特征向量矩阵Datasetim的用户特征向量信息Datasetufv;
(2-15-5)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15-4)得到的用户特征向量信息Datasetufv进行合并处理,在该合并处理过程中需要根据以下公式更新项目特征向量矩阵Datasetim:
其中Qif表示用户特征向量矩阵Datasetim中第i个用户对应第f个元素。
(2-15-6)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(2-16)利用Flink平台的Join算子对步骤(2-15)训练好的用户特征向量矩阵Datasetumf和项目特征向量矩阵Datasetimf进行合并操作,以生成用户的离线推荐列表;
具体而言,本步骤中是将训练好的用户特征向量矩阵Datasetumf中每个用户的用户特征向量与项目特征向量矩阵Datasetimf中的所有项目特征向量进行内积操作,以得到与用户-项目矩阵中缺失数据(即矩阵中不存在用户与项目交互信息的位置)对应的每个用户的预测值集合,将该预测值集合中的元素进行排序,获取前n个值对应的项目作为该用户的推荐项目,并根据所有用户的推荐项目生成用户的离线推荐列表,其中n可根据待推荐项目的数量自行设定。
(3)使用Flink实时数据源接口(例如Apache Kafka)从用户获取实时隐式反馈数据,并对该实时隐式反馈数据进行预处理,以得到处理后的实时隐式反馈数据,并利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新,并利用更新后的模型生成用户的实时推荐列表。
本步骤中,对实时隐式反馈数据进行预处理是使用Flink窗口机制控制实时隐式反馈数据的规模,具体是设置滚动窗口(Tumbling window)的窗口大小(即每次数据处理的大小),并将用户-项目矩阵中不存在交互信息的相应位置设置为1,并将预处理后形成的实时隐式反馈数据形成实时数据集DataStream0。
本步骤中利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新包括以下子步骤:
(3-1)利用Flink平台的Map算子DataStream0进行处理,以得到更新之后用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf;
本步骤中,该处理过程需要对DataStream0中每个交互数据执行以下步骤:
(3-1-1)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(3-1-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15)中最后得到的离线项目特征向量信息Datasetimf进行合并处理,得到实时更新之后的用户特征向量Dataseturf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的用户特征向量:
(3-1-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(3-1-4)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15)中最后得到的离线用户特征向量信息Datasetumf进行合并处理,得到实时更新之后的项目特征向量Datasetirf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的项目特征向量:
(3-2)利用Flink平台的Join算子对步骤(3-1)中得到用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf进行合并操作,以生成用户的在线推荐列表;
具体而言,本步骤中是将训练好的用户特征向量矩阵Dataseturf中每个用户的用户特征向量与项目特征向量矩阵Datasetirf中的所有项目特征向量进行内积操作,以得到与用户-项目矩阵中缺失数据(即矩阵中不存在用户与项目交互信息的位置)对应的、每个用户的预测值集合,将该预测值集合中的元素进行排序,获取前n个值对应的项目作为该用户的推荐项目,并根据所有用户的推荐项目生成用户的离线推荐列表,其中n可根据待推荐项目的数量自行设定。
总而言之,本发明的是在大数据场景下,提出了基于流式计算框架Flink的在线增量矩阵分解推荐方法,通过与传统的大数据平台上基于矩阵分解的隐式反馈推荐算法相比较,本发明的优点如下:
1)提出了一种基于用户活跃度与项目流行度的权重矩阵分解隐式反馈推荐方法,并采用一种基于单个元素坐标下降的优化方法,相对于目前流行的分配缺失值统一权重的矩阵分解隐式反馈推荐算法Flink-WMF而言,不仅提高了算法的预测准确率,并且降低了算法执行的时间复杂度,同时能够高效地进行模型的在线更新;
2)针对大数据场景,本发明实现了一种基于Flink高效的权重矩阵分解隐式反馈推荐方法,该方法采用一种路由表的策略,能够有效减少模型离线训练过程中通信开销,提高模型的训练效率,且具备良好的扩展性,相对于现有大数据平台上基于矩阵分解隐式反馈推荐算法,有效地降低了模型的训练时间,提高了模型的预测精度,与此同时利,用Flink的流处理特性,能够高效地进行模型地实时在线更新,解决了传统大数据平台上基于矩阵分解隐式反馈推荐算法不能进行模型在线更新的问题,进而提高了实时推荐场景下模型的推荐精度。
综上所述,本发明针对现有的大数据平台Flink提出了一种权重矩阵分解隐式反馈推荐方法,相对于传统基于矩阵分解的隐式推荐算法,能有效减少模型训练时间,减少对分布式集群资源的使用且具备更高的准确率,与此同时,能够有效利用Flink的实时处理能力,针对实时推荐场景进行模型的增量更新,进一步提高模型的预测精度。
仿真结果和性能比较
本发明选择yelp挑战数据集,其中包含160万用户对项目的评分信息,由于数据的稀疏性太大,为了更好地评估算法的性能,本发明中过滤掉了评分信息少于10条的用户项,最终得到731671条评分数据,对应用户数为25815,项目数为25677,离线测试过程本发明采用留一法,首先将评分按照每个用户产生项目交互的时间排序,取每个用户最后一条评论数据作为测试数据,将本发明的方法与现有Flink平台上并行的基于矩阵分解隐式反馈推荐算法Flink-ALS,进行了推荐性能的比较,本发明采用隐式反馈推荐中常用的交互指标命中率(Hit rate,简称HR)和归一化折损累积增益(Normalized Discounted cumulativegain,简称NDCG)作为评价指标。
实验中,本发明的方法和现有方法的基础参数设定:推荐过程中使用的Top-n推荐中n值为100,矩阵分解之后用户和项目特征向量长度k设定为128,算法迭代次数设定为100,正则化系数λ设定为0.01,特别的对于本发明的方法,超参数的设置为w0设置为256,β设定为0.1,α设定为0.6,具体试验结果参见表1。
为了验证本发明在Flink平台上的推荐精度和效率,实验在Flink的独立(Standalone)集群模式下进行,集群由三台机器组成,每台机器上面运行一个Flink任务管理(TaskManger)任务,每个TaskManger占用8个CPU核心,因此,我们将用户特征举证和项目特征矩阵的分块数均设置为24。算法推荐精度的比较如表1所示。性能测试实验中我们将特征向量长度k分别设置为为32、64和128,分别测试在Flink平台上本发明和Flink-ALS的运行时间,得到表2的实验结果。
表1
表2
通过以上表1和表2的实验结果,可以看出:在推荐精度方面,表1中本发明的HR跟NDCG值均高于Flink-WMF,因此本发明相对原有大数据平台的并行隐式反馈方法有着更高的推荐精度;在模型训练效率方面,本发明在与Flink-WMF占用相同集群资源的情况下,采用不同特征向量长度时,模型训练时间均要短于Flink-WMF的模型训练时间,因此本发明相对原有大数据平台的并行隐式反馈方法有着更高的模型训练效率。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Flink的矩阵分解隐式反馈推荐方法,其特征在于,包括以下步骤:
(1)使用Flink数据源接口获取用户历史隐式反馈数据,并对该历史隐式反馈数据进行预处理,以得到处理后的历史隐式反馈数据;
(2)根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型,利用构建的矩阵分解模型对历史隐式反馈数据进行处理,以生成训练好的用户特征向量矩阵Datasetumf、项目特征向量矩阵Datasetimf、以及用户的离线推荐列表;
(3)使用Flink实时数据源接口从用户获取实时隐式反馈数据,并对该实时隐式反馈数据进行预处理,以得到处理后的实时隐式反馈数据,并利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新,并利用更新后的模型生成用户的实时推荐列表。
2.根据权利要求1所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(1)中对历史隐式反馈数据进行预处理具体为,先使用Flink平台中的Reduce算子计算历史隐式反馈数据中的用户数量M和项目数量N,利用Flink平台中的map算子处理M*N大小的用户-项目矩阵中存在交互信息的位置,将存在交互信息的位置设置为1,并生成初始用户-项目交互数据集Dataset0,该数据集采用三元组形式(用户id,项目id,1)表示用户-项目矩阵中用户和项目之间的交互信息。
3.根据权利要求2所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(2)中根据步骤(1)处理后的历史隐式反馈数据构建矩阵分解模型的过程包括以下步骤:
(2-1)构建目标函数:
其中R表示用户与项目交互信息矩阵,R∈(M×N),Rui表示用户u与项目i交互信息,u∈[1,M],i∈[1,N],表示Rui的预测值,Pu表示第u个用户的特征向量,Qi表示第i个项目的特征向量,Wui代表Rui的权重,λ表示正则化系数,w0表示交互信息矩阵R中缺失数据的权重系数,du代表用户u的活跃度,ci代表项目i的流行度;
(2-2)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的用户id对交互信息矩阵R进行分块,从而得到用户分块集合Datasetu,用户分块集合Datasetu中元素的分块id计算公式为:用户分块id=用户id%用户分块数量,其中用户分块数量等于启动Flink平台时设定的并行度;
(2-3)利用Flink平台的Groupby算子,并根据步骤(2-2)中得到的分块集合Datasetu聚合每个分块中的用户id,得到每个分块中用户id集合Datasetub;
(2-4)利用Flink平台的Cogroup算子,对步骤(2-2)得到的分块集合Datasetu和步骤(2-3)得到的用户集合Datasetub进行合并处理,以得到用户的出块信息集合Datasetuo;
(2-5)利用Flink平台的Groupreduce算子,对步骤(2-2)得到的分块集合Datasetu进行分组处理,以得到每个分块对应的项目集合Datasetipb;
(2-6)利用Flink平台的Sortgroup算子,对步骤(2-5)得到的项目集合Datasetipb进行处理,以得到用户的入块信息Datasetui;
(2-7)利用Flink平台的map算子,并根据步骤(1)中生成初始用户-项目交互数据集Dataset0中的项目id对交互信息矩阵R进行分块,从而得到分块集合Dataseti,分块集合Dataseti中元素的计算公式为:项目分块id=项目id%项目分块数量,其中项目分块数量等于运行Flink平台集群的CPU核数;
(2-8)利用Flink平台的Groupby算子,并根据步骤(2-7)中得到的分块集合Dataseti聚合每个分块中的项目id,得到每个分块中项目id集合Datasetib;
(2-9)利用Flink平台的Cogroup算子,对步骤(2-7)得到的分块集合Dataseti和步骤(2-8)得到的项目集合Datasetib进行合并处理,以得到项目的出块信息集合Datasetio;
(2-10)利用Flink平台的Groupreduce算子,对步骤(2-7)得到的分块集合Dataseti进行分组处理,以得到每个分块对应的用户集合Datasetupb;
(2-11)利用Flink平台的Sortgroup算子,对步骤(2-10)得到的项目集合Datasetupb进行处理,以得到项目的入块信息Datasetii;
(2-12)利用Flink平台的map算子对用户的出块信息Datasetuo进行处理,以得到用户特征向量矩阵集合Datasetum,并对项目的出块信息Datasetio进行处理,以得到项目特征向量矩阵集合Datasetim;
(2-13)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以初始化大小k*k用户缓存矩阵DataSetHq1和DataSetHq2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHq1和DataSetHq2设为广播变量,该map算子处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(2-14)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以初始化大小k*k项目缓存矩阵DataSetHp1和DataSetHp2,并利用Flink平台的Broadcast算子将项目缓存矩阵DataSetHp1和DataSetHp2设为广播变量,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15)利用Flink平台的Iterate迭代算子对用户特征向量矩阵集合Datasetum和项目特征向量矩阵集合Datasetim进行交替更新,以得到训练好的用户特征向量矩阵集合Datasetumf和项目特征向量矩阵集合Datasetimf;
(2-16)利用Flink平台的Join算子对步骤(2-15)训练好的用户特征向量矩阵Datasetumf和项目特征向量矩阵Datasetimf进行合并操作,以生成用户的离线推荐列表;
4.根据权利要求3所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(2-1)中,du与ci的计算公式如下所示:
其中hu=|Ru|/|R|,|Ru|表示第u个用户的历史交互数据个数,|R|表示总的历史交互数据个数,则hu表示第u个用户的交互数据占总的历史交互数据的比例,fi=|Ri|/|R|,|Ri|表示第i个项目的历史交互数据个数,fi表示第i个项目的交互数据占总的历史交互数据的比例,α表示用户活跃度的影响程度,β表示项目流行度的影响程度。
5.根据权利要求3所述的矩阵分解隐式反馈推荐方法,其特征在于,
用户的出块信息用于缓存每个用户块中有哪些用户特征向量需要发送到对应项目块中用于计算,避免同一个用户块中的特征向量多次发送至相同的项目块;
用户出块信息集合Datasetuo中每个用户块出块信息使用一个位图数组来保存,其中每个位图的位数等于项目块个数,用于表示一个用户的特征向量需要发往哪些项目块;
用户的入块信息用于缓存每一个用户块中用户对应的评分信息以及相应的项目id,用于判断同一个用户块中的多个用户是否对传入的项目特征向量存在评分信息。
项目的出块信息用于缓存每个项目块中有哪些项目特征向量需要发送到对应用户块中用于计算,避免同一个项目块中的特征向量多次发送至相同的用户块;
项目出块信息集合Datasetio中每个项目块出块信息使用一个位图数组来保存,其中每个位图的位数等于用户块个数,用于表示一个项目特征向量需要发往哪些用户块;
项目的入块信息用于缓存每一个项目块中项目对应的评分信息以及相应的用户id,用于判断同一个项目块中的多个项目是否对传入的用户特征向量存在评分信息。
6.根据权利要求5所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(2-16)具体是将训练好的用户特征向量矩阵Datasetumf中每个用户的用户特征向量与项目特征向量矩阵Datasetimf中的所有项目特征向量进行内积操作,以得到与用户-项目矩阵中缺失数据对应的每个用户的预测值集合,将该预测值集合中的元素进行排序,获取前n个值对应的项目作为该用户的推荐项目,并根据所有用户的推荐项目生成用户的离线推荐列表,其中n可根据待推荐项目的数量自行设定。
7.根据权利要求6所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(2-15)包括以下子步骤:
(2-15-1)利用Flink平台的Join算子对项目的出块信息Datasetio、以及项目特征向量矩阵Datasetim进行合并处理,以得到用于计算用户特征向量矩阵Datasetum的项目特征向量信息集合Datasetifv;
(2-15-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15-1)得到的项目特征向量信息Datasetifv进行合并处理,在该合并处理过程中需要根据以下公式更新用户特征向量矩阵Datasetum:
其中Puf表示用户特征向量矩阵Datasetum中第u个用户对应第f个元素,Hq1和Hq2都是k*k的缓存矩阵,且矩阵的下标ff和kf分别表示矩阵中第f行第f列、以及第k行第f列的元素。
(2-15-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(2-15-4)利用Flink平台的Join算子对用户的出块信息Datasetuo、以及用户特征向量矩阵Datasetum进行合并处理,以得到用于计算项目特征向量矩阵Datasetim的用户特征向量信息Datasetufv;
(2-15-5)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15-4)得到的用户特征向量信息Datasetufv进行合并处理,在该合并处理过程中需要根据以下公式更新项目特征向量矩阵Datasetim:
其中Qif表示用户特征向量矩阵Datasetim中第i个用户对应第f个元素。
(2-15-6)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
8.根据权利要求1所述的矩阵分解隐式反馈推荐方法,其特征在于,
步骤(3)中,对实时隐式反馈数据进行预处理是使用Flink窗口机制控制实时隐式反馈数据的规模,具体是设置滚动窗口的窗口大小,再将用户-项目矩阵中不存在交互信息的相应位置设置为1,并将预处理后形成的实时隐式反馈数据形成实时数据集DataStream0;
步骤(3)中,利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新包括以下子步骤:
(3-1)利用Flink平台的Map算子DataStream0进行处理,以得到更新之后用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf;
(3-2)利用Flink平台的Join算子对步骤(3-1)中得到用户特征向量矩阵Dataseturf和项目特征向量矩阵Datasetirf进行合并操作,以生成用户的在线推荐列表。
9.根据权利要求8所述的矩阵分解隐式反馈推荐方法,其特征在于,步骤(3-1)包括如下子步骤:
(3-1-1)利用Flink平台的Map算子对项目特征向量矩阵Datasetim处理,以更新用户缓存矩阵Hq1和Hq2,在该处理过程中需要根据以下公式计算缓存矩阵Hq1和Hq2:
(3-1-2)利用Flink平台的Cogroup算子对用户的入块信息Datasetui、以及步骤(2-15)中最后得到的离线项目特征向量信息Datasetimf进行合并处理,得到实时更新之后的用户特征向量Dataseturf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的用户特征向量:
(3-1-3)利用Flink平台的Map算子对用户特征向量矩阵Datasetum处理,以更新缓存矩阵Hp1和Hp2,在该处理过程中需要根据以下公式计算缓存矩阵Hp1和Hp2:
(3-1-4)利用Flink平台的Cogroup算子对项目的入块信息Datasetii、以及步骤(2-15)中最后得到的离线用户特征向量信息Datasetumf进行合并处理,得到实时更新之后的项目特征向量Datasetirf,在该合并处理过程中需要根据以下公式更新步骤(3)得到DataStream0中实时数据对应的项目特征向量:
10.一种基于Flink的矩阵分解隐式反馈推荐系统,其特征在于,包括:
第一模块,用于使用Flink数据源接口获取用户历史隐式反馈数据,并对该历史隐式反馈数据进行预处理,以得到处理后的历史隐式反馈数据;
第二模块,用于根据第一模块处理后的历史隐式反馈数据构建矩阵分解模型,利用构建的矩阵分解模型对历史隐式反馈数据进行处理,以生成训练好的用户特征向量矩阵Datasetumf、项目特征向量矩阵Datasetimf、以及用户的离线推荐列表;
第三模块,用于使用Flink实时数据源接口从用户获取实时隐式反馈数据,并对该实时隐式反馈数据进行预处理,以得到处理后的实时隐式反馈数据,并利用处理后的实时隐式反馈数据、训练好的用户特征向量矩阵Datasetumf、以及项目特征向量矩阵Datasetimf对矩阵分解模型进行实时更新,并利用更新后的模型生成用户的实时推荐列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910426635.0A CN110175287B (zh) | 2019-05-22 | 2019-05-22 | 一种基于Flink的矩阵分解隐式反馈推荐方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910426635.0A CN110175287B (zh) | 2019-05-22 | 2019-05-22 | 一种基于Flink的矩阵分解隐式反馈推荐方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110175287A true CN110175287A (zh) | 2019-08-27 |
CN110175287B CN110175287B (zh) | 2020-10-02 |
Family
ID=67691808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910426635.0A Active CN110175287B (zh) | 2019-05-22 | 2019-05-22 | 一种基于Flink的矩阵分解隐式反馈推荐方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110175287B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113434513A (zh) * | 2021-07-14 | 2021-09-24 | 上海浦东发展银行股份有限公司 | 用户标签数据存储方法、装置、系统、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040153373A1 (en) * | 2003-01-31 | 2004-08-05 | Docomo Communications Laboratories Usa, Inc. | Method and system for pushing services to mobile devices in smart environments using a context-aware recommender |
CN105488216A (zh) * | 2015-12-17 | 2016-04-13 | 上海中彦信息科技有限公司 | 基于隐式反馈协同过滤算法的推荐系统及方法 |
CN106296305A (zh) * | 2016-08-23 | 2017-01-04 | 上海海事大学 | 大数据环境下的电商网站实时推荐系统与方法 |
CN109190030A (zh) * | 2018-08-22 | 2019-01-11 | 南京工业大学 | 融合node2vec和深度神经网络的隐式反馈推荐方法 |
-
2019
- 2019-05-22 CN CN201910426635.0A patent/CN110175287B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040153373A1 (en) * | 2003-01-31 | 2004-08-05 | Docomo Communications Laboratories Usa, Inc. | Method and system for pushing services to mobile devices in smart environments using a context-aware recommender |
CN105488216A (zh) * | 2015-12-17 | 2016-04-13 | 上海中彦信息科技有限公司 | 基于隐式反馈协同过滤算法的推荐系统及方法 |
CN106296305A (zh) * | 2016-08-23 | 2017-01-04 | 上海海事大学 | 大数据环境下的电商网站实时推荐系统与方法 |
CN109190030A (zh) * | 2018-08-22 | 2019-01-11 | 南京工业大学 | 融合node2vec和深度神经网络的隐式反馈推荐方法 |
Non-Patent Citations (1)
Title |
---|
陆艺等: "面向隐式反馈的推荐系统研究现状与趋势", 《计算机科学》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113434513A (zh) * | 2021-07-14 | 2021-09-24 | 上海浦东发展银行股份有限公司 | 用户标签数据存储方法、装置、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110175287B (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106020230B (zh) | 一种能耗约束下的多无人机任务分配方法 | |
CN110533183B (zh) | 流水线分布式深度学习中异构网络感知的任务放置方法 | |
Gai et al. | Learning piece-wise linear models from large scale data for ad click prediction | |
WO2023097929A1 (zh) | 一种基于改进型kgat模型的知识图谱推荐方法及系统 | |
CN105512162B (zh) | 一种基于Storm的流数据实时智能化处理框架 | |
Ordentlich et al. | Network-efficient distributed word2vec training system for large vocabularies | |
Simmen et al. | Large-scale graph analytics in aster 6: bringing context to big data discovery | |
Dong et al. | Workflow scheduling based on deep reinforcement learning in the cloud environment | |
Liu et al. | Resource-constrained federated edge learning with heterogeneous data: Formulation and analysis | |
CN108885641A (zh) | 高性能查询处理和数据分析 | |
Li et al. | Intermediate data placement and cache replacement strategy under Spark platform | |
CN111091247A (zh) | 基于深度神经网络模型融合的电力负荷预测方法、装置 | |
Wu et al. | A deadline-aware estimation of distribution algorithm for resource scheduling in fog computing systems | |
CN111966495B (zh) | 数据处理方法和装置 | |
Li et al. | Deep reinforcement learning: Algorithm, applications, and ultra-low-power implementation | |
Park et al. | Amble: Adjusting mini-batch and local epoch for federated learning with heterogeneous devices | |
Wei et al. | Autoias: Automatic integrated architecture searcher for click-trough rate prediction | |
Yui et al. | A database-hadoop hybrid approach to scalable machine learning | |
Liu et al. | Multi-job intelligent scheduling with cross-device federated learning | |
Wang et al. | Coopfl: Accelerating federated learning with dnn partitioning and offloading in heterogeneous edge computing | |
CN110175287A (zh) | 一种基于Flink的矩阵分解隐式反馈推荐方法和系统 | |
CN111629216B (zh) | 边缘网络环境下基于随机森林算法的vod业务缓存替换方法 | |
Zhang et al. | Scalable k-fac training for deep neural networks with distributed preconditioning | |
Hong et al. | LSDDL: Layer-wise sparsification for distributed deep learning | |
Ishizuka et al. | Workflow transformation for real-time big data processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |