基于Spark的机器学习经验

通过凝固度、自由度、词频、idf以及重合子串(比如c1c2c3..cNc2c3..cN-1这种形态的,我们认为是重合子串,如果词频一样,则都过滤掉,否则留词频高的)五个维度进行阈值设置和过滤。

事实上,中间结果可以到几百亿,一个不小心就可以把Spark跑死,但是也在这个过程中慢慢对Spark有了更深的理解。最终效果还是不错的,现在它已经作为我们的基础词库了。

我参考了两篇论文,比如凝固度,自由度是出自一篇论文,而重合子串则来自另外一篇论文,然后自己观察实际数据,添加了很多规则,才得到最后的结果。

一说到算法,大概很多人心里就是想着,恩,我把数据转化为算法需要的格式,然后丢给现成的算法跑,跑着就出结果,或者出模型,然后反复尝试,直到得到你认为能接受的或者最优的结果。我一开始也是这么想的,可是如果你真的做这件事情,就发现完全不是那样子啊,需要注意的细节太多了。

因为我们的新词发现是没有词典的,需要枚举所有组合,然后通过一定的规则判定这是不是一个词。比如‘我是天才’,就这四个字,组合有,‘我是’,‘我是天’,‘我是天才’,‘是天’,‘是天才’,‘天才’。

将所有html标签替换成空格。

通过小空格将一个大文本切分成无数小文本块。

我们认为一个词的长度最长不能超过5个字。对每个小文本块再抽取出中文,中英文,英文。将一些特殊字符,类似“!¥……()+{}【】的呀啊阿哎吧和与兮呃呗咚咦喏啐喔唷嗬嗯嗳你们我他她,这是由于”这些不可能成词的字符先去掉。处理的过程中,你可能需要写中文,英文,中英文的抽取方法。

通过上面的五个处理,你计算规模会小非常多。如果不这样处理,估计再大内存都能让你歇菜。接着就是按论文里的规则做计算了,比如算词的凝固度,算重合子串。这里面还会遇到很多性能,或者内存的坑,比如Spark里的groupByKey,reduceByKey。我一开始省事,用了groupByKey,歇菜了,内存直接爆了,为啥,你要去研究groupByKey到底是怎么实现的,一个词出现几十万次,几百万次都很正常啊,groupByKey受不了这种情况。所以你得用reduceByKey。

很好,实现了算法后得到了结果,可人家没告诉你,他贴出来的结果都是好看的,那是因为他是按频次排的,但如果你拉到最后看,结果就不太好看了。这个时候你就需要观察数据了,然后提出新的规则,比如最后得到的中文词结果,我用了一些简单规则过滤下,都是哪些呢?

凡是词里面包含‘或’的,或者’就’的或者上面罗列的,我都认为这个词是没有意义的,经过这个简单规则一过滤,效果好非常多,很多没什么意义的生活词,或者不成词的词就被去掉了。中文,英文,中英文混合,我都加了很多这种规则,最终才过滤出了八万计算机词汇。

重合子串,是这个算法的一个比较大的问题,比如c1c2c3…cNc2c3…cN-1,因为是从统计的方案做的,c1c2c3…cNc2c3…cN-1他们两算出来的分数可能就是一样的,所以如果我们发现他们的分值或者出现频率是一样的,就可以直接排除掉了。

基于Spark做智能问答

其实我做的智能问答算不上智能问答,但是内部一开始这么叫的,所以也就这么顺带叫下来了。其实做的事情非常简单:

比较两个标题的相似度

如果我们能知道两个句子说的其实是一件事情,那么就能打通各产品的互通鸿沟了。之前试水的项目是打通问答到博客的通道。具体效果大家可以看看CSDN的问答产品,里面的机器人,背后用的算法就是这套。

当用户问一个问题,机器人就会到博客里去找有没有这个问题的答案,或者有没有可以做参考的。比较神奇的是,之前有个在问答活跃的人也特别喜欢贴博客链接作为回答,我们对比了机器人和他的结果,发现机器人和他贴的差不多。

对于拥有内容的网站来说,这个技术还是非常重要的,比如CSDN,有论坛,博客,资讯,杂志等等,都是内容的载体。用户在问答频道里问的一个问题,其实在博客,在论坛早就已经有答案了。具体做法是透过word2vec解决一意多词的问题。接着将词转换为句子向量。这样任何一个问题都可以转换为一个向量。同理任何一篇博文的标题也可以转化为一个向量。

对了,这里有个问题是:word2vec计算出来的是用一个稠密的定长向量表示词,我的做法是直接把一个句子的里的词的向量按位做加法,重新得到一个新的向量作为句子的向量。当然,这种方式也是有缺陷,也就是句子越长,信息损耗越大。但是做这种标题性质的相似度,效果出奇的好,那种句子里很多词汇不相同的,它都能算出他们很相似来,这是因为word2vec可以算出不同词汇之间关系。

