利用Apache Mahout改善图书馆OPAC系统在大数据环境中用户体验的实践
2015-05-10周强
周 强
(深圳图书馆,广东 深圳 518036)
1 传统OPAC在大数据环境中面临的困境
传统的OPAC是随着20世纪80年代开始的图书馆自动化系统一同出现的,基于当时的技术条件和图书馆不多的馆藏资源,一般是浏览式展示和根据用户输入检索词获得检索结果,相对于之前的卡片查询,OPAC极大地方便了读者。但随着社会的发展,图书馆馆藏资源数量爆发式增长,读者阅读需求个性化、多元化越来越明显,传统OPAC面对越来越多的困境:
(1)由于图书馆馆藏量的快速增加,OPAC往往展示给读者几十甚至是几百条记录,大量的检索结果对读者获取想要的信息并没有多大帮助;更糟糕的是大量的检索结果按照书名的拼音顺序或者出版时间排序,读者只有一页一页浏览,才能发现所要查找的文献。这无意中为用户利用OPAC获取信息资源设置了障碍,影响了用户使用的便利性和实效性[1]。
(2)OPAC个性化服务程度不高,智能化服务内容不多。读者需要填写检索词,才能利用OPAC检索系统,但读者很多时候并不明确知道自己想看什么,只想找到自己感兴趣的书。目前的OPAC并不能全面客观地分析读者的信息需求,对各种信息资源进行过滤,把用户所需要的信息资源提供给用户[2]。
传统的OPAC已经无法满足读者越来越高的要求,如何走出困境,提高服务质量,更好地为读者提供服务,成了图书馆界亟需解决的一个问题。互联网电商从诞生之日就面临海量的商品信息与用户,其个性化推荐服务可被图书馆借鉴,进而有助于解决这个问题。
2 个性化推荐系统在图书类电商中的应用
什么是个性化推荐系统?简单地说,个性化推荐能帮助网站根据用户的历史行为(如搜索、浏览、评论和购买等),推测出用户可能感兴趣的内容并向其推荐[3]。推荐系统为客户推荐商品,自动完成个性化选择商品的过程,满足客户的个性化需求,避免顾客因信息过载问题而浏览大量无关的信息和产品,花费大量时间才能找到自己需要的商品
目前,个性化推荐系统在电子商务网站运用非常普遍,已经逐渐成为一种标准配置。它是建立在大数据基础上的一种高级商务智能平台,帮助电子商务网站为其顾客提供完全个性化的决策支持和信息服务。有研究表明,使用个性化推荐能帮助电商网站提高2%~8%的销售额。图书类电商网站也顺应了这一潮流,纷纷设置了个性化推荐的相关板块。据VentureBeat统计,个性化推荐系统的使用为亚马逊提供了35%的销售额。
在电商系统中,与图书馆OPAC最相近的是图书类电商,可以通过分析图书类电商在个性化推荐应用方面的特点和优势,发现解决传统OPAC现存问题的途径和方案。
目前,图书类电商通常将个性化服务细分为多种推荐小板块。这些板块从实现途径分为3类:①基于用户的共同兴趣的推荐板块。这类板块主要通过相同的历史行为推断用户存在共同兴趣,向用户推荐与之有相同兴趣用户的浏览、阅读或购买行为。如当当网的“阅读此书的人喜欢的其他图书”。实现这一类推荐需要记录用户的历史行为数据,不需要对图书进行分类。②基于用户自身历史行为推测用户的兴趣点的推荐板块。这类板块通常根据用户搜索、浏览、购买图书的行为来推测其兴趣,从而向其推荐可能感兴趣的同类图书,是目前最流行和最精确的推荐方式。如亚马逊的“您可能还喜欢”。实现这类推荐需要用户的历史行为数据和对商品进行精细分类。③社会化推荐板块。这类板块是使用户通过自己的社交关系来获得推荐。如豆瓣阅读的“友邻广播”,似于现实生活中一个朋友给其他朋友进行推荐。
3 开源个性化推荐系统Apache Mahout
个性化推荐系统实施涉及很多算法以实现用户的聚类、商品的聚类及分类,是一个相当复杂的过程。笔者查找和比较了Apache Mahout、Weka、JDM等开发包,相比之下使用Mahout较易实现推荐功能。
Apache Mahout是Apache Software Foundation(ASF)开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在Apache许可下免费使用。Mahout提供大量功能实现,包括聚类、集群、分类、协同过滤和进化程序等数据挖掘算法。通过使用 Apache Hadoop库,Mahout可以有效地扩展到云中[4]。
Mahout项目是由 Apache Lucene(开源搜索)社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于集群和分类的机器学习算法。得益于Mahout已经实现的算法,笔者直接利用这些算法以快速实现OPAC推荐系统。
4 使用Apache Mahout实现个性化推荐系统的步骤
笔者详细介绍利用Apache Mahout实现一个实验性的个性化推荐系统的实施步骤,该实验系统的目标是:以深圳科图公司的产品ILASII作为数据源,实现推荐功能,寻找读者可能感兴趣的图书,并展示给读者。该系统的实施包括两个基本部分:数据集和算法。
4.1 获得数据集,并进行数据预处理
在数据挖掘中,获得数据集,并进行数据预处理,是将不同来源的数据集成、合并数据到单一的数据仓库,并协调来自不同数据源的数据在数值上的差异,使数据属性标准化。同时,还要去除重复数据,并确保格式转换为分析模块所需要的格式。
ILASII于1998年发布,现在仍有大量图书馆使用该系统。该系统中没有读者的图书评分功能,可以采用读者借阅历史作为读者的喜好数据,将读者借阅历史作为推荐系统的数据集。
从ILASII系统中可以导出的借阅历史格式是:读者记录号、图书条码号。图书条码对应的是一册图书,但推荐系统需要推荐给读者的是该条码对应的图书,而不只是这一册图书。笔者在ILASII中导出的借阅历史的图书条码号转换为图书书目记录号,同时将数据保存为如下格式的文本文件:读者记录号,图书记录号,1(Mahout要求文件的内容满足以下格式:每一行包括用户 ID,物品 ID,用户偏好值;每行中间用逗号或Tab隔开)
每一行表示这个读者借阅过图书记录号对应的图书。这里需要注意,基于存储效率和计算效率方面的考虑,Mahout要求每一个栏位都是数字,不能包含字母。如果自动化系统输出的借阅历史中包含字母,需要在预处理阶段把字母转化为数字。
表1是笔者经过预处理后的读者借阅历史文件loans.csv部分数据:
表1读者借阅历史样本
4.2 核心程序编制
对取得的数据集进行算法分析,从借阅历史寻找具有相似阅读历史的读者,从所有相似读者的阅读书目集合中按照权重顺序(图书被相似读者借阅次数越多,其权重越高)推荐给该读者。
Apache Mahout对如何寻找相似读者和相似图书提供了很多算法,提供了多种基于协同过滤的推荐策略,这里选择其中经典的两种:User CF和Item CF。简单地说就是基于用户相似度的推荐和基于物品相似度的推荐,分别可以实现相同兴趣用户间的推荐和个人用户可能感兴趣的推荐。
下面列出了使用Apache Mahout对经过数据预处理的借阅历史进行分析,并用实现基于Item CF的推荐系统:
DataModel model=new GenericBooleanPrefDataModel(new FileDataModel(new File("loans.csv")));
UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood=new NearestNUserNeighborhood(100,similarity,model);
Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
这四句代码的功能依次是:从数据文件loans.csv构建一个Boolean型的偏好数据模型,计算所有读者的相似度,计算N-近邻,最后依据该相似度和N-近邻构造出推荐器。再用如下代码就可以获得记录号为9501160的读者可能喜欢的图书记录号:
List〈RecommendedItem〉 recommendations=recommender.recommend(9501160,20);
遍历变量recommendations就可以获得推荐系统推荐给该读者的图书,如:
for(RecommendedItem recommendation:recommendations){System.out.println(recommendation);}
得到如下输出:
RecommendedItem[item:27315,value:1.0]
RecommendedItem[item:27945,value:1.0]
RecommendedItem[item:29288,value:1.0]
RecommendedItem[item:13554,value:1.0]
RecommendedItem[item:27952,value:1.0]
RecommendedItem[item:22768,value:1.0]
RecommendedItem[item:19203,value:1.0]
这里item就是推荐系统推荐给读者9501160的图书的书目记录号。
把上面的UserSimilarity similarity=new PearsonCorrelationSimilarity(model)改为:ItemSimilarity similarity=new PearsonCorrelationSimilarity(model),就可以实现基于Item CF的推荐系统。
4.3 辅助程序
有了获取推荐数据的核心代码,剩下的工作就相对简单,只需要把推荐的RecommendedItem转换成用户可以看得懂的信息就可以了。参照豆瓣的“豆瓣猜”,可以在图书馆网站增加一个“图书推荐”,实现效果如图1所示。
图1图书推荐展示效果图
这个功能可以建设为一个独立系统,与原有自动化系统提供的OPAC前端做页面整合。可以看到,这个方案只要具有一定java和javascript开发能力就可以轻松实施。
5 结束语
个性化推荐是一种以用户需求为中心的服务,可极大提高图书馆的服务质量和资源的有效利用,必将成为图书馆新型服务模式的主流,是图书馆在大数据环境中的必然选择。
目前,个性化推荐系统在图书馆中的应用还不十分普及,使用Apache Mahout快速搭建图书馆个性化推荐系统的实验性系统,是笔者对个性化推荐系统的一种实操性探索。事实上,可以利用图书馆很多方面的数据资源,为读者提供个性化推荐服务。如利用网站日志文件和记录文件,分析用户偏好度和网页关联性[5];利用读者借还、下载、查询、罚款等数据分析读者的信誉度,以便提供不同的服务策略等[6]。如何对图书馆各类资源数据合理利用,更方便快捷建立有效的个性化推荐系统,需要图书馆界继续探索。
[1]肖倩,董占山,张聪.图书类电子商务网站上的个性化推荐应用研究[J].科技与出版,2014(8):94-97.
[2]何静,高静萍.国内外图书馆网站建设研究综述[J].江西图书馆学刊,2008(3):27-28.
[3]查大元.个性化推荐系统的研究和实现[J].计算机应用与软件,2011(1):48.
[4]蔡建新,徐迪威.基于云计算平台的海量数据挖掘技术在塑料电子商务平台中的应用[J].广东科技,2011(8):59.
[5]蔡琬琰.基于数据挖掘的高校图书馆网站个性化推荐系统[J].情报探索,2011(3):88.
[6]唐秋鸿,曹红兵,唐小新,等.基于Web挖掘的图书馆个性化服务系统研究[J].合肥工业大学学报(自然科学版),2012(2):185-186.