欢迎访问本网站,本网站主要提供seo基础教程知识、网站建设相关教程基础和深圳seo招聘信息,同时提供深圳搜索引擎优化服务!
深圳seo欢迎你的到来

免费诊断网站|企业网站关键词排名优化 QQ:276749026

当前位置: 主页 > seo自媒体 > 搜索常见的算法以及模型思考

搜索常见的算法以及模型思考

发布时间:2017-08-06 07:03内容来源: 点击:

写这篇文章,缘自于前几天部门内部成员们进行了一次部门内部现有涉及的一些算法的review以及整理。不过比较囧的就是,由于boss不在,我们讨论讨论着就成了吐槽大会,倒是有一半时间在吐槽产品以及业务部门了~~

不过这也算是一件可喜可贺的事情了,这也可以看做是我们数据部门,已经由开轻型挖掘机向深挖阶段迈步了。

挖掘算法

因此,借此机会,也对自己接触过的,了解过的,或者做过的一些勉强称得上算法的东西做一个梳理。其实,就个人来说,本身就不是做算法出身的,在大学时代,学习的反倒是网络方面多一些,更不知数据挖掘算法为何物。

其实,就所谓算法而言,个人认为,我有个同事说的很对:所谓算法,并不是说那些复杂的数学模型才是算法,哪怕是你写的一个简单的计算公式,只要能够解决现有业务的痛点,有了自己的模型思路,它就是一个算法,只是它可能不够通用,只能解决特定业务需求而已。

在大规模的数据前提下,其实很多复杂的算法过程,反而效果没有这么好,或者说,我们会想方设法去简化其过程。

举个简单栗子:假设有一批大规模数据集,就以近千万篇博文为例。如果提供一篇博文,让你去查询与其相似度最高的top N,那我们的通常思路是什么?通常的做法是计算这篇博文与其他博文的相似度,至于相似度的计算方法就很多了,最简单的就是计算其向量夹角,根据向量夹角判定相似程度。OK,就算你用最简单的计算过程,你试想一下,运算近千万次需要多久?或许,有的人说,俺使用hadoop,利用分布式的计算能力来完成这个任务,但如果实际操作起来,你就会发现这是一个多么蛋疼的事情。

再举一个简单栗子(好吧,多吃点栗子):比如SVM,这是一种难以收敛的算法,在大数据的前提下,有些人希望使用它,但又希望使用更多的数据来训练模型,毕竟手里数据量太大,很多人还是希望使用尽量多的数据训练的,以达到模型更准确的目的。但是,随着训练数据量的增大,像SVM这种难以收敛的算法,其耗费的计算资源还是很巨大的。

东拉西扯说了这么多,自个的梳理工作还没有完成呢!

一、这些年,我开过的挖掘机

(1)最早接触的应该是贝叶斯的分类了

贝叶斯算是分类算法中最简单的算法了,初学挖掘机算法的人十有八九第一个爱上的绝对是它。其实,贝叶斯的原理真的很简单,就是依据统计学的最大概率原理。这么简单,但是就是尼玛这么好用,多年依然屹立不倒。

训练过程就缺乏可陈了,基本上贝叶斯的都这样,由于是文本,所以一套流程下来,分词,去停词,作为最基本的知识点向量,然后就计算模型概率了。不过比较有趣的是,分类过程是放在Storm里头做的,相当于这是一个实时的分类业务。

(2)说到了文本,自然少不了分词算法了

其实说到分词算法,反倒没啥可说的。如今互联网上各种开源的分词工具,都已经做的很好了,效果也差不了多少,想进一步改进的话也够呛。至于说深入到分词算法的内部,涉及上下文法分析,隐含马尔科夫模型等东西,如果是个人出于兴趣去研究,那我没话说;如果是小公司,花费人力物力去优化分词效果,我只能说他们闲着蛋疼;如果是大公司,人家金多任性也是可以理解的。

所以,至今来说,个人对于分词方面的东西,也仅限于初步了解分词算法的衍变,内部大概涉及的算法,以及几种分词工具的使用。

其实,在文本挖掘方面,仅仅针对于文本的分词是不够的,因为我们使用分词拆分出来的单词,往往很多跟业务都是没有关系的,通常做法是,建立对应业务字典,至于字典的建立,当然也是需要分词的,再进行进一步的加工,甚至可能会加上一些人工的工作。

(3)下一个就是实时热点分析了

我也不知道这算不算是算法,说到实时,自然跟Storm又有关系了(好吧,我承认我是搞这个之后开始接触数据的)。说到实时热点,可能大伙儿都摸不着头脑,举个简单栗子就明了了。

玩hadoop的童鞋都知道WordCount这个经典栗子,MapReduce在Map到Reduce的过程中,自动将相同的Key通过类似hash的方法聚合到一起了,所以,统计单词这个需求通过MR来做是辣么的简单。

那Storm的实时WordCount呢?好吧,这也是一个能够记录到实时技术领域史书上的经典案例(好吧,其实它就是一个Storm的HelloWorld)。Storm虽然没有类似MR那种自动Hash的功能,不过它也提供了一种数据分组流策略,也能达到类似的效果,并且它不像MR那样是批量的,它是实时的、流式的,也就是说你能动态的获取到当前变换的单词词频。

实时热点分析,如果我们把热点映射成单词,那我们是不是就可以实时的获取到当前Top N的热点了。这个方向可是有很大的研究价值的,实时地掌握了用户的热点导向,我们就可以动态的调整业务策略,从而衍生更大的数据价值。

不过,总体来说,这个数据模型更多依靠的是Storm这个实时工具的本身功能,模型设计上的东西反倒是少了。至于说算不算是算法模型,就跟前面所说的那样,看个人看法吧,你说是就是了~~

(4)国内很成熟的一种建模--推荐

就目前在国内做数据挖掘的来说,可能分类与推荐是做的最多的两种方向。分类就不多说了,就比如刚才所说的贝叶斯,简直就是分类中的鼻祖算法了。

可能一说到推荐算法,有人脑海里立马就闪现出关联规则、协同过滤、余弦相似性等这些词。这是没错的,但我要说的不是这个。其实个人想说的是推荐就两个方向:基于用户,基于内容。

我们需要注意两点,我们推荐的对象是用户,或者说是类似用户这种有动作行为的实体;而推荐的东西则就是内容,他没有动作行为,但是他有不同的属性,或者用更砖业说法描述就是他必然有知识点。

基于用户推荐,我们看重的不是内容这个实体,而是用户本身的行为,我们认为用户的行为必然隐含着一些信息,比如,人的兴趣导向,那么既然你有了相关的行为,那么我按照你的行为去给你推荐一些东西,这总是有一定道理的。

基于内容的推荐,我们的侧重点则是内容,这就跟用户的历史行为无关了。我们潜意识的认为,既然你会看这个内容,那么跟这个内容有关系的内容,你是不是也感兴趣呢?或许这样说有失偏颇,但是大体方向是对的。

至于之前说的那些关联规则也好,协同过滤也好,余弦相似性也好,其实就是研究知识点与知识点之间关系所建立的模型。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------