这个系列主要也是自己最近在研究大数据方向,所以边研究、开发也边整理相关的资料。网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识。我会尽可能用简单的方式去简介一些概念和算法,尽可能让没有工科基础的人也能大致了解。
ps:由于工作繁忙,更新不定期会发到我的博客上,大家可以收藏www.cybermkd.com。
简单讲解
基于内容的推荐算法是非常常见的推荐引擎算法。
这种算法常用于根据用户的行为历史信息,如评价、分享、点赞等行为并将这些行为整合计算出用户的偏好,再对计算推荐项目与用户偏好的相似度,将最相似的推荐给用户。例如在书籍推荐中,可以根据用户已经看过或者评分的书籍的一些共性(比如作者、分类、标签)再推荐给用户相似度高的书籍。
基于内容推荐可以通过两种方式,一个是像上面所说通过用户的行为进行个性化推荐,但是上面的推荐方式很依赖用户的数据、不利于没有用户数据情况下的冷启动。一般适合商品不多、用户有特殊兴趣的情况。
第二种就是根据事物的相关性,这种方式是通过比较事物之间共有属性的相似度来进行推荐,例如如果A用户喜欢Dota2,Dota2是属于竞技类网游,那么A用户就有可能喜欢英雄联盟。
这种方式的好处就是可以不依赖用户的行为,但是要求事物的内容是准确和完善的并且是没有歧义的,不过也可以通过手动输入标签的方式来解决这个问题。
相关算法
1.基于关键词的空间向量模型
关键词一般通过TF-IDF来进行提取,TF-IDF是一种常用的加权计算方法,它是基于统计学的方法,一般用来评估一个词在一段话或一篇文章中的重要性。
TF-IDF对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语,所以如果特征空间坐标系取TF词频作为测度,就可以体现同类文本的特点。
另外考虑到单词区别不同类别的能力,TF-IDF法认为一个单词出现的文本频数越小,它区别不同类别文本的能力就越大。因此引入了逆文本频度IDF的概念,以TF和IDF的乘积作为特征空间坐标系的取值测度,并用它完成对权值TF的调整,调整权值的目的在于突出重要单词,抑制次要单词。
有很多不同的数学公式可以用来计算TF-IDF。
如果某个词或短语在一篇文章中出现的频率TF(词频)高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。
词频 (TF) 是一词语出现的次数除以该文件的总词语数。假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是 0.03 (3/100)。一个计算文件频率 (DF) 的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。所以,如果“母牛”一词在1,000份文件出现过,而文件总数是 10,000,000份的话,其文件频率就是 0.0001 (1000/10,000,000)。最后,TF-IDF分数就可以由计算词频除以文件频率而得到。以上面的例子来说,“母牛”一词在该文件集的TF- IDF分数会是 300 (0.03/0.0001)。这条公式的另一个形式是将文件频率取对数。
向量空间模型是通过进行特征选择计算,通过加权公式将文本转化为数值的一种形式。这样就可以将向量空间模型通过计算得到相似度。
我们可以将用户的喜好以文档描述并转换成向量模型,对商品也是这么处理,然后再通过计算商品文档和用户偏好文档的余弦相似度。
有关余弦相似度和TF-IDF详细可以等下一篇文章。
2.Rocchoi算法
Rocchio算法,是一种高效的分类算法,广泛地被应用到文本分类,查询扩展等领域。它通过构造原型向量的方法得到最优解。
Rocchio算法应该算是人们思考文本分类问题时最先能想到,也最符合直觉的解决方法。基本的思路是把一个类别里的样本文档各项取个平均值(例如把所有 “体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“质心”,质心就成了这 个类别最具代表性的向量表示。再有新文档需要判断的时候,比较新文档和质心有多么相像(八股点说,判断他们之间的距离)就可以确定新文档属不属于这个类。
通过上述的这两种算法就可以判断内容之间是否相似从而进行推荐。