在线离线混合推荐方法及系统
技术领域
本发明涉及SaaS平台推荐系统领域,尤其涉及一种在线离线混合推荐方法及系统。
背景技术
SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟,在21世纪开始兴起的一种完全创新的软件应用模式。它与“on-demandsoftware”(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。SaaS应用软件的价格通常为“全包”费用,囊括了通常的应用软件许可证费、软件维护费以及技术支持费,将其统一为每个用户的月度租用费。对于广大中小型企业来说,SaaS是采用先进技术实施信息化的最好途径。但SaaS绝不仅仅适用于中小型企业,所有规模的企业都可以从SaaS中获利。
随着互联网及移动互联网技术的迅速发展,通过SaaS的方式为企业提供服务以及得到广泛的认可。但是,随着系统数据的增加、功能与信息的升级,信息过载的问题日益凸显,海量的资源常常让用户无所适从,推荐系统能有效的提高用户使用的体验,缓解信息过载问题,但不同于C端(即消费者)互联网产品,SaaS平台推荐系统也存在很多挑战:
(1)数据稀疏性:由于SaaS主要面向企业侧,单个用户产生的数据量少,传统协同过滤等方法效果一般;
(2)冷启动:在用户刚进行使用时,还未产生使用数据时,如何进行推荐;
(3)快速响应:当用户进行某些操作与选择后,如何迅速的调整模型,对推荐算法进行调整。
目前,传统的推荐系统主要分为两类,基于协同过滤等在线学习系统与基于深度学习等算法的离线学习系统,但在SaaS应用领域都存在一定的局限性:
(1)推荐精度不够高:基于协同过滤的方法主要优势在于有成熟的工具链进行非常大规模的矩阵运算,运算速度更快。在搜索引擎等C端领域取得了很好的效果,但是企业服务领域需要更精细化的推荐;
(2)缺乏个性化:虽然很多推荐系统已经引入了千人千面的概念,但主要也是对用户进行聚类推荐,并未真正做到为不同的用户定制偏好;
(3)学习速度不够快:基于深度学习模型算法的模型通常更新频度会更慢,需要有离线对数据进行学习再更新模型权值的过程。
发明内容
本发明的目的是为了解决现有技术中存在的缺点,而提出的一种在线离线混合推荐方法及系统。
为实现上述目的,本发明采用了如下技术方案:
一种在线离线混合推荐方法及系统,分为训练过程与预测过程,所述预测过程包括SaaS系统调用预测服务的步骤,预测推荐模型推荐预测的步骤,结果返回的步骤,所述训练过程包括在线学习步骤和离线学习步骤。
所述SaaS系统调用预测服务的具体步骤如下:
步骤S11:SaaS系统通过API接口调用预测服务进行业务匹配或业务分类;
步骤S12:预测服务将该请求处理为模型可以接受的向量形式;
步骤S13:预测服务将处理为向量形式的请求发送给预测推荐模型。
所述预测推荐模型推荐预测的具体步骤如下:
步骤S21:离线模型对请求进行计算,并返回推荐结果;
步骤S22:预测服务查询在缓存中是否需要对预测结果进行个性化纠偏,本步骤与步骤S21同时进行;
步骤S23:若步骤S22结果为“是”,将预测结果送入Streaming Model中进行二次处理;若步骤S22结果为“否”,步骤S21直接返回推荐结果。在线推荐是在离线推荐的基础上进行修正,从而达到推荐精度的提高。
所述结果返回的具体步骤如下:
步骤S31:接收离线预测结果和二次处理结果,得出预测综合结果;
步骤S32:利用基于协同过滤方法的Streaming Model对结果进行进一步的修正,从而解决个性化问题。
所述在线学习步骤如下:将用户实时的选择数据与当时的预测数据,实时送入Streaming Model中进行学习更新。
所述离线学习步骤如下:每隔一定时间,调度器会将数据库中的历史数据抽取出来,经过处理采样后进行训练服务,在训练时会按照设定的规则自动调整参数并自动选取训练的最优模型,选出的最优模型会在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
优选地,所述预测服务包括如下组件:
(1)接口服务(API Server):负责对外进行沟通对接(http方式),将外部输入数据转换为模型可以接受的格式,根据条件选择使用哪个模型进行预测,并与推荐模型进行信息对接(grpc方式);
(2)模型负载均衡(load balance):由于深度学习模型是一项对资源消耗较大的耗时功能,接口服务会按照负载均衡的方式拆分请求,尽可能分担推荐请求;
(3)离线预测服务(Tensorflow-serving):将预训练好的模型与权值(weight)载入系统中,提供预测推荐服务;
(4)在线预测服务(Online-Models):将每个企业最新的信息、选项等缓存于在线预测服务的Redis数据库中,对离线模型所生成的结果进行纠正。
优选地,所述训练服务包括如下组件:
(1)在线模型(Streaming Model):通过kafka系统获取实时流数据,更新在线模型(Streaming Model),配合在线预测服务对离线模型进行结果纠正;
(2)原始数据汇总(ODS\DW\WideTable):将系统中的历史数据定时汇总成待训练的数据宽表;
(3)数据采样模块(PhaseII/PhaseIII):将待训练的数据进行进一步处理,分词、欠采样(随机将部分过于活跃用户数据划分为非训练数据)、过采样(通过近义词替换、随机增加或减少词汇等方式制造数据)并拆分训练集、测试集与验证集(通常训练集占原始数据70%,测试集占10%,验证集占20%);
(4)模型训练(Tensorflow/Spark):将处理过的数据送到不同任务下的模型里进行学习,包括独立的Spark模型(协同过滤模型)、Tensorflow模型(深度学习神经网络模型)以及两者的联结模型;
(5)模型评价模型(Evaluate Model):将训练的模型以及历史模型加载到系统中按照设定好的任务场景用测试数据进行打分,评估是否需要更新模型。
进一步的,所述训练服务在训练时设定的规则如下:
在训练时会将20%的数据设为验证数据,在每次遍历学习过一篇训练数据后,根据模型在验证集上的表现进行学习率与参数的调整,若连续两轮在验证集上的表现(loss)下降没有达到预设比率,则会将学习率按照设定比率进行下调,当连续5个轮次验证集上表现没有进步,则停止继续学习并将在验证集上表现最优模型在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
优选地,所述离线模型为使用深度学习神经网络方式利用全量历史数据进行训练所得到的模型,深度神经网络的神经元通常是如下的表示(f(Wi1x1+…+Wijxj+bi)),其中权重W与偏置项b是通过训练得到的。
进一步的,在离线模式中,通常使用交叉熵 对模型的表现(loss)进行衡量,在训练阶段每个批次数据下都将进行梯度下降反向传播。
优选地,协同过滤中使用了奇异值分解的原理,使用均方差作为模型的表现进行衡量。
本发明还提出一种一种在线离线混合推荐系统,包括训练过程模块与预测过程模块,所述预测过程模块包括SaaS系统调用预测服务子模块,预测推荐模型推荐预测子模块,结果返回子模块,所述训练过程模块包括在线学习子模块和离线学习子模块;
所述SaaS系统调用预测子模块的工作步骤包括:
步骤S11:SaaS系统通过API接口调用预测服务进行业务匹配或业务分类;
步骤S12:预测服务将该请求处理为模型可以接受的向量形式;
步骤S13:预测服务将处理为向量形式的请求发送给预测推荐模型;
所述预测推荐模型推荐预测的具体步骤包括:
步骤S21:离线模型对请求进行计算,并返回推荐结果;
步骤S22:预测服务查询在缓存中是否需要对预测结果进行个性化纠偏,本步骤与步骤S21同时进行;
步骤S23:若步骤S22结果为“是”,将预测结果送入Streaming Model中进行二次处理;若步骤S22结果为“否”,步骤S21直接返回推荐结果;
所述结果返回子模块的工作步骤包括:
步骤S31:接收离线预测结果和二次处理结果,得出预测综合结果;步骤S32:利用基于协同过滤方法的Streaming Model对结果进行进一步的修正;
所述在线学习子模块工作步骤包括:将用户实时的选择数据与当时的预测数据,实时送入Streaming Model中进行学习更新;
所述离线学习子模块工作步骤包括:每隔一定时间,调度器会将数据库中的历史数据抽取出来,经过处理采样后进行训练服务,在训练时会按照设定的规则自动调整参数并自动选取训练的最优模型,选出的最优模型会在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
与现有技术相比,本发明的有益效果为:本发明通过结合传统协同过滤与深度学习模型的方式,取得一个较好的平衡点。通过对全量数据进行深度学习,提高了精度与冷启动的问题。同时根据每个用户的使用情况,实时对离线使用情况进行纠正,解决个性化以及响应速度的问题。相比于传统的方案,该在线与离线混合的方案使用离线模型作为整个推荐服务的中间结果。该中间结果由于使用了全量数据进行学习,性能会更为优越。主要用以应对冷启动与数据稀少等问题。而在线模型是一个更为轻量级的模型,使用离线模型的结果与当前企业用户的偏好结合生成结果。本发明通过结合离线与在线模型在兼顾推荐质量的同时保证了不同企业的个性需求,提升了用户体验;通过自动化的训练管道,降低了模型的维护成本,基本全自动自动更新权值,降低了模型维护成本。
附图说明
图1为本发明的流程图;
图2为本发明的系统结构图。
具体实施方式
为使对本发明的目的、构造、特征、及其功能有进一步的了解,兹配合实施例详细说明如下。
请参见图1,一种在线离线混合推荐方法及系统,分为训练过程与预测过程,所述预测过程包括SaaS系统调用预测服务的步骤,预测推荐模型推荐预测的步骤,结果返回的步骤,所述训练过程包括在线学习步骤和离线学习步骤。
所述SaaS系统调用预测服务的具体步骤如下:
步骤S11:SaaS系统通过API接口调用预测服务进行业务匹配或业务分类;
步骤S12:预测服务将该请求处理为模型可以接受的向量形式;
步骤S13:预测服务将处理为向量形式的请求发送给预测推荐模型。
所述预测推荐模型推荐预测的具体步骤如下:
步骤S21:离线模型对请求进行计算,并返回推荐结果;
步骤S22:预测服务查询在缓存中是否需要对预测结果进行个性化纠偏,本步骤与步骤S21同时进行;
在一实施例中,若步骤S22结果为“是”,则执行步骤S23:将预测结果送入Streaming Model中进行二次处理;
在一实施例中,若步骤S22结果为“否”,则执行步骤S21直接返回推荐结果。
在线推荐是在离线推荐的基础上进行修正,从而达到推荐精度的提高。
所述结果返回的具体步骤如下:
步骤S31:接收离线预测结果和二次处理结果,得出预测综合结果;
步骤S32:利用基于协同过滤方法的Streaming Model对结果进行进一步的修正,从而解决个性化问题。
所述在线学习步骤如下:将用户实时的选择数据与当时的预测数据,实时送入Streaming Model中进行学习更新。
所述离线学习步骤如下:每隔一定时间,调度器会将数据库中的历史数据抽取出来,经过处理采样后进行训练服务,在训练时会按照设定的规则自动调整参数并自动选取训练的最优模型,选出的最优模型会在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
在一实施例中,所述训练服务在训练时设定的规则如下:
在训练时会将20%的数据设为验证数据,在每次遍历学习过一篇训练数据后,根据模型在验证集上的表现进行学习率与参数的调整,若连续两轮在验证集上的表现(loss)下降没有达到预设比率,则会将学习率按照设定比率进行下调,当连续5个轮次验证集上表现没有进步,则停止继续学习并将在验证集上表现最优模型在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
请参见图2,所述预测服务包括如下组件:
(1)接口服务(API Server):负责对外进行沟通对接(http方式),将外部输入数据转换为模型可以接受的格式,根据条件选择使用哪个模型进行预测,并与推荐模型进行信息对接(grpc方式);
(2)模型负载均衡(load balance):由于深度学习模型是一项对资源消耗较大的耗时功能,接口服务会按照负载均衡的方式拆分请求,尽可能分担推荐请求;
(3)离线预测服务(Tensorflow-serving):将预训练好的模型与权值(weight)载入系统中,提供预测推荐服务;
(4)在线预测服务(Online-Models):将每个企业最新的信息、选项等缓存于在线预测服务的Redis数据库中,对离线模型所生成的结果进行纠正。
请进一步参见图2,所述训练服务包括如下组件:
(1)在线模型(Streaming Model):通过kafka系统获取实时流数据,更新在线模型(Streaming Model),配合在线预测服务对离线模型进行结果纠正;
(2)原始数据汇总(ODS\DW\WideTable):将系统中的历史数据定时汇总成待训练的数据宽表;
(3)数据采样模块(PhaseII/PhaseIII):将待训练的数据进行进一步处理,分词、欠采样(随机将部分过于活跃用户数据划分为非训练数据)、过采样(通过近义词替换、随机增加或减少词汇等方式制造数据)并拆分训练集、测试集与验证集(通常训练集占原始数据70%,测试集占10%,验证集占20%);
(4)模型训练(Tensorflow/Spark):将处理过的数据送到不同任务下的模型里进行学习,包括独立的Spark模型(协同过滤模型)、Tensorflow模型(深度学习神经网络模型)以及两者的联结模型;
(5)模型评价模型(Evaluate Model):将训练的模型以及历史模型加载到系统中按照设定好的任务场景用测试数据进行打分,评估是否需要更新模型。
具体地,所述离线模型为使用深度学习神经网络方式利用全量历史数据进行训练所得到的模型,深度神经网络的神经元通常是如下的表示(f(Wi1x1+…+Wijxj+bi)),其中权重W与偏置项b是通过训练得到的。
进一步的,在离线模式中,通常使用交叉熵 对模型的表现(loss)进行衡量,在训练阶段每个批次数据下都将进行梯度下降反向传播。
具体地,协同过滤中使用了奇异值分解的原理,使用均方差作为模型的表现进行衡量。
本发明还提出一种在线离线混合推荐系统,其特征在于:包括训练过程模块与预测过程模块,所述预测过程模块包括SaaS系统调用预测服务子模块,预测推荐模型推荐预测子模块,结果返回子模块,所述训练过程模块包括在线学习子模块和离线学习子模块;
所述SaaS系统调用预测子模块的工作步骤包括:
步骤S11:SaaS系统通过API接口调用预测服务进行业务匹配或业务分类;
步骤S12:预测服务将该请求处理为模型可以接受的向量形式;
步骤S13:预测服务将处理为向量形式的请求发送给预测推荐模型;
所述预测推荐模型推荐预测的具体步骤包括:
步骤S21:离线模型对请求进行计算,并返回推荐结果;
步骤S22:预测服务查询在缓存中是否需要对预测结果进行个性化纠偏,本步骤与步骤S21同时进行;
步骤S23:若步骤S22结果为“是”,将预测结果送入Streaming Model中进行二次处理;若步骤S22结果为“否”,步骤S21直接返回推荐结果;
所述结果返回子模块的工作步骤包括:
步骤S31:接收离线预测结果和二次处理结果,得出预测综合结果;
步骤S32:利用基于协同过滤方法的Streaming Model对结果进行进一步的修正;
所述在线学习子模块工作步骤包括:将用户实时的选择数据与当时的预测数据,实时送入Streaming Model中进行学习更新;
所述离线学习子模块工作步骤包括:每隔一定时间,调度器会将数据库中的历史数据抽取出来,经过处理采样后进行训练服务,在训练时会按照设定的规则自动调整参数并自动选取训练的最优模型,选出的最优模型会在评估模块中与历史版本模型在指定任务上进行评比,当性能超过历史模型达到一个阈值时,触发模型权值的更新。
本发明已由上述相关实施例加以描述,然而上述实施例仅为实施本发明的范例。必需指出的是,已揭露的实施例并未限制本发明的范围。相反地,在不脱离本发明的精神和范围内所作的更动与润饰,均属本发明的专利保护范围。