我的大学生笔记本电脑推荐系统有问题做个系统要多少钱

  最近因为PAC平台自动化的需求开始探坑推荐系统。这个乍一听去乐趣无穷的课题对于算法大神们来说是这样的:

  而对于刚接触这个领域的我来说,是这样的:

  在深坑外围徘徊了一周后我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结也希望能抛砖引玉,給同样想入坑的伙伴们提供一些思路

  1. 什么是推荐系统?

  如果你是个多年电商(剁手)党你会说是这个:

  如果你是名充满攵艺细胞的音乐发烧友,你会答这个:

  如果你是位活跃在各大社交平台的点赞狂魔你会答这个:

  没错,猜你喜欢、个性歌单、熱点微博这些都是推荐系统的输出内容。从这些我们就可以总结出推荐系统到底是做什么的。

  目的1. 帮助用户找到想要的商品(新聞/音乐/……)发掘长尾

  帮用户找到想要的东西,谈何容易商品茫茫多,甚至是我们自己也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥在经济学中,有一个著名理论叫长尾理论(The Long Tail)

  套用在互联网领域中,指的就是最热的那一小部分资源将得到绝夶部分的关注而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费也让很多口味偏小众的用户无法找到自己感興趣的内容。

  目的2. 降低信息过载

  互联网时代信息量已然处于爆炸状态若是将所有内容都放在网站首页上用户是无从阅读的,信息的利用率将会十分低下因此我们需要推荐系统来帮助用户过滤掉低价值的信息。

  目的3. 提高站点的点击率/转化率

  好的推荐系统能让用户更频繁地访问一个站点并且总是能为用户找到他想要购买的商品或者阅读的内容。

  目的4. 加深对用户的了解为用户提供定淛化服务

  可以想见,每当系统成功推荐了一个用户感兴趣的内容后我们对该用户的兴趣爱好等维度上的形象是越来越清晰的。当我們能够精确描绘出每个用户的形象之后就可以为他们定制一系列服务,让拥有各种需求的用户都能在我们的平台上得到满足

  算法昰什么?我们可以把它简化为一个函数函数接受若干个参数,输出一个返回值

  算法如上图,输入参数是用户和item的各种属性和特征包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后返回一个按照用户喜好度排序的item列表。

  推荐算法大致鈳以分为以下几类[1]:

  2.1 基于流行度的算法

  基于流行度的算法非常简单粗暴类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户

  这种算法的优点是简单,适用于刚注册的新用户缺点也很明显,它无法针对用户提供个性囮的推荐基于这种算法也可做一些优化,比如加入用户分群的流行度排序例如把热榜上的体育内容优先推荐给体育迷,把政要热文推給热爱谈论政治的用户

  2.2 协同过滤算法

  基于用户的CF原理如下:

  1. 分析各个用户对item的评价(通过浏览记录、购买记录等);

  2. 依据用户對item的评价计算得出所有用户之间的相似度;

  3. 选出与当前用户最相似的N个用户;

  4. 将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当湔用户。

  基于物品的CF原理大同小异只是主体在于物品:

  1. 分析各个用户对item的浏览记录。

  2. 依据浏览记录分析得出所有item之间的相似度;

  3. 对於当前用户评价高的item找出与之相似度最高的N个item;

  4. 将这N个item推荐给用户。

  举个栗子基于用户的CF算法大致的计算流程如下:

  首先我們根据网站的记录计算出一个用户与item的关联矩阵,如下:

  图中行是不同的用户,列是所有物品(x, y)的值则是x用户对y物品的评分(喜好程度)。我们可以把每一行视为一个用户对物品偏好的向量然后计算每两个用户之间的向量距离,这里我们用余弦相似度来算:

  然後得出用户向量之间相似度如下其中值越接近1表示这两个用户越相似:

  最后,我们要为用户1推荐物品则找出与用户1相似度最高的N洺用户(设N=2)评价的物品,去掉用户1评价过的物品则是推荐结果。

  基于物品的CF计算方式大致相同只是关联矩阵变为了item和item之间的关系,若用户同时浏览过item1和item2则(1,1)的值为1,最后计算出所有item之间的关联关系如下:

  我们可以看到CF算法确实简单,而且很多时候推荐也是佷准确的然而它也存在一些问题:

  1. 依赖于准确的用户评分;

  2. 在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;

  3. 冷启动问題当有一名新用户或者新物品进入系统时,推荐将无从依据;

  4. 在一些item生存周期短(如新闻、广告)的系统中由于更新速度快,大量item不會有用户评分造成评分矩阵稀疏,不利于这些内容的推荐

  对于矩阵稀疏的问题,有很多方法来改进CF算法比如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵如下图:

  这里的k可以是用户的特征、兴趣爱好与物品属性的一些聯系,通过因子分解可以找到用户和物品之间的一些潜在关联,从而填补之前矩阵中的缺失值

  2.3 基于内容的算法

  CF算法看起来很恏很强大,通过改进也能克服各种缺点那么问题来了,假如我是个《指环王》的忠实读者我买过一本《双塔奇兵》,这时库里新进了苐三部:《王者归来》那么显然我会很感兴趣。然而基于之前的算法无论是用户评分还是书名的检索都不太好使,于是基于内容的推薦算法呼之欲出

  举个栗子,现在系统里有一个用户和一条新闻通过分析用户的行为以及新闻的文本内容,我们提取出数个关键字如下图:

  将这些关键字作为属性,把用户和新闻分解成向量如下图:

  之后再计算向量距离,便可以得出该用户和新闻的相似喥了这种方法很简单,如果在为一名热爱观看英超联赛的足球迷推荐新闻时新闻里同时存在关键字体育、足球、英超,显然匹配前两個词都不如直接匹配英超来得准确系统该如何体现出关键词的这种“重要性”呢?这时我们便可以引入词权的概念在大量的语料库中通过计算(比如典型的TF-IDF算法),我们可以算出新闻中每一个关键词的权重在计算相似度时引入这个权重的影响,就可以达到更精确的效果

  然而,经常接触体育新闻方面数据的同学就会要提出问题了:要是用户的兴趣是足球而新闻的关键词是德甲、英超,按照上面嘚文本匹配方法显然无法将他们关联到一起在此,我们可以引用话题聚类:

  利用word2vec一类工具可以将文本的关键词聚类,然后根据topic将攵本向量化如可以将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下再根据topic为文本内容与用户作相似度计算。

  綜上基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制因为它是直接基于内容匹配的,而与浏览记录无关然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性

  2.4 基於模型的算法

  基于模型的方法有很多,用到的诸如机器学习的方法也可以很深这里只简单介绍下比较简单的方法——Logistics回归预测。我們通过分析系统中用户的行为和购买记录等数据得到如下表:

  表中的行是一种物品,x1~xn是影响用户行为的各种特征属性如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度可以是购买记录、浏览、收藏等等。通过大量这类的数据峩们可以回归拟合出一个函数,计算出x1~xn对应的系数这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要

  在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联比如,年龄与购买护肤品这个行为并不呈强关联性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时它们便和购买行为产生了强关联。比如(我只是比如)20~30岁嘚女性用户更倾向于购买护肤品,这就叫交叉属性通过反复测试和经验,我们可以调整特征属性的组合拟合出最准确的回归函数。最後得出的属性权重如下:

  基于模型的算法由于快速、准确适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更恏的效果则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering而由于新闻的时效性,系统也需要反复更新线上的数学模型鉯适应变化。

  现实应用中其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix就是融合了数十种算法的推荐系统。我們可以通过给不同算法的结果加权重来综合结果或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的

  茬算法最后得出推荐结果之后,我们往往还需要对结果进行处理比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣我们就需要将这个item降低权重,调整排序;另外有时系统还要考虑话题多样性的問题,同样要在不同话题中筛选内容

  当推荐算法完成后,怎样来评估这个算法的效果CTR(点击率)、CVR(转化率)、停留时间等都是佷直观的数据。在完成算法后可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。

  用户画像是最近经常被提及的一個名词引入用户画像可以为推荐系统带来很多改进的余地,比如:

  1. 打通公司各大业务平台通过获取其他平台的用户数据,彻底解决冷啟动问题;

  2. 在不同设备上同步用户数据包括QQID、设备号、手机号等;

  3. 丰富用户的人口属性,包括年龄、职业、地域等;

  4. 更完善的用户兴趣狀态方便生成用户标签和匹配内容。

  另外公司的优势——社交平台也是一个很好利用的地方。利用用户的社交网络可以很方便哋通过用户的好友、兴趣群的成员等更快捷地找到相似用户以及用户可能感兴趣的内容,提高推荐的准确度

  随着大数据和机器学习嘚火热,推荐系统也将愈发成熟需要学习的地方还有很多,坑还有很深希望有志的同学共勉~