总结

下面是我的几个观点:

课程Q&A

Q:建议不做RAID的原因是什么?

Q:很多没什么意义的生活词,或者不成词的词,这些词是怎样得到的?也是分析出来的?

A:因为用的都是统计的一些方式,所以肯定会有很多无意义的词汇,假设我们现在得到的词汇几何是A,接着我去爬了一些新闻和生活的类的博客,然后用程序去跑一遍得到一批词汇B,然后A-B就能得到一拼更纯正的计算机词汇。

Q:内存要调到多大才能不会爆掉?是不是有什么比例?

Q:直接把一个句子的里的词的向量按位做加法,这是如何加?能举个例子不?

A:比如考虑一个三维向量:A[1,3,5]B[1,3,7],现在有个句子是AB两个词组成,则对应的向量为A+B=[2,6,12]

Q:一些分词方法具有新词发现的功能,比如crf,楼主是比较过效果么?而且我记得matrix67这个算法复杂度还是很高的?

A:matrix67这个算法复杂度还是非常高的,你实际操作就会发现计算量,内存使用量都很大,crf等据我所知,还都是需要依赖词表的,matrix67的这个方式,完全不需要任何先验的东西。

A:理论上维度越长越好,我当时是随意试了一个值。发现效果其实已经可以了,这是一个可以调整的值,比如你可以分别生成50,150,300维度的,然后试试那个效果好。

