没有用户数据时如何搭建推荐系统?用这三种办法!
即使没有用户数据,我们仍能搭建高效的推荐系统,向用户展示更多优质内容,让用户参与其中。
太长不看版:
第一步便是搭建基于内容的推荐系统,这种推荐系统会给用户推荐其他类似的商品,但并不依赖其他用户的数据。这些特征(即数学表达式,推荐算法需借助内容条目不同方面的表达式才能得以运算)来自于内容条目本身,并非用户行为。有了书面文本,我们便可以使用语义技术提取文本特征。
以上述推荐系统为基准模型,我们可以引入其他特征,如提取自文本的元数据,尽可能地优化该系统。 虽然没有明确的用户标识,但利用用户账号代理仍能实现个性化推荐。 假设用户每次访问该系统时都浏览了多件商品,那么可以根据该会话内的实时趋势,搭建本地的基于会话的推荐系统。
正文:
“在没有用户数据的情况下该如何搭建推荐系统呢?”我们曾多次遇到过该问题,今天我试着回答一下。
本文将向大家呈现关于推荐系统如何工作的一系列基础知识,(在重要部分)会使用一些行业术语。当涉及到技术问题时,会跟大家说明具体的技术环境。
一般来说,在没有用户数据的情况下,有三种可行的办法来搭建推荐系统。我把它们按照复杂程度在下边列了出来,此外,假设大家此刻能利用手边一切可利用的数据。这三种方法,每一种后者比前者能更好地利用唯一标识和用户信息等用户数据,但实际上,大家手头并没有这些数据。
搭建基于内容的推荐系统
首先,我们可以以某些标签或其他内容元数据等为特征,搭建一个标准的基于内容的推荐系统。我们可以应用TF-IDF模型来评估算法,在该模型中,这些标签代表了经预先计算好的词典中的每一个单词(该词典仅仅指某种数据结构,是语篇中所有的单词集合。)
具体来说,假设我们充分利用所有的标签以及其他特征来构建该词典,那么该词典会帮助我们构建所谓的“特征向量”。之后,我们以特征向量为基础,对比不同的内容条目,搭建推荐系统。到了这一步,一个基于内容的推荐系统已初步完成,从我的研究经验来看,该系统的推荐效果相当好。我们现在做的所有工作都是在向用户推荐类似于历史商品的商品。“类似”一词这里指,推荐的商品与历史商品相比,有类似的标签和特征。
如果我们想搭建精度更高的推荐系统,要做的第一件事便是迭代上述初级推荐系统,并在此基础上不断优化。接下来我将介绍其他方法。
优化基于内容的推荐系统
上述步骤利用了包含现有标签和其他特征的单一词典。提高推荐精度的下一步是构建两个及两个以上的词典——对应元数据的不同类别,我们可以基于多个词典,在推荐系统中采用TF-IDF统计方法,计算每一内容条目得分的加权组合。我们可以根据主观评估的结果优化参数(如每一项得分的权重)。这取决于哪一项参数权重能带来最好的推荐效果。
如果某一类元数据不能用TF-IDF进行加权统计,如这组数据不相关,那我推荐大家把这组数据细分成不同的种类。做了这样的细分处理后,我们会获得另一组标签(细分后的每一类数据都有各自对应的标签)。假设这个过程中未大量出现其他特征,那并不会加大整个工作的难度。
接下来可以在系统中引入过滤技术,如加某个特定标签,进一步优化推荐系统。它不是核心算法的一部分,但如果我们想在推荐系统中嵌入某种算法,从而实现用户自定义推荐准则的操作,那么过滤技术便是该算法的附加支撑结构。
搭建采用用户代理的推荐系统
提高系统推荐精度的下一步是观察能作为用户代理的那些数据特征。虽然我们没有用户账号,但可能有IP地址、浏览器信息、用户会话等其他信息。
至此,我们可以构建抽象的用户。这种用户账号无法验证,但却有了指纹技术的雏形。一旦我们能为“抽象”的用户命名,那么便能为该用户生成个性化推荐,具体来说,就是利用多种协同过滤技术。在我看来这也不复杂——我们能找到很多开源项目(如高阶Python包)。关键是我们可以借助已有的代理信息来构建用户账号。
此外,我们还需要用户的点击交互数据。我们需要知道哪些商品已经被用户点击过,否则便没有办法顺着用户偏好做进一步优化。一旦有了用户的点击交互数据和抽象的用户账号,便能搭建由IP地址和浏览器信息组合而成的个性化推荐系统。这不是真正的个性化推荐,但离真正的个性化也不远了。
搭建基于会话的推荐系统
最后的方法概述起来就是搭建基于会话的推荐系统。这与前边提到的方法类似,但这次我们关注的是某个特定会话内的数据。即使我们无法获取用户信息,也有可能拿到用户会话数据。有了用户会话账号,便能和高度本地化的“用户账号”对等起来。
基于会话的推荐系统众多,其中一些基于循环神经网络(RNN)搭建的推荐系统精度极高,如Hidasi 和Karatzoglou二人所做的研究。这些系统的推荐效果都令人相当满意。
基于会话的推荐系统假定用户准备在该系统上停留一段时间。 如果用户确实这样做了,并且点击次数足够多的话,那么系统的推荐效果会更好,推荐的内容对用户更有吸引力。