一种基于社交网络用户属性的主题推荐方法与流程

    专利2022-07-08  79


    本发明属于计算机应用与互联网技术领域,涉及一种基于社交网络用户属性的主题推荐方法。



    背景技术:

    社交网站作为新型的互联网应用,为人们提供了信息交流和分享的便捷平台,近些年,随着社交网络的兴起,facebook,twitter,微博等社交平台的崛起,社交网络发展迅速,大量用户涌入社交平台,形成了复杂的网络结构。

    社交媒体的发展已经改变了人们的生活方式,人们更倾向于在社交网络上关注自己的兴趣爱好,分享自己的喜欢的事物,除此以外,用户的友邻关系也能给主题挖掘带来相当大的价值。从数以亿计的用户发表的短文本和网络结构中提取出精确的主题信息,对个性化推荐,舆情引导,营销策略规划有重要的指导意义,产生了巨大的商业价值。

    社交网络主题推荐方法是为了确定社交用户的兴趣倾向的一种主题挖掘方法,可以将社交用户的历史推文概括性地转换为特定的主题,使一些商家或平台能更加直观的了解用户的喜好,制定合理的营销策略。本专利的目的是挖掘社交用户的主题信息,为商家用户推荐、舆论引导打下基础。

    目前的社交用户主题推荐方法包括两个方面:主题建模和兴趣挖掘,社交网络。首先,raghuram等利用用户特征,推文特征和时间序列特征对社交用户主题进行分类,虽然作者加入了时间维度,使得分类结果更准确,但是对于用户属性的提取太简单,而且分类结果不具有普适性。其次,piao等认为社交网络不仅仅存在主动发推文的活跃用户,还有一些只消费关注者信息,不发表任何推文的群体,称为“被动用户”,作者将这些“被动用户”的个人简介和维基百科结合,提取用户兴趣,由于推特和微博在个人信息上的处理截然不同,该方法容易被简介中与兴趣无关的个人描述误导。



    技术实现要素:

    本发明目的是解决现有技术中的不足,提供一种基于社交网络用户属性的主题推荐方法。

    本发明方法包括以下步骤:

    步骤(1).获取用户的微博内容,对微博进行预处理,为后续向量化做准备;

    步骤(2).过滤用户,剔除不活跃的用户和僵尸用户,标注数据集;

    步骤(3).采用lda模型求出用户微博的主题概率分布,得到最初的主题分布;

    步骤(4).利用若干已标记的微博训练集求得不同性别在不同主题下的变异因子,与步骤(3)的主题分布结合得到主题因子;

    步骤(5).计算用户与友邻关系的亲密度,评价友邻用户的影响力,得到置信度;

    步骤(6).利用分词软件提取个人描述和标签的关键词,转换成向量矩阵,求得相似性因子;

    步骤(7).将上述三个因子融合得到用户主题模型。

    步骤(1)具体是:

    (1.1)利用爬虫工具爬取微博数据t、用户属性u和用户友邻关系r到关系型数据库中;

    (1.2)对微博数据t进行预处理,使用正则表达式过滤特殊的字符和字段,将英文统一为小写;

    所述的特殊的字符和字段,包括“@xxx”、“[表情符号]”、超链接;其中,“@xxx”表示微博正文或评论中提到某一用户或对用户说的话,以引起该用户注意;“[表情符号]”是指微博中特有的表情,代表发帖人内心的想法,可以是开心,难受,惊恐等;超链接一般指http和https协议下的链接,通过点击链接可以转到第三方页面,如:https://weibo.com/;

    (1.3)定义字典dictuser,用户user的id为键,预处理完成的微博数据w为键对应的值;

    (1.4)将字典dictuser转换成缓存,以便后续使用。

    步骤(2)具体是:

    (2.1)过滤用户标签或个人描述为空的用户;

    (2.2)过滤不符合规则的用户性别;

    (2.3)过滤不活跃用户或一段时间未上线用户;活跃度nt表示用户最近一年内发布、转发和评论微博总数;nmonth表示一年中活跃的月份数,是指用户在一年中最早发微博和最晚发微博的时间间隔;如果active小于阈值σa,属于不活跃用户,活跃度的阈值σa=15~30;如果超过一年未发布、转发和评论微博,则属于未上线用户;

    (2.4)过滤粉丝数小于粉丝阈值σf的用户,设定σf=30~100;

    (2.5)采用人工标注的方法生成标记数据集utopic={user,topic},user表示用户,topic表示标注的主题信息。

    步骤(3)具体是:

    (3.1)使用现有的lda模型进行主题预测,包括python的第三方库gensim;

    (3.2)设定lda模型的参数,对步骤(1)中得到的字典dictuser进行遍历,利用dictuser中用户user对应的微博数据w对lda模型建模;

    (3.3)训练lda模型,得到用户user对应的主题分布pt=(pt1,pt2,…,ptn)及其概率值其中n是预测的主题个数,在lda模型参数中设置;

    (3.4)筛选主题,将pt中的概率值probpt小于概率阈值σp的主题剔除,得到最终的初始主题分布的概率值σp=0.01~0.02;

    按概率从大到小排序:

    其中,表示第m个主题,表示第m个主题对应的概率值,m=1,2,…,m,m为筛选后主题个数;

    (3.5)判断字典中的用户user是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(3.2)~(3.4),得到dicttopic={user,prt};其中,user=(user1,user2,…,userk),prt=(prt1,prt2,…,prtk),userk表示第k个用户,prtk表示第k个用户的初始主题分布,k=1,2,…,k,k是用户的个数。

    步骤(4)具体是:

    (4.1)选取多个已标记主题信息的男性和女性用户集合,建立用户列表user_var=(vuser1,user2,…,vuserj),其中,vuserj第j个用户,j=1,2,…,j,j为选取的用户个数;

    (4.2)遍历用户列表user_var,计算影响力inf:第j个用户影响力表示粉丝数,表示关注数;

    (4.3)判断用户列表是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.2),得到dictinf={user_var,inf},其中键是选取的标记用户,值是求得的影响力;

    (4.4)遍历主题列表topics,topics=(topic1,topic2,…,topicl),其中topicl表示第l个主题,l=1,2,…,l,l为已标记的所有主题个数;

    计算某一个主题信息下的男性用户和女性用户的平均值meantopic;

    (4.5)计算某一个主题信息下的男性用户和女性用户的标准差值standardtopic;

    (4.6)利用变异系数公式计算某个主题下的男性和女性的变异系数

    (4.7)判断主题列表中的主题是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.4)~(4.6),得到变异系数集合v(gender)=[v1,v2,…,vl];

    (4.8)利用正则化公式,更新变异系数集合v(gender),将值的范围控制在(0,1)内:

    l=1,2,…,l;该方法在一般的正则化公式基础上添加了修改,在分子处加1,目的是使范围严格控制在(0,1)内,不包括边界;

    (4.9)遍历字典dicttopic,判断每个用户的性别对应的主题变异系数,如果vl大于0.15,则将两个值相加,更新到对应的值;

    (4.10)判断字典是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.9),得到最终更新完毕的dicttopic={user,prt}。

    步骤(5)具体是:

    (5.1)遍历待提取主题的用户列表users,使用步骤(4.2)中的公式计算用户影响力,过滤低于阈值σu的用户,σu=0.4~0.5,得到后续迭代更新所需要的初始种子用户集合seedu=(seedu1,seedu2,…,seedup)和对应的影响力值seedup表示第p个种子用户,p=1,2,…,p,p为种子用户的个数;

    (5.2)遍历种子用户集合seedu,选取对应的粉丝列表表示第q个粉丝,q=1,2,…,q,q为粉丝个数;

    (5.3)遍历粉丝列表,处理粉丝的微博t,统计@种子用户的次数

    (5.4)统计粉丝转发种子用户微博的次数

    (5.5)统计粉丝评论种子用户微博的次数

    (5.6)将三个变量结合,得到粉丝亲密度

    (5.7)将亲密度和影响力相加得到每个粉丝对应的种子用户得分

    (5.8)判断种子列表的用户是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.2)~(5.7),得到用户得分集合为第q粉丝得分,q=1,2,…,q;

    (5.9)遍历用户列表users,如果是非种子用户,对关注列表做以下操作;

    (5.10)遍历关注列表,如果关注用户followu的邻居neighb与其有相同的主题信息,则累加邻居用户得分;

    (5.11)根据步骤(5.3)~(5.6)计算他们之间的亲密度和影响力,得到该关注用户的最终用户得分:

    (5.12)将scoreufollwu取对数得到置信度

    (5.13)判断关注列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.10)~(5.12),得到某个用户的置信度集合其中表示第s个关注用户的置信度,s=1,2,…,s,s为关注用户个数;

    (5.14)判断用户列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.9)~(5.13),得到所有用户的置信度集合γ=(γ1,γ2,…,γk);γk表示第k个用户的置信度,k=1,2,…,k;

    (5.15)迭代更新种子用户,在原来的用户得分上加入关注者的用户得分。

    步骤(6)具体是:

    (6.1)遍历用户列表users,对个人描述和标签做预处理,采用步骤(1.2)的方法过滤特殊字符、字段,利用jieba分词工具分词,进行词性筛选,选取某一类词作为关键词列表kw=(kw1,kw2,…,kwg),其中kwg表示第g个词,g=1,2,…,g,g为关键词的个数;

    (6.2)利用word2vec对关键词进行向量化,使用tencent_ailab_chineseembedd-ing作为语料库,得到关键词向量矩阵km=(km1,km2,…,kmr),其中kmr表示第r个向量,r=1,2,…,r,r为矩阵的向量个数;

    (6.3)对主题列表的主题进行向量化,得到主题向量化矩阵tm=(tm1,tm2,…,tmr);

    (6.4)使用欧氏距离计算每个关键词与主题的相似性,得到关键词-主题映射θg:kwg→topicg,欧氏距离t表示转置;

    (6.5)利用公式计算相似因子α,得到相似度因子分布

    mr∈km,nr∈tm;

    (6.6)判断用户列表中的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(6.1)~(6.5),得到用户的相似度因子集合α={α1,α2,…,αk}。

    步骤(7)具体是:

    (7.1)遍历用户列表users,将步骤(6.6)得到的相似度因子与步骤(4.9)的主题概率分布结合,对于每一个主题值如果通过步骤(6.4)的映射θg得到的主题topicg与某一个初始主题相同,则进行如下操作:其中,num表示在某一个主题下相同的个数;

    (7.2)遍历用户userk的主题列表,对每个主题做步骤(7.1)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    (7.3)如果关注者与用户处于相同的主题,则进行如下操作:

    userk和users在相同整体下,则func(userk,users)=1,否则func(userk,users)=0;

    (7.4)遍历用户userk的主题列表,对每个主题做步骤(7.3)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    (7.5)将intvalk中的值进行与步骤(4.8)相同的正则化处理,使之控制在(0,1)范围内,并进行排序,筛选掉值小于σp的主题,得到userk最终的主题分布:

    (7.6)判断用户列表的用户是否处理完毕,如果是,则停止遍历;否则,重复执行步骤(7.1)~(7.5),得到主题分布集合inte=(inte1,inte2,…,intek)。

    至此,社交用户的主题信息推荐完毕。

    本发明方法利用大数据时代获取数据的便利性,提取用户基本资料、用户关系数据和用户微博。在分析用户推文的基础上加入两个新的元素,一是用户的性别、个人描述等基本属性,二是用户的网络特征,针对以上三个因素构建动态权重主题模型,预测用户的主题分布并进行标注。本发明利用用户的友邻结构、个人属性,提高了推荐准确度。

    附图说明

    图1本发明方法流程图;

    图2微博信息预处理流程图;

    图3过滤用户和标注用户流程图;

    图4利用lda生成初始主题分布流程图;

    图5利用标注数据集求变异因子流程图;

    图6亲密度计算和影响力评价流程图;

    图7向量化个人描述和标签流程图;

    图8将三个因子融合成最终的主题模型流程图。

    具体实施方式

    下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

    如图1所示,基于社交网络用户属性的主题推荐算法,将个人描述和标签向量化,与主题求得相似性作为相似性因子,定义为α,利用用户的性别求得不同主题下的变异因子,与初始主题分布结合得到变异因子β,利用社交用户的友邻关系,量化用户间亲密度和影响力,求得置信度因子γ,最后将三者融合得到用户主题模型。

    该方法包含以下步骤:

    步骤(1).获取用户的微博内容,对微博进行预处理,为后续向量化做准备;如图2所示,具体步骤是:

    步骤(1.1)利用爬虫工具爬取微博数据t、用户属性u和用户友邻关系r到关系型数据库中;

    步骤(1.2)对微博数据t进行预处理,使用正则表达式过滤特殊的字符和字段,将英文统一为小写;

    特殊的字符和字段包括“@xxx”、“[表情符号]”、超链接;其中,“@xxx”表示微博正文或评论中提到某一用户或对用户说的话,以引起该用户注意;“[表情符号]”是指微博中特有的表情,代表发帖人内心的想法,可以是开心,难受,惊恐等;超链接一般指http和https协议下的链接,通过点击链接可以转到第三方页面,如:https://weibo.com/;

    (1.3)定义字典dictuser,用户user的id为键,预处理完成的微博数据w为键对应的值;

    (1.4)将字典dictuser转换成缓存,以便后续使用。

    步骤(2).过滤用户,剔除不活跃的用户和僵尸用户,标注数据集;如图3所示,具体步骤是:

    步骤(2.1)过滤用户标签或个人描述为空的用户;

    步骤(2.2)过滤不符合规则的用户性别:过滤用户性别属性值为0的用户,定义1为男性,2为女性,0为性别不明;

    步骤(2.3)过滤不活跃用户或一段时间未上线用户;活跃度nt表示用户最近一年内发布、转发和评论微博总数;nmonth表示一年中活跃的月份数,是指用户在一年中最早发微博和最晚发微博的时间间隔;如果active小于阈值σa,属于不活跃用户,活跃度的阈值20;如果超过一年未发布、转发和评论微博,则属于未上线用户;

    步骤(2.4)过滤粉丝数小于粉丝阈值50的用户;

    步骤(2.5)采用人工标注的方法生成标记数据集utopic={user,topic},user表示用户,topic表示标注的主题信息。

    步骤(3).采用lda模型求出用户微博的主题概率分布,得到最初的主题分布;如图4所示,具体步骤是:

    步骤(3.1)使用现有的lda模型进行主题预测,包括python的第三方库gensim;

    步骤(3.2)设定lda模型的参数,包括:预测主题个数,迭代次数,随机种子数,对步骤(1)中得到的字典dictuser进行遍历,利用字典dictuser中用户user对应的微博数据w对lda建模,包含原创,转发和评论,将每个用户的所有博文当成lda的语料库,求得主题的分布以及概率值;

    步骤(3.3)训练lda模型,得到用户user对应的主题分布pt=(pt1,pt2,…,ptn)及其概率值其中n是预测的主题个数,在lda模型参数中设置;

    步骤(3.4)筛选主题,将pt中的概率值probpt小于概率阈值0.015的主题剔除,得到最终的初始主题分布的概率值

    按概率从大到小排序:

    其中,表示第m个主题,表示第m个主题对应的概率值,m=1,2,…,m,m为筛选后主题个数;

    步骤(3.5)判断字典中的用户user是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(3.2)~(3.4),得到dicttopic={user,prt};其中,user=(user1,user2,…,userk),prt=(prt1,prt2,…,prtk),userk表示第k个用户,prtk表示第k个用户的初始主题分布,k=1,2,…,k,k是用户的个数。

    步骤(4).利用若干已标记的微博训练集求得不同性别在不同主题下的变异因子,与步骤(3)的主题分布结合得到主题因子;如图5所示,具体步骤是:

    步骤(4.1)选取多个已标记主题信息的男性和女性用户集合,建立用户列表user_var=(vuser1,user2,…,vuserj),其中,vuserj第j个用户,j=1,2,…,j,j为选取的用户个数;

    步骤(4.2)遍历用户列表user_var,计算影响力inf:第j个用户影响力表示粉丝数,表示关注数;一般地,关注的个数都大于0,否则,剔除该用户;

    步骤(4.3)判断用户列表是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.2),得到dictinf={user_var,inf},以键值对形式存储,键是选取的标记用户,值是求得的影响力,范围是(0,max_int),max_int表示计算机中能表示的最大整型数字;

    步骤(4.4)遍历主题列表topics,topics=(topic1,topic2,…,topicl),其中topicl表示第l个主题,l=1,2,…,l,l为已标记的所有主题个数;

    计算某一个主题信息下的男性用户和女性用户的平均值meantopic;

    步骤(4.5)计算某一个主题信息下的男性用户和女性用户的标准差值standardtopic;

    步骤(4.6)利用变异系数公式计算某个主题下的男性和女性的变异系数

    步骤(4.7)判断主题列表中的主题是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.4)~(4.6),得到变异系数集合v(gender)=[v1,v2,…,vl];

    步骤(4.8)利用正则化公式,更新变异系数集合v(gender),将值的范围控制在(0,1)内:

    l=1,2,…,l;该方法在一般的正则化公式基础上添加了修改,在分子处加1,目的是使范围严格控制在(0,1)内,不包括边界;

    步骤(4.9)遍历字典dicttopic,判断每个用户的性别对应的主题变异系数,如果vl大于0.15,说明该性别下大多数用户倾向于这个主题,则将两个值相加,更新到对应的值;

    步骤(4.10)判断字典是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.9),得到最终更新完毕的dicttopic={user,prt},以键值对形式存储。

    步骤(5).计算用户与友邻关系的亲密度,评价友邻用户的影响力,得到置信度;如图6所示,具体步骤是:

    步骤(5.1)遍历待提取主题的用户列表users,使用步骤(4.2)中的公式计算用户影响力,过滤低于阈值0.45的用户,得到后续迭代更新所需要的初始种子用户集合seedu=(seedu1,seedu2,…,seedup)和对应的影响力值seedup表示第p个种子用户,p=1,2,…,p,p为种子用户的个数;

    步骤(5.2)遍历种子用户集合seedu,选取对应的粉丝列表表示第q个粉丝,q=1,2,…,q,q为粉丝个数;

    步骤(5.3)遍历粉丝列表,处理粉丝的微博t,统计@种子用户的次数次数越多代表粉丝对该用户的互动频繁,了解更深,主题信息更具参考性;

    步骤(5.4)统计粉丝转发种子用户微博的次数转发次数越多代表粉丝对该用户的主题感兴趣;

    步骤(5.5)统计粉丝评论种子用户微博的次数

    步骤(5.6)将三个变量结合,得到粉丝亲密度

    步骤(5.7)将亲密度和影响力相加得到每个粉丝对应的种子用户得分

    步骤(5.8)判断种子列表的用户是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.2)~(5.7),得到用户得分集合为第q粉丝得分,q=1,2,…,q;

    步骤(5.9)遍历用户列表users,如果是非种子用户,对关注列表做以下操作;

    步骤(5.10)遍历关注列表,如果关注用户followu的邻居neighb与其有相同的主题信息,说明两者具有相同爱好,邻居用户的用户得分对目标用户的主题信息具有一定贡献,因此累加邻居用户得分;

    步骤(5.11)根据步骤(5.3)~(5.6)计算他们之间的亲密度和影响力,得到该关注用户的最终用户得分:

    步骤(5.12)将scoreufollwu取对数得到置信度使不同的分数差距较小;

    步骤(5.13)判断关注列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.10)~(5.12),得到某个用户的置信度集合其中表示第s个关注用户的置信度,s=1,2,…,s,s为关注用户个数;

    步骤(5.14)判断用户列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.9)~(5.13),得到所有用户的置信度集合γ=(γ1,γ2,…,γk),集合中的每个元素代表该用户的邻居主题对于其主题信息的贡献程度;γk表示第k个用户的置信度,k=1,2,…,k;

    步骤(5.15)迭代更新种子用户,在原来的用户得分上加入关注者的用户得分。

    步骤(6).利用分词软件提取个人描述和标签的关键词,转换成向量矩阵,求得相似性因子;如图7所示,具体步骤是:

    步骤(6.1)遍历用户列表users,对个人描述和标签做预处理,采用步骤(1.2)的方法过滤特殊字符、字段,利用jieba分词工具分词,进行词性筛选,包括名词、动名词、动词、形容词、副词等,本实施例选取名词作为关键词列表kw=(kw1,kw2,…,kwg),因为名词最具有主题信息代表性,其中kwg表示第g个词,g=1,2,…,g,g为关键词的个数;

    步骤(6.2)利用word2vec对关键词进行向量化,使用tencent_ailab_chineseembedd-ing作为语料库,该语料库包含腾讯新闻,百度百科,维基百科等,覆盖范围广,得到关键词向量矩阵km=(km1,km2,…,kmr),其中kmr表示第r个向量,r=1,2,…,r,r为矩阵的向量个数;

    步骤(6.3)对主题列表的主题进行向量化,得到主题向量化矩阵tm=(tm1,tm2,…,tmr);

    步骤(6.4)使用欧氏距离计算每个关键词与主题的相似性,得到关键词-主题映射θg:kwg→topicg,欧氏距离t表示转置;

    步骤(6.5)利用公式计算相似因子α,得到相似度因子分布

    mr∈km,nr∈tm;

    步骤(6.6)判断用户列表中的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(6.1)~(6.5),得到用户的相似度因子集合α={α1,α2,…,αk}。

    步骤(7).将上述三个因子融合得到用户主题模型;如图8所示,具体步骤是:

    步骤(7.1)遍历用户列表users,将步骤(6.6)得到的相似度因子与步骤(4.9)的主题概率分布结合,其中已经与β相加,对于每一个主题值如果通过步骤(6.4)的映射θg得到的主题topicg与某一个初始主题相同,则进行如下操作:其中,num表示在某一个主题下相同的个数;

    步骤(7.2)遍历用户userk的主题列表,对每个主题做步骤(7.1)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    步骤(7.3)如果关注者与用户处于相同的主题,则进行如下操作:

    userk和users在相同整体下,则func(userk,users)=1,否则func(userk,users)=0;

    步骤(7.4)遍历用户userk的主题列表,对每个主题做步骤(7.3)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    步骤(7.5)将intvalk中的值进行与步骤(4.8)相同的正则化处理,使之控制在(0,1)范围内,并进行排序,筛选掉值小于σp的主题,得到userk最终的主题分布:

    步骤(7.6)判断用户列表的用户是否处理完毕,如果是,则停止遍历;否则,重复执行步骤(7.1)~(7.5),得到主题分布集合inte=(inte1,inte2,…,intek)。

    至此,社交用户的主题信息推荐完毕。

    以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。


    技术特征:

    1.一种基于社交网络用户属性的主题推荐方法,其特征在于,该方法包括以下步骤:

    步骤(1).获取用户的微博内容,对微博进行预处理;

    步骤(2).过滤用户,剔除不活跃的用户和僵尸用户,标注数据集;

    步骤(3).采用lda模型求出用户微博的主题概率分布,得到最初的主题分布;

    步骤(4).利用已标记的微博训练集求得不同性别在不同主题下的变异因子,与主题分布结合得到主题因子;

    步骤(5).计算用户与友邻关系的亲密度,评价友邻用户的影响力,得到置信度;

    步骤(6).利用分词软件提取个人描述和标签的关键词,转换成向量矩阵,求得相似性因子;

    步骤(7).将上述三个因子融合得到用户主题模型。

    2.如权利要求1所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(1)具体是:

    (1.1)利用爬虫工具爬取微博数据t、用户属性u和用户友邻关系r到关系型数据库中;

    (1.2)对微博数据t进行预处理,使用正则表达式过滤特殊的字符和字段,将英文统一为小写;

    (1.3)定义字典dictuser,用户user的id为键,预处理完成的微博数据w为键对应的值;

    (1.4)将字典dictuser转换成缓存。

    3.如权利要求2所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(2)具体是:

    (2.1)过滤用户标签或个人描述为空的用户;

    (2.2)过滤不符合规则的用户性别;

    (2.3)过滤不活跃用户或一段时间未上线用户;活跃度nt表示用户最近一年内发布、转发和评论微博总数;nmonth表示一年中活跃的月份数,是指用户在一年中最早发微博和最晚发微博的时间间隔;如果active小于阈值σa,属于不活跃用户,活跃度的阈值σa=15~30;如果超过一年未发布、转发和评论微博,则属于未上线用户;

    (2.4)过滤粉丝数小于粉丝阈值σf的用户,设定σf=30~100;

    (2.5)采用人工标注的方法生成标记数据集utopic={user,topic},user表示用户,topic表示标注的主题信息。

    4.如权利要求3所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(3)具体是:

    (3.1)使用现有的lda模型进行主题预测;

    (3.2)设定lda模型的参数,对步骤(1)中得到的字典dictuser进行遍历,利用dictuser中用户user对应的微博数据w对lda模型建模;

    (3.3)训练lda模型,得到用户user对应的主题分布pt=(pt1,pt2,…,ptn)及其概率值其中n是预测的主题个数,在lda模型参数中设置;

    (3.4)筛选主题,将pt中的概率值probpt小于概率阈值σp的主题剔除,得到最终的初始主题分布的概率值σp=0.01~0.02;

    按概率从大到小排序:

    其中,表示第m个主题,表示第m个主题对应的概率值,m=1,2,…,m,m为筛选后主题个数;

    (3.5)判断字典中的用户user是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(3.2)~(3.4),得到dicttopic={user,prt};其中,user=(user1,user2,…,userk),prt=(prt1,prt2,…,prtk),userk表示第k个用户,prtk表示第k个用户的初始主题分布,k=1,2,…,k,k是用户的个数。

    5.如权利要求4所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(4)具体是:

    (4.1)选取多个已标记主题信息的男性和女性用户集合,建立用户列表user_var=(vuser1,user2,…,vuserj),其中,vuserj第j个用户,j=1,2,…,j,j为选取的用户个数;

    (4.2)遍历用户列表user_var,计算影响力inf:第j个用户影响力表示粉丝数,表示关注数;

    (4.3)判断用户列表是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.2),得到dictinf={user_var,inf},其中键是选取的标记用户,值是求得的影响力;

    (4.4)遍历主题列表topics,topics=(topic1,topic2,…,topicl),其中topicl表示第l个主题,l=1,2,…,l,l为已标记的所有主题个数;

    计算某一个主题信息下的男性用户和女性用户的平均值meantopic;

    (4.5)计算某一个主题信息下的男性用户和女性用户的标准差值standardtopic;

    (4.6)利用变异系数公式计算某个主题下的男性和女性的变异系数

    (4.7)判断主题列表中的主题是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.4)~(4.6),得到变异系数集合v(gender)=[v1,v2,…,vl];

    (4.8)利用正则化公式,更新变异系数集合v(gender),将值的范围控制在(0,1)内:

    (4.9)遍历字典dicttopic,判断每个用户的性别对应的主题变异系数,如果vl大于0.15,则将两个值相加,更新到对应的值;

    (4.10)判断字典是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(4.9),得到最终更新完毕的dicttopic={user,prt}。

    6.如权利要求5所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(5)具体是:

    (5.1)遍历待提取主题的用户列表users,计算用户影响力,过滤低于阈值σu的用户,σu=0.4~0.5,得到后续迭代更新所需要的初始种子用户集合seedu=(seedu1,seedu2,…,seedup)和对应的影响力值seedup表示第p个种子用户,p=1,2,…,p,p为种子用户的个数;

    (5.2)遍历种子用户集合seedu,选取对应的粉丝列表表示第q个粉丝,q=1,2,…,q,q为粉丝个数;

    (5.3)遍历粉丝列表,处理粉丝的微博t,统计@种子用户的次数

    (5.4)统计粉丝转发种子用户微博的次数

    (5.5)统计粉丝评论种子用户微博的次数

    (5.6)将三个变量结合,得到粉丝亲密度

    (5.7)将亲密度和影响力相加得到每个粉丝对应的种子用户得分

    (5.8)判断种子列表的用户是否都处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.2)~(5.7),得到用户得分集合为第q粉丝得分,q=1,2,…,q;

    (5.9)遍历用户列表users,如果是非种子用户,对关注列表做以下操作;

    (5.10)遍历关注列表,如果关注用户followu的邻居neighb与其有相同的主题信息,则累加邻居用户得分;

    (5.11)根据步骤(5.3)~(5.6)计算他们之间的亲密度和影响力,得到该关注用户的最终用户得分:

    (5.12)将scoreufollwu取对数得到置信度

    (5.13)判断关注列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.10)~(5.12),得到某个用户的置信度集合其中表示第s个关注用户的置信度,s=1,2,…,s,s为关注用户个数;

    (5.14)判断用户列表的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(5.9)~(5.13),得到所有用户的置信度集合γ=(γ1,γ2,…,γk);γk表示第k个用户的置信度,k=1,2,…,k;

    (5.15)迭代更新种子用户,在原来的用户得分上加入关注者的用户得分。

    7.如权利要求6所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(6)具体是:

    (6.1)遍历用户列表users,对个人描述和标签做预处理,采用步骤(1.2)的方法过滤特殊字符、字段,利用jieba分词工具分词,进行词性筛选,选取某一类词作为关键词列表kw=(kw1,kw2,…,kwg),其中kwg表示第g个词,g=1,2,…,g,g为关键词的个数;

    (6.2)利用word2vec对关键词进行向量化,使用tencent_ailab_chineseembedd-ing作为语料库,得到关键词向量矩阵km=(km1,km2,…,kmr),其中kmr表示第r个向量,r=1,2,…,r,r为矩阵的向量个数;

    (6.3)对主题列表的主题进行向量化,得到主题向量化矩阵tm=(tm1,tm2,…,tmr);

    (6.4)使用欧氏距离计算每个关键词与主题的相似性,得到关键词-主题映射θg:kwg→topicg,欧氏距离

    (6.5)利用公式计算相似因子α,得到相似度因子分布

    (6.6)判断用户列表中的用户是否处理完毕:如果处理完毕,则停止遍历;否则,重复执行步骤(6.1)~(6.5),得到用户的相似度因子集合α={α1,α2,…,αk}。

    8.如权利要求7所述的一种基于社交网络用户属性的主题推荐方法,其特征在于,步骤(7)具体是:

    (7.1)遍历用户列表users,将步骤(6.6)得到的相似度因子与步骤(4.9)的主题概率分布结合,对于每一个主题值如果通过步骤(6.4)的映射θg得到的主题topicg与某一个初始主题相同,则进行如下操作:其中,num表示在某一个主题下相同的个数;

    (7.2)遍历用户userk的主题列表,对每个主题做步骤(7.1)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    (7.3)如果关注者与用户处于相同的主题,则进行如下操作:

    userk和users在相同整体下,则func(userk,users)=1,否则func(userk,users)=0;

    (7.4)遍历用户userk的主题列表,对每个主题做步骤(7.3)的操作,判断是否处理完毕:如果处理完毕,则停止遍历;否则,继续执行,得到更新后的主题值:

    (7.5)将intvalk中的值进行与步骤(4.8)相同的正则化处理,使之控制在(0,1)范围内,并进行排序,筛选掉值小于σp的主题,得到userk最终的主题分布:

    (7.6)判断用户列表的用户是否处理完毕,如果是,则停止遍历;否则,重复执行步骤(7.1)~(7.5),得到主题分布集合inte=(inte1,inte2,…,intek)。

    技术总结
    本发明公开了一种基于社交网络用户属性的主题推荐方法。本发明方法首先获取用户的微博内容并预处理,过滤用户,标注数据集;采用LDA模型求出用户微博的主题概率分布,得到最初的主题分布,求得不同性别在不同主题下的变异因子,与主题分布结合得到主题因子;再计算用户与友邻关系的亲密度,评价友邻用户的影响力,得到置信度;利用分词软件提取个人描述和标签的关键词,转换成向量矩阵,求得相似性因子;最后将上述三个因子融合得到用户主题模型。本发明方法利用大数据时代获取数据的便利性,提取用户基本资料、用户关系数据和用户微博,针对三个因素构建动态权重主题模型,预测用户的主题分布并进行标注,提高了推荐准确度。

    技术研发人员:徐向华;胡杰;王然;李平
    受保护的技术使用者:杭州电子科技大学
    技术研发日:2020.11.26
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-21338.html

    最新回复(0)