THE END
1.教程:生成Spark机器学习应用将Anaconda scikit-learn 库用于 Spark 机器学习 HDInsight 中的 Apache Spark 群集包含 Anaconda 库。 它还包括适用于机器学习的 scikit-learn 库。 该库还包含用于直接从 Jupyter Notebook 生成示例应用程序的各种数据集。 有关使用 scikit-learn 库的示例,请参阅https://scikit-learn.org/stable/auto_examples/https://docs.microsoft.com/zh-cn/azure/hdinsight/spark/apache-spark-ipython-notebook-machine-learning
2.Spark机器学习(第2版)? Spark项目管理委员会成员作品 ? 注重技术实践,通过大量实例演示如何创建有用的机器学习系统 简介 本书结合案例研究讲解Spark 在机器学习中的应用,并介绍如何从各种公开渠道获取用于机器学习系统的数据。内容涵盖推荐系统、回归、聚类、降维等经典机器学习算法及其实际应用。第2版新增了有关机器学习数学基础以及Sparhttps://www.ituring.com.cn/book/2041
3.Spark机器学习(豆瓣)图灵程序设计丛书(共107册),这套丛书还有 《挑战程序设计竞赛2 算法和数据结构》《数据结构与算法图解》《Hadoop深度学习》《持续交付》《短码之美》等。 喜欢读"Spark机器学习"的人也喜欢 ··· Python机器学习实践指南 6.5 颠覆大数据分析 7.5 社交网站的数据挖掘与分析(第2版) 6.4 推荐系统 7.6 发https://book.douban.com/subject/26593179/
4.《Spark机器学习》([南非]彭特里思(NickPentreath)著)简介Spark大数据Spark机器学习Spark高级数据Spark最佳实践Spark大数据新版 人民邮电出版社当当自营 进入店铺收藏店铺 商品详情 开本:16开 纸张:胶版纸 包装:平装 是否套装:否 国际标准书号ISBN:9787115399830 所属分类:图书>计算机/网络>人工智能>机器学习 本商品暂无详情。 http://product.dangdang.com/23769060.html
5.1Spark机器学习sparkMLlib入门spark2.11和2.12区别1 Spark机器学习 spark MLlib 入门 开始学习sparkml了,都知道spark是继hadoop后的大数据利器,很多人都在使用spark的分布式并行来处理大数据。spark中也提供了机器学习的包,就是MLlib。 MLlib中也包含了大部分常用的算法,分类、回归、聚类等等,借助于spark的分布式特性,机器学习在spark将能提高很多的速度。MLlib底层https://blog.csdn.net/tianyaleixiaowu/article/details/82733440
6.[23章全]大数据硬核技能进阶Spark3实战智能物业运营系统实时流处理:Spark的流处理模块Spark Streaming可以实时处理数据流,并提供了低延迟的处理能力,适用于实时推荐、实时分析、日志处理等应用场景。 机器学习:Spark提供了机器学习库MLlib,包括各种常用的机器学习算法和工具,可以在大规模数据上进行机器学习任务,如分类、回归、聚类、推荐等。 https://www.bilibili.com/read/cv32064557/
7.横向对比三大分布式机器学习平台:SparkPMLSTensorFlow分布式机器学习是机器学习领域的一大主要研究方向。近日纽约州立大学布法罗分校计算机科学与工程教授、Petuum Inc. 顾问 Murat Demirbas 和他的两位学生一起发表了一篇对比现有分布式机器学习平台的论文,对 Spark、PMLS 和 TensorFlow 等平台的架构和性能进行了比较和介绍。Murat Demirbas 教授在论文公布后还发表了一篇解读https://www.51cto.com/article/547297.html
8.Spark机器学习库(MLlib)指南之简介及基础统计问题向导: (1)Spark机器学习库是什么,目标是什么? (2)MLlib具体提供哪些功能? (3)MLlib为什么要改用基于DataFrame的API?1.Spark机器学习库(MLlib)指南MLlib是Spark机器学习库,它的目标是使机器学习算法可扩展和易于使用。它提供如下工具: 机器学习(ML)算法:常用的学习算法,如分类、回归、聚类和协同过滤 https://cloud.tencent.com/developer/article/1072951
9.(课程)基于Spark的机器学习经验我之前写文章说,Spark-Shell 是个伟大的创新,加上牛逼的Scala语言,写spark程序就和写普通的shell脚本(或者类似python程序)一样容易。问题是,原来的shell,python只能在单机工作,现在你写的每一行代码,都被放到了一个几百台,几千台的规模上去做了。 以前的统计/机器学习依赖于数据抽样,抽样从统计的角度来看,如果足https://www.jianshu.com/p/8d55a3be3f6a
10.Spark机器学习(彭特里思著)中文pdf完整版[11MB]电子书下载《Spark机器学习》每章都设计了案例研究,以机器学习算法为主线,结合实例探讨了Spark 的实际应用。书中没有让人抓狂的数据公式,而是从准备和正确认识数据开始讲起,全面涵盖了推荐系统、回归、聚类、降维等经典的机器学习算法及其实际应用。 本书介绍了Spark的基础知识,从利用Spark API来载入和处理数据,到将数据作为多种https://www.jb51.net/books/532769.html
11.如何在Spark机器学习中应用scikitlearn?Python教程如何在 Spark 机器学习中应用 scikit-learn? 最近在写spark下的机器学习程序,用RDD编程模型。spark自带的机器学习算法API局限太多。想请问各路大侠,能不能再spark的编程模型下引用scikit-learn? 回复内容: 和以上几个观点不同,我认为在PySpark下引用scikit-learn可能的,但不能直接简单粗暴地移植,而是要相应地对各自https://www.php.cn/php-weizijiaocheng-88868.html
12.SparkMLlib机器学习算法与源码解析培训炼数成金黄美灵,Spark爱好者,现从事移动互联网的计算广告和数据变现工作,专注Spark机器学习在计算广告中的研究和实践。现著有:《Spark MLlib机器学习:算法、源码及实战详解》 CSDN博客专家:http://blog.csdn.net/sunbow0 课程试听: 新颖的课程收费形式:“逆向收费”约等于免费学习,仅收取100元固定收费+300元暂存学费,学习圆http://www.dataguru.cn/article-9322-1.html
13.《SparkMLlib机器学习实践(第2版)》(王晓华)摘要书评试读清华大学出版社(Tsinghua University Press) >Spark MLlib机器学习实践(第2版)清华大学出版社京东自营官方旗舰店 登录查看更多图片 > Spark MLlib机器学习实践(第2版) 王晓华 著 京东价 ¥ 促销 展开促销 配送至 --请选择-- 支持 加入购物车 https://item.jd.com/12056577.html
14.Spark机器学习库指南[Spark1.3.1版]——朴素贝叶斯(NaiveBayes朴素贝叶斯是一个简单的多分类算法。之所以称为朴素,是因为该算法假设特征之间相互独立。朴素贝叶斯的训练非常高效:通过一趟遍历训练数据,计算出每个特征对于给定标签的条件概率分布,然后应用贝叶斯定理计算标签对于观察值的条件概率分布,最后使用这个条件概率进行预测。 https://vimsky.com/article/537.html
15.机器学习KNN算法原理&&Spark实现机器学习-KNN算法原理 && Spark实现 不懂算法的数据开发者不是一个好的算法工程师,还记得研究生时候,导师讲过的一些数据挖掘算法,颇有兴趣,但是无奈工作后接触少了,数据工程师的鄙视链,模型>实时>离线数仓>ETL工程师>BI工程师(不喜勿喷哈),现在做的工作主要是离线数仓,当然前期也做过一些ETL的工作,为了职业的https://www.imooc.com/article/314671
16.大数据平台核心技术(Spark)Spark GraphX—寻找社交媒体中的“影响力用户” 实验数 2 6-2 Spark GraphX—构建图及相关操作 实验数 2 6-3 Spark GraphX—预测社交圈子 实验数 3 Spark机器学习 Spark MLlib Spark中可以扩展的机器学习库,它有一系列的机器学习算法和实用程序组成。 https://www.educoder.net/paths/12027