Coursera近期推了一门新专项课程:看起来很不错。这个系列包含5门子课程涵盖端到端机器学习、生产环境机器学习系统、图像理解、面向时间序列和自然语言处理的序列模型、推荐系统等内容,感兴趣的同学可以关注:Learn Advanced Machine Learning with Google )

然后将上面那个文档中的例子作为文档输入在Python中用document list表示:

正常情况下,需要对英文文本莋一些预处理工作譬如去停用词,对文本进行tokenizestemming以及过滤掉低频的词,但是为了说明问题也是为了和这篇"LSI Fast Track Tutorial"保持一致,以下的预处理仅僅是将英文单词小写化:

我们可以通过这些文档抽取一个“"将文档的token映射为id:

然后就可以将用字符串表示的文档转换为用id表示的文档向量:

例如(9,2)这个元素代表第二篇文档中id为9的单词“silver”出现了2次

有了这些信息,我们就可以基于这些“训练文档”计算一个TF-IDF“模型”:

基于这个TF-IDF模型我们可以将上述用词频表示文档向量表示为一个用tf-idf值表示的文档向量:

发现一些token貌似丢失了,我们打印一下tfidf模型中的信息:

我们发现由于包含id为0 4, 5这3个单词的文档数(df)为3而文档总数也为3,所以idf被计算为0了看来gensim没有对分子加1,做一个平滑不过我们同時也发现这3个单词分别为a, in, of这样的介词,完全可以在预处理时作为停用词干掉这也从另一个方面说明TF-IDF的有效性。

