APP下载

基于物品内容的电视产品推荐系统研究∗

2020-05-15姜雨菲

计算机与数字工程 2020年2期
关键词:字典向量物品

姜雨菲 万 超

(西安工业大学计算机科学与工程学院 西安 710021)

1 引言

随着互联网技术的迅速发展,网络电视已经在人群中得到普及,但是由于电视节目资源数量的不断扩大,用户在寻找自己所需的节目资源时难度加大。此时对用户的电视产品推荐功能显得尤为重要。

在各大公司的推荐系统中,根据推荐算法的不同主要可以分为基于协同过滤的推荐系统、混合的推荐系统、基于关联规则的推荐系统等,其中基于协同过滤的推荐系统是应用最为广泛的。协同过滤推荐系统主要包括基于用户的协同过滤推荐、基于项目的协同过滤推荐和基于模型的协同过滤推荐,其中在用户比较多时基于项目的协同过滤算法比基于用户的协同过滤算法有更好的时效性,它通常应用于电子商务推荐系统中[1,14]。近年来,基于内容的文本挖掘领域的隐形语义模型逐渐流行起来,它的核心思想是挖掘用户隐形的感兴趣的物品推荐,主要技术包括隐含类别模型、隐含主题模型、矩阵分解技术等。

虽然协同过滤推荐系统以及一些电视节目推荐系统在很多方面取得了很多研究成果,但是依然存在很多问题需要解决,比如在物品-物品评分稀疏矩阵下,传统的相似性度量方法不能很好地计算用户间或项目间的相似度,并且存在冷启动、新项目等问题,以及核心的推荐算法的好坏等问题[2~3]。

本文介绍了传统协同过滤推荐算法的实现过程,分析了其在冷启动、新项目等问题上的不足。然后,介绍了针对冷启动问题的解决方法。利用了广电网络运营公司的大数据基础营销服务平台积累下来的海量真实数据,通过分析用户的收视内容与产品内容,利用jieba中文分词工具对用户收视内容与电视产品内容进行分词处理,统计了对应用户与节目的词语次数,通过计算词语的TF-IDF值[15~16],得到用户收视内容向量表与电视产品向量表。经过计算用户内容与产品内容的余弦相似度,得到推荐值。最后通过准确率和召回率两个指标对该系统进行了评价,最终证明该方法在解决冷启动问题上有较好的效果。

2 算法介绍

2.1 协同过滤推荐算法

基于物品的协同过滤(item-based collabora⁃tive filtering)算法是目前得到广泛应用的算法之一[4]。其基本思想就是通过分析物品之间的关联度来给用户推荐那些与他们曾经喜欢过的产品关联度较大的产品。

ItemCF算法的基本思想并不是通过计算物品的内容相似度来得到物品之间的关联程度,而是通过分析用户的行为记录来计算物品之间的关联程度[5]。简单来说,若物品A和物品B具有很大的关联度是由于喜欢物品A的用户多数也会选择物品B。

首先,我们可以用下面的公式来定义物品的关联度:

上式中,wij表示物品i与物品j的关联度,分母就代表喜欢物品i的用户集合,而分子则是同时喜欢物品i和物品j的用户集合。因此,这里物品i与j之间关联度简单来说就是指只喜欢物品i的用户中同时喜欢两种物品的用户所占的比例。

上述定义似乎很正确,但存在一个漏洞,也就是没有考虑物品的热门程度。假设物品j是热门物品,那么喜欢的人会很多,此时wij就会接近1,这就表现为热门物品与所有物品的关联度都接近1。所以为了避免总是会推荐那些热门的物品,可以对上式进行改进:

这个公式惩罚了物品j的权重,这样也就缓解了上述问题[6]。

在用这种方法计算关联度时,由于用户兴趣列表很大,所以计算的时间复杂度较高。在实际情况中,某些用户可能只对一两个物品产生过行为,其兴趣列表很小,这样就会导致 | N(i)∩N(j)|=0。也就是说很多时间会浪费在计算这种物品之间的相似度上。如果换一个思路,我们可以首先计算出|N(i)∩N(j)|≠0的物品对,再对这些物品对做后续计算,这样就可以省去计算关联度为0的物品对的时间。为此,我们可以首先建立用户到物品的倒排表,得到每个用户的兴趣列表。令稀疏矩阵C[i][j]= | N(i)∩N(j) |,假设物品i和j同时属于倒排表中K个用户对应的物品列表,那么就有C[i][j]=K。最终就可以得到所有物品之间K不为0的C[i][j]。

图1是一个根据上面的程序计算物品相似度的简单例子。

图1 一个计算物品相似度的简单例子

