一种基于ElasticSearch的推荐系统架构
2018-01-08郝胜男赵领杰
郝胜男 赵领杰
摘要:该文在研究了推荐系统和搜索技术以后,提出了一种利用搜索引擎来进行数据召回的方式,首先采用关键词抽取算法对用户的历史记录进行概率分析,抽取出个性化的关键词并给到ElasticSearch搜索引擎进行候选集的召回,然后提出一种特征融合的方法对样本集进行了整合,最后利用机器学习算法对样本进行了训练并预测输出。与协同过滤和纯粹的基于内容的推荐系统进行对比,利用基于ElasticSearch的推荐系统架构将推荐系统的点击率提高到了17.5%。
关键词: 推荐系统; ElasticSearch; 机器学习; SVM; GBDT
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2017)36-0230-03
Abstract: Based on the research of the recommendation system and search technology, this paper puts forward a method of data to recall the use of search engines, the first probability analysis using keyword extraction algorithm to extract the user record, and personalized keywords to the ElasticSearch search engine recall candidate set, the sample sets for the integration method a fusion feature is then proposed, finally using machine learning algorithm to training samples and predictive output. Compared with collaborative filtering and pure content-based recommendation system, the recommendation rate of recommendation system is increased to 17.5% by using ElasticSearch based recommendation system architecture.
Key words: recommendation system; ElasticSearch; machine learning; SVM; GBDT
1 概述
21世纪以来,信息技术的不断发展和互联网规模的不断扩大,使得数据量有了指数级的增长,不同的用户在接受来自世界各地海量的数据,如何有效地将数据转化为信息,成为一个亟待解决的问题[1]。从用户的角度来看,用户更加想接收到对自己有用的信息,或者自己感兴趣的信息,而不是海量信息的集合;从信息提供者的角度来看,想提供一种对于不同用户展示不同信息的平台,而这个展示的信息是跟用户紧密联系的。在这种情况下,推荐系统应运而生[2]。推荐系统的产生主要完成以下的工作内容:将用户和信息紧密结合,对于不同的用户进行个性化的定制,通过分析特定用户的偏好,帮助用户从海量数据中筛选出用户偏好的信息,然后将这些个性化的信息呈现给用户。
推薦系统最核心的部分为推荐算法,本文首先研究了当前最流行的推荐算法,主要包括基于内容的推荐算法,基于协同过滤的推荐算法。其中还包括在模型建立过程中用到的数据降维方法,特征提取方法等。这些算法在不同的场景应用中都会有各自的优缺点,因此会有不同的适用范围。在用户使用有一定基础的情况下,基于物品的协同过滤算法在目前来说是一种比较稳定的通用推荐算法,它预测准确度较高,而且算法的解释性较高。
搜索技术是一项比较成熟的技术,它将因特网上的信息进行整合,对用户开放查询。搜索引擎主要工作原理分为三部分:从网络中搜集数据;将数据进行整理;接受用户的查询。搜索引擎有着快速返回搜索结果的优势,因此可以将搜索技术应用于实时推荐系统中。这样对于推荐系统的实时性和准确性都会有一定的提高。
本文对基于搜索技术的推荐系统关键技术进行研究,对于数据到推荐结果之间进行了搜索和推荐两步筛选,并对实时推荐系统提供了一种通用架构。在推荐算法的选用中,提供了一种将推荐问题转化为二分类问题的特征合并方法,与普通的基于协同过滤的算法相比较,解决了“冷启动”的问题,同时在算法内部隐含用户和物品聚类的数学依据,对于数据量大而用户量少的推荐场景提高了推荐准度,也解决了“冷启动”问题。
2 基于ElasticSearch的推荐系统架构
基于ElasticSearch的推荐系统架构,将推荐任务分为两步排序,第一步排序使用高并发的ElasticSearch搜索引擎返回相关的候选集,第二步通过机器学习算法对候选集进行排序最终生成推荐结果。
搜索引擎的输入为关键词,因此本文中推荐系统的架构第一步是搜集到用户的历史记录以后进行关键词的提取,关键词的提取采用了更改的TF-IDF算法,提取到多维度的关键词之后放到ElasticSearch中搜索,会得到不同维度的搜索结果,从而解决了推荐系统的多样性的问题,再进行第二步推荐算法的排序,这里采用了不同的机器学习的算法,离线训练的模型持久化到内存,然后对候选集进行二次排序最终得到推荐列表展示给用户。
搜索技术主要解决实时推荐系统的速度问题和搜索结果的多样性问题,推荐算法主要解决推荐结果的个性化问题。
2.1 基于用户的ElasticSearch关键词抽取
关键词抽取其实是TF-IDF的一种在应用场景的实现,将某一个用户的历史记录作为一整篇文档,所有数据作为总的文档。用户所有的历史记录数目为M,其中一条记录标记为[I={i1,i2,...,in}],公式中i为记录中的词。endprint
2.2 推荐系统的机器学习算法排序
用户与物品之间的信息协同过滤等算法之外,还可以使用统计学习方法,例如分类和回归来做排序,为了实现这种方式,本文提供了一种将用户信息和物品信息提取特征并融合的算法。将融合后的特征作为正负样本来用在分类或者回归上面。
用户在系统中留下的浏览和点击日志分别表明了用户对于物品的不同喜好,可以根据用户的不同隐性反馈计算出用户对于物品的显性得分,然后根据已知的用户-物品的得分来做回归,而本文中使用的是分类方法,即用户对于物品有点击或者浏览行为即为正样本,对于负样本的选择可以使用随机方法,这样有了正负样本以后就可以使用LogisticRegression等二分类方法来做排序。在做分类和回归之前,本文特征提取算法可以描述为以下算法:
这样就得到了正负样本,就可以使用分类方法来对候选集做二次排序得到最终推荐列表。
正负样本生成:在特征向量生成过程中,可以采用用户-物品特征融合的方式进行正负样本的提取,用户的基本信息的特征向量为User,物品的特征向量为Item,若用户对物品感兴趣则正样本可以选择为
2.3 基于ElasticSearch的推荐系统架构设计
推荐系统架构设计如图1所示。
系统总架构分为一下几个模块:表现层,分析层,推荐引擎层。表现层是用户与推荐系统连接的桥梁,用户可以通过浏览,点击等行为留下自己的行为信息,而日志分析层则可以通过这些点击浏览行为推断出用户的基本信息或者在表现层诱导用户去填写自己的基本信息。日志分析层还承担了评价用户对某些物品的喜好程度,通过不同的点击浏览次数来对喜好程度进行分级。推荐引擎模块拿到分析模块的分析结果来对用户未浏览过或者点击过的物品进行评价,将评价高的物品推荐给用户。
整个推荐系统借用了搜索引擎的信息聚合和排序的功能,利用搜索引擎可以快速将海量的物品列表排序并取回一小部分的候选集。在搜索引擎的选择上,使用了开源的ElasticSearch搜索引擎,ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,能够达到实时搜索,稳定,可靠,快速,安装使用方便。而且ElasticSearch提供了不同种文档相关度的排序,使得与搜索词更加相近的文档排序更高,内部使用倒排索引来实现,从而达到了快速的效果。
3 效果对比
3.1 机器学习算法的效果对比
利用上文的机器学习算法,以及特征融合方法,本文抓取了某客户管理系统的用户信息,并对于用户的特征以及物品的特征进行了提取融合,分成了训练集和测试集合进行了算法的对比,主要对比了算法的AUC和算法线上预测的速度。
横轴是训练集合的大小,纵轴是AUC值,从图中可以看出,随着训练集合的增多,AUC的值整体会提升,说明算法的准确性与数据的多少有直接关系,达到一定量以后,准确性达到平稳状态,由于机器的性能问题,SVM算法在训练到10万量级的时候花费时间过长,因此没有曲线,说明SVM算法较其他算法计算复杂度要高;整体对比上,GBDT算法的AUC一直高于其他算法,最终可以达到AUC=0.85的准确性。
随后比较了三种模型在线上运行对于不同数量召回集合预测的速度对比,如表1所示:
表中可以看出,随着召回数量级的增多,算法的预测时间都会增长,逻辑回归花费的时间最短,而SVM算法花费的时间已经超出了线上推荐系统的要求,GBDT算法的时间勉强可以接受。
3.2 推荐效果对比
本文抓取了某客戶管理系统的用户信息,进行了协同过滤推荐,基于内容的推荐和基于ElasticSearch的推荐的效果推荐,在同样每次为用户展示20条推荐结果的条件下,三种算法的点击率如表2所示。
从线上点击率来看,基于ElasticSearch的推荐系统架构能够为用户带来更高的点击率,因此效果要略好于纯粹的协同过滤和基于内容的推荐系统。
4 结论
本文在研究了关键词抽取和ElasticSearch搜索引擎的搜索性能以后,提出了一种关键词抽取方式,利用不同用户的历史记录来抽取关键词并借助ElasticSearch来召回候选集,大大提高了召回速度,并提出一种用户-物品特征融合的方式,借助机器学习算法来对候选集进行了重新排序,并将结果返回给用户,并与协同过滤和纯粹的基于内容的推荐系统进行了比较,提高了推荐系统的点击率。
参考文献:
[1] 刘建国, 周涛, 汪秉宏. 个性化推荐系统的研究进展[J]. 自然科学进展, 2009(19):1-15.
[2] PAUL Z, CHRIS E. Understanding Big Data[M]. McGraw-Hill Osborne Media, 2011.
[3] 常江. 基于ApacheMahout的推荐算法的研究与实现[D]. 成都:电子科技大学, 2013.
[4] 项亮. 推荐系统实践[M]. 北京:人民邮电出版社, 2012.
[5] 任磊. 推荐系统关键技术研究[D]. 上海:华东师范大学, 2012.
[6] 刘源. 基于云计算的分布式推荐引擎算法研究[D]. 成都:电子科技大学, 2013.
[7] ADOMAVICIUS G, TUZHILIN A. Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions[J]. IEEE Trans, 2005(17):734-749.
[8] GOLDBERG D, NICHOLS D. Using collaborative filtering to weave an information tapestry[J]. Commun ACM, 1992, 35(12):61-70.
[9] RESNICK P, LAKOVOUL N, SUSHAK M. GroupLens:An Open Architecture for Collaborative Filtering of Netnews[C]. In Proceedings of ACM 1994 Computer Supported Cooperative Work, Boston, 1994:175-186.