基于协同过滤的新闻推荐算法研究

2022-02-20 01:25李梅
电脑知识与技术 2022年34期

李梅

摘要:协同过滤算法分为ItemCF算法和UserCF算法,分别侧重物品和用户,常用于新闻推荐。文章介绍了这两个基础算法及实现的步骤,并列出了这两个算法的优缺点。通过新闻数据集20Newsgroups比较了ItemCF算法和UserCF算法在准确率、召回率、覆盖率及流行度这四个评价指标的值,ItemCF算法都低于UserCF算法。

关键词:新闻推荐;ItemCF算法;UserCF算法

中图分类号:TP312      文献标识码:A

文章编号:1009-3044(2022)34-0051-03

每天浏览新闻已经是大多数人的生活习惯,如何从海量的新闻中获取感兴趣的新闻,成为很多人关心的问题,可以节省大量时间,新闻推荐系统可以完美解决这个问题。下面介绍基于协同过滤的新闻推荐算法。

1 基于用户的协同过滤算法

基于用户的协同过滤算法(UserCF)在为大家推荐喜欢看的电影方面,如最近看得比较多的欧美大片,为喜欢听音乐人们推荐好听的歌曲,如WestLife的经典歌曲。UserCF算法影响深远,近年来,广泛应用于各种类别的新闻推荐。

1.1 基础算法

当人们需要在网上寻找自己需要的信息时,面对如此庞大的信息量,常会感到茫然,这时亟须一个推荐系统。通过用户间的大量对比,发现兴趣爱好等最相似的m个用户,采用相应的算法,将这m个用户感兴趣的item推荐给该用户,即为我们熟悉的基于用户的协同过滤算法(UserCF) 。

从UserCF算法的定义可以看出此算法经历两个步骤。

1) 第一步 ,对比大量用户,包括他们的购物行为等,经常去哪些店铺,经常点击哪类物品,发现与该用户兴趣爱好等相似的m个用户。

2) 第二步,把发现的这m个用户都有兴趣的并且该用户未涉猎过的这些item推荐给该用户。

第一个步骤的核心就是寻找相似的m个用户,找到后并计算他们之间的相似度。例如:现在有A、B、C、D四个用户,分别对a、b、c、d、e五个物品表达了自己的喜好程度(通过评分的高低来表现自己的喜好程度高低),而B用户由于工作需要推荐软件测试方面的书籍,这就需要计算发现B用戶的相似用户群,然后找到用户群喜欢的经常查看的但C未涉猎的软件测试方面的书籍推荐给B[1]。计算相似度可以使用Jaccard公式:

1.2 用户相似度计算的改进

生活中你会发现,两个人都购买了《三国演义》,不能体现这两个人的共同兴趣,因为这本名著老幼皆知,中国人买得很多,即热门物品对相似度的影响。再例如,两个人都买过《软件测试技术及项目案例实践》,这个购买行为就说明两人兴趣爱好相似,只有对软件测试感兴趣或者从事软件测试工作的人才会买这本书。因此,改进相似度计算公式。

def UserSimilarity(train):

W = dict()

for u in train.keys():

for v in train.keys():

if u == v:

continue

W[u][v] = len(train[u] & train[v])

W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)

return W

2 基于物品的协同过滤算法

基于物品的协同过滤算法(ItemCF),在某些网站中通过点击等行为,使用“Customers who  viewed this also viewed(看过还看过)”以及“Customers who viewed this item also bought(看过且买过)”来进行推荐。

2.1 基础算法

简单的抑或通俗解释,通过历史喜欢的item推荐与这个item相似的item,即物——物。从原理上我们可以得知:这个算法物——物的推荐方式,与目标用户的兴趣爱好并不存在某种之间联系。例如,要计算《傲慢与偏见》和《简·爱》两部电影之间的相似度,需要使用对这两部影片都有过评价的用户数据。UserCF算法中,需要找到行与行之间的相似度;ItemCF算法中,要找到列之间的相似度,这个是两者在找相似度方面的差别。ItemCF算法主要经历下面两个步骤:

1) 第一步,找到物品之间的相似度,通过倒排表等方式。

2) 计算推荐结果,同时过滤热门物品。

2.2 物品相似度计算的改进

根据前面的介绍,在计算物品的相似度矩阵中有个问题,如果物品j过于热门,就像大家熟悉的网红物品,有很多用户都给它进行了评分,则计算出的Wij就会很大。热门Item影响了推荐,包括明星、网红代言的这些Item都会有影响。为了避免推荐热门的物品,可以用下面的公式:

修改后的公式变化很大,减少了物品j的权重占比,还可以避免与网红热门商品相似的概率。这里假设:每个用户的兴趣爱好可能就那么几个,一个用户如果对某两个item感兴趣,则这两个item所属的范围是有限的,但是大量用户对相关item感兴趣,例如都喜欢软件测试书籍,则具有一定相似度。利用修改后的公式计算相似度矩阵与评分矩阵的乘积,与优化前的结果是一样的。

3 UserCF和ItemCF的综合比较

由前面的分析,可以看出UserCF和ItemCF这两个算法的推荐实现思路:UserCF算法先要利用相关算法发现m个用户,即用户——用户,以此为第一步,然后将m个相似用户评分item在目标用户没有评分的item推荐给用户;ItemCF算法要发现大量item之间的相似度,如不同品牌的长款大衣,根据这些 item的相似度进行推荐,即人们熟悉的物——物。由此可以看到:

UserCF算法侧重用户所处的群体,他们有相似的爱好,在进行推荐时也是这个群体中大家极力推崇的,通过历史行为计算得到[2]。

ItemCF算法侧重用户以前行为的历史item,用户自己的喜好变化对用户影响更大,偏向于个性化。

下面从三个方面对比UserCF和ItemCF算法。

1) 在适用场景上的比较

ItemCF算法强调物品间的相似性,因此在进行推荐时,当用户数量大大超过item 数量时,ItemCF算法更加合适。例如,购物网站和技术博客网站的item或文章数据比较稳定,所以计算item相似度时不但计算量小,而且不必经常进行更新[3]。UserCF算法强调用户间的相似性,所以在进行推荐时,当item的 数量大大超过用户数量时,UserCF算法更加合适。UserCF算法在新闻类网站中可以经常看到。例如,在社交网站中可以使用UserCF算法,可解释性也更强。所以这些网站的内容更新比较快,用户更偏爱社会化热点。

2) 在推荐系统多样性上的比较

ItemCF算法在考虑单个用户的多样性方面优势不及UserCF算法,item覆盖率比较小,多样性和丰富度都低,且其精度稍微小于UserCF算法。ItemCF算法在考虑系统的多样性方面要大大胜过UserCF算法,原因归于UserCF算法偏重推荐热门item。

3) 在用户特点上的比较

UserCF算法在进行推荐时,如果目标用户暂时找不到兴趣爱好相同的邻居,则该算法的推荐效果就会大打折扣了,结果就不好了。因此,用户是否适应UserCF,与“目标用户有多少邻居”成正比。ItemCF算法要发现某个人爱好item 的自相似度,一旦大了,则说明该用户对ItemCF算法的适应度很好。反之,说明该用户的偏好不满足ItemCF算法的假设条件,则此时使用ItemCF算法对该用户进行推荐效果不佳。

4 实验验证

所使用的数据来源是新闻数据集20Newsgroups。选择的几个主题为:国内新闻、航空、军事、传媒研究院、公益、媒体。爬取的每条数据包含三个字段:标题、时间、正文、预处理数据。

4.1 原始数据加工

原始数据只包含标题、时间和正文三个字段,这里增加唯一编号、类别、浏览次数和跟帖次数这几个字段并对原始数据简单处理,其中“浏览次数”和“跟帖次数”是为了方便后续对新闻进行排序增加的随机值。

4.2 新闻热度值计算

这里为每则新闻计算一个热度分,为后续的“热度榜”和“为你推荐”做新闻排序使用。这里的新闻热度值采用如下的公式计算:

