写这篇文章缘自于前几天部分内部成员们进行了一次部分内部现有涉及的一些算法的review以及整理。不外比力V绲木褪牵捎赽oss不在我们讨论讨论着就成了吐槽大会网站内容我们讨论讨论着就成了吐槽大会倒是有一半时间在吐槽产品以及业务部分了~~
不外这也算是一件可喜可贺的事情了这也可以看做是我们数据部分已经由开轻型挖掘机向深挖阶段迈步了。
在大规模的数据前提下其实很多复杂的算法过程反而效果没有这么好或者说我们会想方设法去简化其过程。
举个简单栗子:假设有一批大规模数据集就以近千万篇博文为例。如果提供一篇博文让你去查询与其相似度最高的top N那我们的通常思路是什么?通常的做法是计算这篇博文与其他博文的相似度至于相似度的计算方法就很多了最简单的就是计算其向量夹角按照向量夹角判定相似程度。OK就算你用最简单的计算过程你试想一下运算近千万次需要多久?或许有的人说俺使用hadoop利用分布式的计算能力来完成这个任务但如果实际操作起来你就会发现这是一个多么蛋疼的事情。
再举一个简单栗子(好吧多吃点栗子):好比SVM这是一种难以收敛的算法在大数据的前提下有些人希望使用它但又希望使用更多的数据来训练模型究竟手里数据量太大很多人还是希望使用尽量多的数据训练的以达到模型更准确的目的。但是随着训练数据量的增大像SVM这种难以收敛的算法其耗费的计算资源还是很巨大的。
东拉西扯说了这么多自个的梳理工作还没有完成呢!
一、这些年我开过的挖掘机
(1)最早接触的应该是贝叶斯的分类了
贝叶斯算是分类算法中最简单的算法了初学挖掘机算法的人十有八九第一个爱上的绝对是它。其实贝叶斯的原理真的很简单就是依据统计学的最大概率原理。这么简单但是就是尼玛这么好用多年依然屹立不倒。
训练过程就缺乏可陈了基本上贝叶斯的都这样由于是文本所以一套流程下来分词去停词作为最基本的知识点向量然后就计算模型概率了。不外比力有趣的是分类过程是放在Storm里头做的相当于这是一个实时的分类业务。
(2)说到了文本自然少不了分词算法了
其实说到分词算法反倒没啥可说的。如今互联网上各种开源的分词工具都已经做的很好了效果也差不了多少想进一步改进的话也够呛。至于说深入到分词算法的内部涉及上下文法分析隐含马尔科夫模型等东西如果是个人出于兴趣去研究那我没话说;如果是小公司花费人力物力去优化分词效果我只能说他们闲着蛋疼;如果是大公司人家金多任性也是可以理解的。
所以至今来说个人对于分词方面的东西也仅限于初步了解分词算法的衍变内部大概涉及的算法以及几种分词工具的使用。
其实在文本挖掘方面仅仅针对于文本的分词是不足的因为我们使用分词拆分出来的单词往往很多跟业务都是没有关系的通常做法是建立对应业务字典至于字典的建立当然也是需要分词的再进行进一步的加工甚至可能会加上一些人工的工作。
(3)下一个就是实时热点分析了
我也不知道这算不算是算法说到实时自然跟Storm又有关系了(好吧我承认我是搞这个之后开始接触数据的)。说到实时热点可能大伙儿都摸不着头脑举个简单栗子就明了了。
玩hadoop的童鞋都知道WordCount这个经典栗子排名判断标准举个简单栗子就明了了。
玩hadoop的童鞋都知道WordCount这个经典栗子MapReduce在Map到Reduce的过程中自动将相同的Key通过类似hash的方法聚合到一起了所以统计单词这个需求通过MR来做是辣么的简单。