图1 中最左边每一条为一个用户的物品兴趣列表,然后,我们将里面的物品两两加一,得到一个单独的用户兴趣矩阵。最终将所有这些单独的矩阵相加得到上图中最终的C矩阵。C矩阵中记录了同时喜欢物品i和物品j的用户数。最后,我们可以将C矩阵进行归一化处理,这样就可以得到物品之间的余弦相似度矩阵W,W中记录了两两物品的相似度。

然后我们可通过如下公式计算用户u对一个新物品j的兴趣度:

上式中N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,wji是物品j和i的相似度,rui是用户u对物品i的兴趣[7~8]。puj就表示为物品j对于用户u的推荐度。

2.2 冷启动问题

在传统推荐算法中,它们所需推荐的物品总是已经出现在市场中的,也就是说这些产品已经得到了部分用户的反馈。而对于某些新产品来说,它们无法得到一个好的推荐目标用户,如何在没有得到用户对产品的反馈信息的情况下对产品做出一个好的推荐方案,就是冷启动的问题[8,17~18]。

通过上节中算法的介绍,我们可以知道对于传统的ItemCF算法来说,物品冷启动是一个严重的问题。如果需要解决这个问题,就需要考察物品的内容信息了。

物品的内容信息多种多样,一般来说,物品的内容可以通过向量空间模型表示,它会将每个物品表示成一个关键词向量。其中一些诸如导演、演员等实体的信息就可以直接作为关键词。但如果是诸如物品简介等形式的文本信息时,就需要引入一些理解自然语言的技术(如Python中的jieba分词工具包等)来抽取文本中的关键词。图2展示了从文本生成关键词向量的主要步骤。在得到关键词集合后,需要对关键词进行排名,计算每个关键词的权值,从而生成关键词向量。

图2 关键词向量的生成过程

对物品d,它的内容表示成一个关键词向量如下:

如果物品是文本,我们可以用信息检索领域著名的TF-IDF公式计算词的权重:

在得到每个物品的关键词向量后,物品之间的内容相似度就可以通过向量之间的余弦相似度公式计算得到:

在实际应用中,可以首先通过建立关键词—物品的倒排表加速这一计算过程。得到物品相似度之后,可以利用传统的ItemCF算法中的思想,最终生成用户的产品推荐列表。

2.3 评价指标

对于推荐系统而言,推荐的精确度是评判推荐系统优劣的一个重要指标,它反映了系统推荐给用户的视频有多少是用户感兴趣的。本文从准确率和召回率两个方面来对系统进行评测,这个指标是推荐系统最重要的评测指标[20]。其中准确率的计算公式如下所示:

召回率的计算公式如下所示:

R(u)为向用户u推荐的电影个数。

T(u)为用户u在测试集合上感兴趣的电影个数。

我们可以通过训练集预测用户在测试集上的兴趣偏好,然后计算预测结果和测试集实际偏好的重合度。重合度越高,系统的准确度越高[19~20]。

3 实验分析

3.1 数据介绍

本实验中所采用的数据集合包括两部分,第一部分为1329个用户的38010条收视记录,数据形式如表1所示;第二部分为18480条节目信息,数据形式如表2所示。

表1 用户收视记录表

表2 节目信息表

3.2 建模流程

将用户收视节目内容与电视产品节目内容进行清洗、分词、停词等预处理操作后使用TF-IDF算法对两组内容进行文本向量化,TF表示特征词在该条文本中出现的概率,IDF表示含有该特征词的文本数占所有文本数的比例,它反映了该特征词在所有文本中的热度[18,20~21]。单独使用 TF值可能会导致一个问题:一些特征词可能在所有文档中的TF值都很高,很难区分这些特征词到底代表哪个文档。因此需要将TF和IDF值结合使用,算法流程如图1所示。

图3 操作流程图

根据用户收视节目的内容与待推荐电视产品内容,对文本的预处理进行以下几个步骤:

1)数据清洗:首先将文本中的一些噪音数据清除掉,因为节目内容中难免有一些特殊符号、数字等信息,这些信息对于内容的识别没有任何意义,会影响模型的准确性,所以要对这些信息进行清除。

2)分词、停词:中文的分词是将一个汉字序列根据某种规则切分成若干个词语,然后将无意义的词去掉。停词则是去除一些对内容识别度不高的词,对文本的识别没有任何意义,也要去除掉,同时也能降低向量空间的维度,减少程序运行内存消耗[20]。

根据TF-IDF算法,对文本建立向量空间模型,步骤如下:

1)计算TF-IDF值:通过每个条目的词语出现次数,分别计算词语出现的TF和IDF值,得到最终的TF-IDF值,其代表了该词语在每个条目中的重要程度。

2)文本向量化:对文本进行向量化,为下一步计算用户收视内容与电视节目信息内容的相似度作出准备。

通过python语言对如上步骤进行处理:

首先遍历文本预处理后得到的字典,计算TF值,存入新的json文件,其每个条目的组织形式为{用户设备号:[[词语1,TF1],[词语2,TF2],…,[词语n,TFn]]}。根据文本预处理后得到的字典,建立用户-词语的倒排表,存入新的json文件,便于IDF值的计算,其每个条目的组织形式为{词语:[[用户设备号1,出现次数1],[用户设备号2,出现次数2],…,[用户设备号n,出现次数n]]}。遍历倒排表,计算出IDF值,存入新的json文件,其每个条目的组织形式为{词语:[[用户设备号1,IDF1],[用户设备号2,IDF2],…,[用户设备号n,IDFn]]}。通过TF值表和IDF值的倒排表,得到TF-IDF值表,存入新的json文件,其每个条目的组织形式为{用户设备号:[[词语1,TF-IDF1],[词语2,TF-IDF2],…,[词语n,TF-IDFn]]}。其中未出现的词语的TF-IDF值则为0。

最终形式如表3所示。

表3 用户点播信息向量空间模型

分别将用户点播信息与用户单片点播信息,电视产品节目信息分别进行如上处理,电视产品节目信息的最后字典条目组织形式为{产品节目编号:[[词语1,TF-IDF1],[词语2,TF-IDF2],…,[词语n,TF-IDFn]]}。

根据所得的用户收视信息的用户-内容向量表,电视产品-内容向量表,计算推荐度分为以下几个步骤:

计算用户收视节目的信息与电视产品节目的余弦相似度,得到初步推荐值。余弦相似度公式为

其中mi表示用户-内容向量表,nj表示电视产品-内容向量表。分别计算用户点播信息对应的节目推荐名单与推荐度,用户单片点播信息对应的推荐名单与推荐度。给予相应的权值,综合计算,得到最终的推荐名单与推荐度。

使用python语言对如上步骤进行处理:

根据两个向量表字典,找出同时拥有词语及对应TF-IDF值,将其相乘,存入新json文件,字典条目组织形式为{词语:[[[用户设备号1,电视节目编号1],TF-IDFm1*TF-IDFn1],[[用户设备号2,电视节目编号 2],TF-IDFm2*TF-IDFn2],…,[[用户设备号 n,电视节目编号 n],TF-ID⁃Fmn*TF-IDFnn]]}。将同一个词语中用户设备号-节目编号对相同的进行合并,存入新json文件,字典条目组织形式为{“用户设备号,节目编号”:[TF-IDFm1*TF-IDFn1,…,TF-IDFmn*TF-IDF⁃nn]}。

遍历上一步得到的字典,将value值列表中的值相加,得到余弦相似度公式分子,新的字典组织形式为

{“用户设备号,节目编号”:sum(TF-ID⁃Fm*TF-IDFn)}。

通过用户-点播内容词TF-IDF向量表计算出每个用户的向量模|mi|,通过节目-内容词TF-IDF向量表计算出每个节目的向量模|nj|,根据上一步得到的字典中的“用户设备号-节目编号”计算出对应的分母值,最终得到新的字典,字典条目组织形式为{“用户设备号,节目编号”:sum(TF-ID⁃Fm*TF-IDFn)/(|mi|*|nj|)}。

分别计算得到用户点播信息-节目信息推荐度表和用户单片点播信息-节目信息推荐度表,由于单片点播信息的重要程度比点播信息的重要程度高[21],所以,给予单片点播信息的权值为0.6,点播信息的权值为0.4,计算最终推荐度并进行排序并选取推荐度最高的20个节目编号对应推荐值。最终字典组织形式为{用户设备号:[[节目编号1,推荐度1],[节目编号2,推荐度2],…,[节目编号n,推荐度n]]}。

最终形式表4所示:

3.3 结果分析

根据以上过程,将最终推荐列表结合节目信息输出,部分结果如表5所示。

根据所得推荐列表与测试数据中用户的收视记录,以准确率和召回率作为系统的评价指标,通过计算得到准确率和召回率分别为25.16%和14.11%。

表4 最终推荐度

4 结语

本文利用了广电网络运营公司的大数据基础营销服务平台积累下来的海量真实数据,采用数据挖掘技术,分析了用户的收视偏好、产品的内容信息。对传统的基于物品的协同过滤算法进行了介绍,描述了其在冷启动问题上的不足,并将其与基于产品内容的推荐算法结合,实现了对用户的产品个性化推荐。

结果表明:在利用准确率和召回率作为评价指标时,基于物品内容的推荐算法在解决冷启动问题上有较好的效果,两者分别达到了25.16%和14.11%。

猜你喜欢

字典向量物品
称物品
向量的分解
聚焦“向量与三角”创新题
字典的由来
大头熊的字典
图画捉迷藏
正版字典
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线
找物品