hotValue=seeNum*0.4+disNum*0.5-diffDays*0.1

其中:seeNum:某则新闻被浏览的次数;

disNum:某则新闻被评论的次数;

diffDays:新闻在某一天发表及和当前的日期差。

新闻是一个时效性很强的个体,因此在考虑其热度值时要把时间因素考虑进去。

4.3 新闻相似度计算

新闻相似度在进行新闻推荐时的一个很重要的因素,这里使用新闻主题词的重合度来考量新闻相似度。

1) 新闻分词处理

首先需要对新闻进行分词处理。实现思路是:因为新闻标题多样,如军事类、科技类、汽车类,利用Python的jieba分词包,可以对这些关键词分词处理。看一篇新闻的第一切入点便是新闻标题,新闻标题是整篇新闻的高度概括,因为当两则新闻的标题重合度越高时,新闻本身的内容相似度也就越大[4]。

原始数据加载之后保存在相应的变量中,在对文章标题分词时使用,分词使用的是jieba.analyse.extract_tags()函数。句子组成中包含了大量的单音节词、标点符号等,在分词时要去掉这些词语或标点符号,其具体的实现方法是加载停用词表进行过滤,提取新闻标题的关键词,例如标题。

2) 计算相似度

相似度的计算需要相关函数去完成,这里用到的函数为:getCorrelation(self)。

4.4 指定标签下的新闻统计

统计指定标签下的新闻是为用户选择标签后生成“为你推荐”内容做准备,这里指定用户可以选择的标签有:互联网、金融、旅游、经济、文学、音乐、综艺等。

其中各个模块介绍如下:

MySQL数据存储:这里使用MySQL存储系统所使用的数据。系统实现选用的是Python的Django框架,在框架中有对数据对象的封装。

用户选择:不同的用户选择不同,推荐的内容也不同,因为用户不同所处的圈子也不同。

选择标签:解决冷启动问题。当然用户也可以不选择相应的标签,此时“为你推荐”模块显示的是热度数据。

用户点击浏览文章:即用户在系统中产生了相关行为,每篇文章的详细页都会推荐该篇文章的相似文章。

热度榜:热度值高的排在最上面,这样计算结果高的文章将显示出来。

为你推荐:如果用户是初次登录,则根据用户选择的标签返回“為你推荐”的内容;若用户没有选择标签,则返回热度值较高的新闻作为“为你推荐”的内容;如果用户是在点击浏览过新闻之后返回“为你推荐”模块,则返回用户有行为文章的相似文章,作为“为你推荐”的内容。

从以表1可见,准确率和流行度等评价指标, ItemCF算法都低于UserCF算法。

虽然基于协同过滤的新闻推荐算法比较常见,从人们熟悉的搜狐、网易等门户网站中,可以看到新闻的数量庞大,而且更新很快,有时几个小时就会更新一次,所以在使用时选择更优的推荐算法尤为重要。用户的兴趣爱好比较稳定,例如有的人喜欢看欧美电影,有的人喜欢听古典音乐,有的人喜欢看每日新闻等。新闻网站中使用UserCF算法比较多,原因如下:UserCF算法根据不同的用户只要更新用户相似性表即可,比较好实现,但新闻的更新频率太快,在ItemCF算法相当于要不停更新item相关度表,实现起来要困难得多[5]。所以,新闻网站中更愿意采用UserCF算法。

参考文献:

[1] 项亮.推荐系统实践[M].北京:人民邮电出版社,2012.

[2] 董晨露,柯新生.基于用户兴趣变化和评论的协同过滤算法研究[J].计算机科学,2018,45(3):215-219,248.

[3] 杨武,唐瑞,卢玲.基于内容的推荐与协同过滤融合的新闻推荐方法[J].计算机应用,2016,36(2):414-418.

[4] 黄贤英,熊李媛,李沁东.基于改进协同过滤算法的个性化新闻推荐技术[J].四川大学学报(自然科学版),2018,55(1):49-55.

[5] 高阳团.推荐系统开发实战[M].北京:电子工业出版社,2019.

【通联编辑:光文玲】