本发明涉及个性化推荐领域,特别是涉及一种标签推荐方法及系统。
背景技术:
现如今,web技术的发展突飞猛进,用户可以在多种多样的网络平台上对一个项目标注多个不同的标签,尤其是在各个平台的推荐系统应用方面,系统通过标签来探索每个用户的喜好特征,当用户对未标注过标签的项目标注标签时,可以更有效地向用户推荐合适的标签供用户标注,帮助用户快速找到自己满意的标签。项目是指用户标注标签的对象,例如电影、视频、文章等。以往的推荐算法大多针对的是基于二元关系的用户-项目的评分矩阵数据进行研究,随着标签数据的加入,由用户、项目和标签组成的三元关系数据处理成为了近年来推荐算法研究的重点。
由于推荐系统中用户、项目和标签数量的与日俱增,三者组成的权值数据规模呈指数速度增长,数据稀疏性逐渐变大,由此用于处理该数据的推荐算法的推荐准确性降低,成为推荐技术需解决的最主要的问题。
技术实现要素:
本发明的目的是提供一种标签推荐方法及系统,以解决现有技术中推荐算法推荐准确性低的问题。
为实现上述目的,本发明提供了如下方案:
一种标签推荐方法,所述方法包括:
依次获取所有用户对所有项目标注的标签总集合,所述标签总集合包括所有的第一标签集合,所述第一标签集合为一个用户对一个项目标注的标签的集合,所述第一标签集合包括m个标签,m为大于0的整数;
利用apriori算法寻找所述标签总集合中的最大频繁项集;
将所述最大频繁项集设定为新的标识;
将所述第一标签集合中所述最大频繁项集替换为所述新的标识,形成第二标签集合;
将用户、项目、第二标签集合相互对应,生成用户-项目-标签的三维张量数据,并将三者的关联权重设为1;
利用hosvd算法对所述三维张量数据进行分解,得到每个用户对每个项目标注的标签的权重值;
根据所述标签权重值,向第一用户推荐标签,供所述第一用户对项目标注标签使用,所述第一用户为第一次对所述第一项目标注标签的用户,所述第一项目为所有项目中的任意一个项目。
可选的,所述利用apriori算法寻找所述标签总集合中的最大频繁项集之前,还包括:
将标签数据转换成适用于apriori算法计算的格式。
可选的,所述利用apriori算法寻找所述标签总集合中的最大频繁项集,具体包括:
设定最小支持度,所述最小支持度为标签出现的频率的设定阈值;
将所有第一标签集合中出现频率大于所述最小支持度的标签生成频繁一项集,所述频繁一项集中每个元素为一个标签;
将两个不同的频繁一项集合并为一个二项集,遍历所有的频繁一项集,生成所有的二项集,所述二项集中包括两个标签,将所有二项集中两个标签同时出现的频率大于所述最小支持度的二项集生成频繁二项集;所述频繁二项集中每个元素为二项集中的两个标签;
将频繁k项集中的任意两个元素连接,形成k+1项集,所述频繁k项集中每个元素包括k个不同的标签,所述k+1项集中包括k+1个不同的标签;遍历所述频繁k项集中的所有元素,生成所有的k+1项集;其中k为大于1的整数;
判断是否所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度,得到第一判断结果;
当所述第一判断结果表示所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度时,确定所述频繁k项集为最大频繁项集;
当所述第一判断结果表示所有的k+1项集出现的频率不全小于所述最小支持度时,将所有k+1项集中的k+1个标签同时出现频率大于所述最小支持度的k+1项集生成频繁k+1项集,所述频繁k+1项集中每个元素包括k+1项集中的k+1个不同的标签。
可选的,所述利用hosvd算法对所述三维张量数据进行分解,具体包括:
将所述三维张量数据利用公式
利用奇异值分解算法对所述a1、a2、a3进行分解,得到
其中u(1)表示矩阵a1的左奇异特征矩阵,v1t表示矩阵a1的右奇异特征矩阵的转置矩阵,s1表示由矩阵a1奇异值组成的对角矩阵;u(2)表示矩阵a2的左奇异特征矩阵,v2t表示矩阵a2的右奇异特征矩阵的转置矩阵,s2表示由矩阵a2奇异值组成的对角矩阵;u(3)表示矩阵a3的左奇异特征矩阵,v3t表示矩阵a3的右奇异特征矩阵的转置矩阵,s3表示由矩阵a3奇异值组成的对角矩阵;
利用所述奇异值分解算法对所述左奇异特征矩阵u(1)、u(2)、u(3)降维,对应得到
利用公式
利用hosvd算法得到三维张量a降维后的近似张量
根据所述近似张量
可选的,所述根据所述标签权重值,向第一用户推荐标签,具体包括:
根据所述标签权重值,利用top-n算法得到高于其他权重值的n个权重值;
将所述n个权重值对应的标签推荐给所述第一用户。
一种标签推荐系统,所述系统包括:
标签总集合获取模块,用于依次获取所有用户对所有项目标注的标签总集合,所述标签总集合包括所有的第一标签集合,所述第一标签集合为一个用户对一个项目标注的标签集合,所述第一标签集包括m个标签,m为大于0的整数;
最大频繁项集获取模块,用于利用apriori算法获取所述标签总集合中的最大频繁项集;
新的标识设定模块,用于将所述最大频繁项集设定为新的标识;
第二标签集合形成模块,用于将所述第一标签集合中所述最大频繁项集替换为所述新的标识,形成第二标签集合;
三维张量数据生成模块,用于将用户、项目、第二标签集合相互对应,生成用户-项目-标签的三维张量数据,并将三者的关联权重设为1;
三维张量数据分解模块,用于利用hosvd算法对所述三维张量数据进行分解,得到每个用户对每个项目标注的标签的权重值;
标签推荐模块,用于根据所述标签权重值,向第一用户推荐标签,供所述第一用户对第一项目标注标签使用,所述第一用户为第一次对所述第一项目标注标签的用户,所述第一项目为所有项目中的任意一个项目。
可选的,所述系统还包括:
标签转换模块,用于利用apriori算法获取所述标签总集合中的最大频繁项集之前,将所有的第一标签集合中的所有标签均放于标签计算的位置,将标签数据转换成适用于apriori算法计算的格式。
可选的,所述最大频繁项集获取模块,具体包括:
最小支持度设定单元,用于设定最小支持度,所述最小支持度为标签出现的频率的设定阈值;
频繁一项集生成单元,用于将所有第一标签集合中出现频率大于所述最小支持度的标签生成频繁一项集,所述频繁一项集中每个元素为一个标签;
频繁二项集生成单元,用于将两个不同的频繁一项集合并为一个二项集,遍历所有的频繁一项集,生成所有的二项集,所述二项集中包括两个标签,将所有二项集中两个标签同时出现的频率大于所述最小支持度的二项集生成频繁二项集;所述频繁二项集中每个元素为二项集中的两个标签;
k+1项集生成单元,用于将频繁k项集中的任意两个元素连接,形成k+1项集,所述频繁k项集中每个元素包括k个不同的标签,所述k+1项集中包括k+1个不同的标签;遍历所述频繁k项集中的所有元素,生成所有的k+1项集;其中k为大于1的整数;
频率判断单元,用于判断是否所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度,得到第一判断结果;
最大频繁项集确定单元,用于当所述第一判断结果表示所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度时,确定所述频繁k项集为最大频繁项集;
频繁k+1项集生成单元,用于当所述第一判断结果表示所有的k+1项集出现的频率不全小于所述最小支持度时,将所有k+1项集中的k+1个标签同时出现频率大于所述最小支持度的k+1项集生成频繁k+1项集,所述频繁k+1项集中每个元素包括k+1项集中的k+1个不同的标签。
可选的,所述三维张量数据分解模块,具体包括:
第一分解单元,用于将所述三维张量数据利用公式
第二分解单元,用于利用奇异值分解算法对所述a1、a2、a3进行分解,得到
降维单元,用于利用所述奇异值分解算法对所述左奇异特征矩阵u(1)、u(2)、u(3)降维,对应得到
近似核心张量计算单元,用于利用公式
三维张量的近似张量获取单元,用于利用hosvd算法得到三维张量a降维后的近似张量
根据所述近似张量
可选的,所述标签推荐模块,具体包括:
标签权重筛选单元,用于根据所述标签权重值,利用top-n算法得到高于其他权重值的n个权重值;
标签推荐单元,用于将所述n个权重值对应的标签推荐给所述第一用户。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明充分利用频繁出现的标签信息,寻找标签与标签之间的关联性,使标签分类更加细致,以使推荐系统准确性获得提高。并且随着推荐列表数量的增大,命中率逐渐增大,能够有效提高推荐准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明标签推荐方法的流程图;
图2为本发明标签推荐方法中svd分解示意图;
图3为本发明标签推荐方法中降维后svd分解示意图;
图4为本发明标签推荐系统的结构图;
图5为本发明标签推荐方法中将张量a沿着三个模方向进行分解的示意图;
图6为本发明标签推荐方法中利用hosvd算法得到近似张量
图7为本发明标签推荐方法中推荐标签后命中率比较图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明标签推荐方法的流程图。如图1所示,所述方法包括:
步骤101:获取用户标注的标签总集合。标签总集合包括所有用户对所有项目标注的标签,一个用户对一个项目标注的标签集合定义为第一标签集合,由于一个用户对一个项目标注的标签可能为多个,因此所述第一标签集合包括m个标签,m为大于0的整数,因此所述标签总集合包括所有的第一标签集合。例如,在一个电影推荐平台上,用户1对电影1标注的标签为“喜剧”、“动作”、“爱情”,得到的第一标签集合为{喜剧,动作,爱情};用户1对电影2标注的标签为“喜剧”、“惊悚”、“动作”,得到的第一标签集合为{喜剧,惊悚,动作};用户2对电影1所打的标签为“爱情”、“伦理”,得到的第一标签集合为{爱情,伦理};用户2对电影3标注的标签为“恐怖”、“动作”、“惊悚”,得到的第一标签集合为{恐怖,动作,惊悚};……;那么得到的标签总集合为{{喜剧,动作,爱情},{喜剧,惊悚,动作},{爱情,伦理},{恐怖,动作,惊悚},……}。
步骤102:寻找标签总集合的最大频繁项集。将所有的第一标签集合中的所有标签均放于标签计算的位置,将标签数据转换成适用于apriori算法计算的格式,然后利用apriori算法寻找所述标签总集合中的最大频繁项集。假设最大频繁项集包括n个标签,那么最大频繁项集是指满足以下两个条件的n项集:首先,n个标签同时被标注出现的频率大于最小支持度(设定阈值);其次,在最大频繁项集中添加任一元素构成n+1项集后,任一n+1项集中n+1个标签同时被标注出现的频率小于最小支持度。具体的寻找标签总集合的最大频繁项集的过程为:
设定最小支持度,所述最小支持度即为标签出现的频率的设定阈值;
将所有第一标签集合中出现频率大于所述最小支持度的标签生成频繁一项集,所述频繁一项集中每个元素为一个标签;也就是标签总集合中所有出现频率大于最小支持度的标签,即归为频繁一项集中的元素,以此形成频繁一项集;
将两个不同的频繁一项集合并为一个二项集,遍历所有的频繁一项集,生成所有的二项集,所述二项集中包括两个标签,将所有二项集中两个标签同时出现的频率大于所述最小支持度的二项集生成频繁二项集;所述频繁二项集中每个元素为二项集中的两个标签;此步骤即为寻找两个标签同时出现频率大于最小支持度的标签组合,将满足条件的标签组合归为频繁二项集的元素,以此形成频繁二项集;
将频繁k项集中的任意两个元素连接,形成k+1项集,所述频繁k项集中每个元素包括k个不同的标签,所述k+1项集中包括k+1个不同的标签;遍历所述频繁k项集中的所有元素,生成所有的k+1项集;其中k为大于1的整数;此步骤即为形成k+1项集的过程,通过向频繁k项集中加入其它频繁k项集中的一个元素,构成k+1项集,直至遍历所有的k项集,形成所有的k+1项集;
判断是否所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度,得到第一判断结果;
当所述第一判断结果表示所有的k+1项集中的k+1个标签同时出现的频率均小于所述最小支持度时,确定所述频繁k项集为最大频繁项集;
当所述第一判断结果表示所有的k+1项集出现的频率不全小于所述最小支持度时,将所有k+1项集中的k+1个标签同时出现频率大于所述最小支持度的k+1项集生成频繁k+1项集,所述频繁k+1项集中每个元素包括k+1项集中的k+1个不同的标签。此时需要进一步形成k+2项集,判断k+2项集中的k+2个标签同时出现的频率是否均大于最小支持度,以此判断k+1项集是否为最大频繁项集。
步骤103:将最大频繁项集设定为新的标识。也就是将最大频繁项集用新的代号代替。
步骤104:将第一标签集合中最大频繁项集替换为新的标识,对应得到第二标签集合。例如第一标签集合为{喜剧,爱情,动作,伦理,惊悚},最大频繁项集为{喜剧,爱情,伦理},最大频繁项集设定的新的标识可以为“m”,那么将第一标签集合中最大频繁项集替换为新的标识,得到的第二标签集合为{m,动作,惊悚},此时只包括三个元素。
步骤105:生成用户-项目-标签的三维张量。根据得到的第二标签集合与用户和项目相互对应,以此得到用户-项目-标签的三维张量数据,并将三者的关联权重设为1。
步骤106:利用hosvd算法对所述三维张量数据进行分解,得到每个用户对每个项目标注的标签的权重值。具体包括:
(1)将所述三维张量数据利用公式
(2)利用奇异值分解(singularvaluedecomposition,svd)算法对所述a1、a2、a3进行分解,得到
(3)利用svd算法对所述左奇异特征矩阵u(1)、u(2)、u(3)降维,对应得到
(4)利用公式
(5)利用hosvd算法得到三维张量a降维后的近似张量
svd的基本原理:
首先,在采用svd技术开始对矩阵进行分解之前,需要对该矩阵的空白项进行填充,填充值一般采用项目的评分均值,以得到一个稠密矩阵。假设未填充前的矩阵为r∈rm×n,填充后为r′,则r′的svd公式为:r′=usvt其中,u∈rm×m和vt∈rn×n都是正交矩阵,分别代表矩阵r′的左奇异特征矩阵和右奇异特征矩阵;s∈rm×n是一个对角矩阵,且矩阵r′的所有奇异值均分布在该对角矩阵的对角线上,并且它们都按照从大到小的顺序进行排列,而且所有的奇异值体现着矩阵r′总的信息量。图2为本发明标签推荐方法中svd分解示意图;svd分解示意图如图2所示。
采用svd对矩阵r′进行降维,最主要的是需要保证降维后的矩阵与原始矩阵的信息量相差不大。由于矩阵s中的所有的奇异值体现着原始矩阵中包含的总的信息量,因此可以采用奇异值平方和来对信息量进行定义,并通过设定阈值来保证有效信息量。假设所有的奇异值的平方和为p,前f(f为整数)个奇异值的平方和为pf,则信息量的阈值σ=pf/p,通常要求σ≥99%,以此来确定f的值。然后对角矩阵s就成为仅保留前f个奇异值的新对角矩阵sf,再分别从u和v中选取前f个左右奇异值向量,构成新的uk和vk,此时,通过uf、vf和sf就可以构成降维后的矩阵rf,即:
rf近似于原始矩阵r′,用户u对项目i的预测评分就可以通过公式上述来计算,降维后的矩阵svd示意图如图3所示;图3为本发明标签推荐方法中降维后svd分解示意图;
svd降维的基本步骤为:
采用svd对r′进行分解后得到u、s和v;
保留对角矩阵s的前f个奇异值,得到新的矩阵sf;
将u和v的前f个特征向量保留,得到uf和vf;
采用公式
将svd应用于推荐算法中的优点是:可有效降低数据维度,简化评分矩阵,使算法预测准确性提升。缺点是:随着用户和项目的数量与日俱增,并且数据稀疏性非常大时,已经填充好的评分矩阵占用的存储内存非常大,使得算法的计算速度变得非常缓慢,实际应用中难以接受。
高阶奇异值分解(highordersingularvaluedecomposition,hosvd)是由svd演变而来的,svd针对的是二阶矩阵数据的降维分解,而hosvd是对高阶张量数据进行降维分解的一种关键算法,并可应用于多个应用领域。
hosvd算法对张量分解后得到一个核心张量和n个矩阵的乘积形式。以三阶张量a为例,进行hosvd算法分解后得到:a=s×u(1)×u(2)×u(3)
其中,u(1)、u(2)、u(3)均是正交矩阵,
步骤107:向第一用户推荐标签。根据步骤106得到的标签权重值,利用top-n算法得到高于其他权重值的n个权重值;top-n算法即从研究对象中得到所需的数据,对其进行排序,从排序列表中选取最大或最小的n个数据,这就是一个top-n算法。例如当n=5时,筛选权重最高的前5个权重值,将所述5个权重值对应的标签推荐给所述第一用户。第一用户是指第一次对某个项目标注标签的用户。例如筛选出的权重最高的5个标签为:喜剧,(爱情,伦理),(惊悚,恐怖),动作,感人,则当第一用户对未标注过标签的项目标注标签时,将上述五个标签推荐给用户,供用户选择。
对于此推荐方法的评价指标可以采用命中率来进行评价。当用户对项目进行标签标注时,选择了推荐列表中的标签,则为命中;客户未选择推荐列表中的标签,自己定义新的标签对项目进行标注,则为未命中。通过计算命中率来评价此推荐方法的准确度。
图4为本发明标签推荐系统的结构图。如图4所示,所述结构包括:
标签总集合获取模块401,用于依次获取所有用户对所有项目标注的标签总集合,所述标签总集合包括所有的第一标签集合,所述第一标签集合为一个用户对一个项目标注的标签结合,所述第一标签集合包括m个标签,m为大于0的整数;
最大频繁项集获取模块402,用于利用apriori算法获取所述标签总集合中的最大频繁项集;
新的标识设定模块403,用于将所述最大频繁项集设定为新的标识;
第二标签集合形成模块404,用于将所述第一标签集合中所述最大频繁项集替换为所述新的标识,形成第二标签集合;
三维张量数据生成模块405,用于将用户、项目、第二标签集合相互对应,生成用户-项目-标签的三维张量数据,并将三者的关联权重设为1;
三维张量数据分解模块406,用于利用hosvd算法对所述三维张量数据进行分解,得到每个用户对每个项目标注的标签的权重值;
标签推荐模块407,用于根据所述标签权重值,向第一用户推荐标签,供所述第一用户对第一项目标注标签使用。
图5为本发明标签推荐方法中将张量a沿着三个模方向进行分解的示意图。如图5所示,将三维张量数据
图6为本发明标签推荐方法中利用hosvd算法得到近似张量
图7为本发明标签推荐方法中推荐标签后命中率比较图。
实验采用的数据集为movielens网站上的ml-20m数据集,此数据集是在15年5月产生的,记录的是1995年到2015年期间用户对电影进行的评分及标签的行为数据,从中抽取了671个用户、915部电影、460个标签及1296条用户对项目进行标签标注的信息作为实验数据,本章主要针对预测准确性进行研究。为了验证结果的准确性,对数据进行了训练测试,本文随机分了5份数据集,分别是d1,d2,d3,d4和d5,并将每份均分割为训练集和测试集,分割比例是9:1。
采用的评价指标为命中率。命中率(hitratio)是推荐系统中用于评估推荐准确性的一个指标。命中率为推荐后的推荐列表中被命中的项目在所有被标注过标签的项目中占有的比例。其定义公式如下:
推荐列表
采用apriori算法对数据集进行分析后的用户、项目和标签数如表1所示。可以看出,采用本发明方法对标签分析后,元组数目得到了明显降低。因为原来经常重复出现的多个标签被定义成一个新标签,那么原数据中的多个用户-项目-标签就可以构成一个用户-项目-新标签,从而降低了三元组数目。
表1用户、项目和标签数
采用hosvd算法分别对上述计算前后的用户-项目-标签张量数据进行计算,得到了命中率随推荐列表长度的变化结果如附图7所示,该结果是在5个数据集上分别计算后求平均值所得。
从图7可以看出,预处理前后,随着推荐列表数量的增大,命中率hitratio均逐渐增大。而在对应的推荐列表上,预处理后的命中率较预处理前有明显提高。当top-n到达70时,预处理后得到的命中率的增长速度逐渐增大。该结果表明,本发明的方法能够有效提高推荐准确性。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。