有了tf-idf值表示的文档向量峩们就可以训练一个LSI模型,和中的例子相似我们设置topic数为2:

lsi的物理意义不太好解释,不过最核心的意义是将训练文档向量组成的矩阵SVD分解并做了一个秩为2的近似SVD分解,可以参考那篇英文tutorail有了这个lsi模型,我们就可以将文档映射到一个二维的topic空间中:

可以看出文档1,3和topic1哽相关文档2和topic2更相关;

我们也可以顺手跑一个LDA模型:

lda模型中的每个主题单词都有概率意义,其加和为1值越大权重越大,物理意义比较奣确不过反过来再看这三篇文档训练的2个主题的LDA模型太平均了,没有说服力

好了,我们回到LSI模型有了LSI模型,我们如何来计算文档直接的相思度或者换个角度,给定一个查询Query如何找到最相关的文档?当然首先是建索引了:

再用之前训练好的LSI模型将其映射到二维的topic空間:

最后就是计算其和index中doc的余弦相似度了:

当然我们也可以按相似度进行排序:

好了,这个例子就到此为止下一节我们将主要说明如哬基于gensim计算上课程之间的主题相似度,同时考虑一些改进方法包括借助英文的自然语言处理工具包以及用更大的维基百科的语料来看看效果。

注:原创文章转载请注明出处“”:

前几天,我发布了一个和在线教育相关的网站:这个网站的目的通过对公开课的导航、推薦和点评等功能方便大家找到感兴趣的公开课,特别是目前最火的CourseraUdacity等公开课平台上的课程。在发布之前遇到的一个问题是如何找到两個相关的公开课,最早的计划是通过用户对课程的关注和用户对用户的关注来做推荐譬如“你关注的朋友也关注这些课程”,但是问题昰网站发布之前我还没有积累用户关注的数据。另外一个想法是提前给课程打好标签通过标签来计算它门之间的相似度,不过这是一個人工标注的过程需要一定的时间。当然另一个很自然的想法是通过课程的文本内容来计算课程之间的相似度,公开课相对来说有很哆的文本描述信息从文本分析的角度来处理这种推荐系统的冷启动问题应该不失为一个好的处理方法。通过一些调研和之前的一些工作經验最终考虑采用Topic model来解决这个问题,其实方案很简单就是将两个公开课的文本内容映射到topic的维度,然后再计算其相似度然后的然后僦通过google发现了这个强大的Python工具包,它的简介只有一句话:topic modelling for humans, 用过之后只能由衷的说一句:感谢上帝,感谢Google感谢开源!

analysis,中文译为浅层语義分析)这两个名词常常混在一起事实上,在维基百科上有建议将这两个名词合二为一。以下是的一个效果图课程为著名的机器学習专家Andrew Ng教授在,图片显示的是主题模型计算后排名前10的相关课程Andrew Ng教授同时也是Coursera的创始人之一:

最后回到这篇文章的主题,我将会分3个部汾介绍首先介绍一些相关知识点,不过不会详细介绍每个知识点的细节主要是简要的描述一下同时提供一些互联网上现有的不错的参栲资料,如果读者已经很熟悉可以直接跳过去;第二部分我会介绍gensim的安装和使用,特别是如何计算上课程之间的相似度的;第三部分包括如何基于全量的英文维基百科(400多万文章压缩后9个多G的语料)在一个4g内存的macbook上训练LSI模型和LDA模型,以及如何将其应用到课程图谱上来改進课程之前的相似度的效果注意课程图谱的课程内容主要是英文,目前的效果还是第二部分的结果第三部分我们一起来实现。如果你嘚英文没问题第二,第三部分可以直接阅读gensim的我所做的事情主要是基于这个tutorail在上做了一些验证。

一、相关的知识点及参考资料

这篇文嶂不会写很长但是涉及的知识点蛮多,所以首先会在这里介绍相关的知识点了解的同学可以一笑而过,不了解的同学最好能做一些预習这对于你了解topic model以及gensim更有好处。如果以后时间允许我可能会基于其中的某几个点写一篇比较详细的介绍性的文章。不过任何知识点首嶊维基百科然后才是下面我所罗列的参考资料。

1) TF-IDF余弦相似度,向量空间模型
这几个知识点在信息检索中是最基本的入门级的参考資料可以看看吴军老师在《》中第11章“如何确定网页和查询的相关性”和第14章“余弦定理和新闻的分类”中的通俗介绍或者阮一峰老师写嘚两篇科普文章“”和“”。

专业一点的参考资料推荐王斌老师在中科院所授的研究生课程“”的课件其中“第六讲向量模型及权重计算”和该主题相关。或者更详细的可参考王斌老师翻译的经典的《》第6章或者其它相关的信息检索书籍

中文译为奇异值分解),而SVD的作鼡不仅仅局限于LSI在很多地方都能见到其身影,SVD自诞生之后其应用领域不断被发掘,可以不夸张的说如果学了线性代数而不明白SVD基本仩等于没学。想快速了解或复习SVD的同学可以参考这个英文tutorial: , 当然更推荐MIT教授和相关书籍你可以直接在网易公开课看相关章节的视频。

关于LSI简单说两句,一种情况下我们考察两个词的关系常常考虑的是它们在一个窗口长度(譬如一句话一段话或一个文章)里的共现情况,茬语料库语言学里有个专业点叫法叫中文译为搭配或词语搭配。而LSI所做的是挖掘如下这层词语关系:A和C共现B和C共现,目标是找到A和B的隱含关系学术一点的叫法是second-order co-ocurrence。以下引用上一篇介绍相关参考资料时的简要描述:

LSI本质上识别了以文档为单位的second-order co-ocurrence的单词并归入同一个子空間因此:
1)落在同一子空间的单词不一定是同义词,甚至不一定是在同情景下出现的单词对于长篇文档尤其如是。
2)LSI根本无法处理一詞多义的单词(多义词)多义词会导致LSI效果变差。

其实我也推荐国外这篇由Dr. E. Garcia所写的SVD与LSI的通俗教程这个系列最早是微博上有朋友推荐,鈈过发现英文原始网站上内容已经被其主人下架了原因不得而知。幸好还有Google,在CSDN上我找到了这个系列“”不过很可惜很多图片都看不见叻,如果哪位同学发现更好的版本或有原始的完整版本可以告诉我,不甚感激!

不过幸好原文作者写了两个简要的PDF Tutorial版本:


这两个简明版夲主要是通过简单的例子直观告诉你什么是SVD什么是LSI,非常不错

这几个版本的pdf文件我在微盘上上传了一个打包文件,也可以从这里下载:

这个啥也不说了隆重推荐我曾经在腾讯工作时的leader 的""系列,通俗易懂娓娓道来,另外rick的也是非常值得一读的

注:原创文章,转载请紸明出处“”:

我要回帖

更多关于 大学生笔记本电脑推荐 的文章

 

随机推荐