为什么说普通工程师也要懂得机器学习

jopen 8年前

Robbin大神最近写了篇文章叫 增长黑客与个人站长

里面举了纯银推广蝉游记的方法:

一开始,我们的运营团队收集了近千个种子用户名单,挨个去拉,成功率近乎于0。崩溃了。然后去微博上搜索“刚结束旅行”的用户拉人,成功率还是近乎于0。再次崩溃了。

因为我的个人风格,再加上天使轮确实也没什么钱,当时没用钱开路,也就是不用现金奖励,这个奖励那个奖励去吸引用户来写游记,就是硬拉,下场极惨,差点挂在这里。

我只好动用萌系产品技能,做了一个过渡产品叫“旅行推”。

旅行推这个网站呐,只做一件事,抓取“正在旅行中的人”,所发的“关于这次旅行的微博”,按目的地展示出来,样式是烂大街的瀑布流。这件事情的难点在于,如何鉴定这是一条旅行分享微博?

我好想去巴黎哦算不算?我家住在巴黎公社小区算不算?我买了个包牌子是香榭丽算不算?

当然不算。必须得是正在旅行中的人,在旅行中实时发送的,与这次旅行相关的微博才算。

到现在为止,似乎只有旅行推做到了这一点。

我设计了一套核心算法,过滤掉脏数据,仅保留有效数据,后来又加入了另外9道过滤规则,以及不断调试关键字库,最后达到了惊人的……97%有效率。

抓取100条微博,目测97条有效。

这样做,目的地必须限制在典型的“旅行目的地”,以国外为主,国内则是西藏,新疆,内蒙这种微博用户较少的地区。厦门,成都,杭州都不行,北上广更不行。即便有此限制,抓取数量也达到了每天3000条左右,相当于每天发现2000个以上的,有记录和分享意愿的中长途旅行用户。

神奇的抓取引擎默默地跑了半年,直到新浪修改搜索算法,抓取失效为止,大约抓了30万目标用户过来。然后我们就一个个去勾搭吗?

Too young, too simple, sometimes naive.

蝉小队的运营妹子设计了一套神奇的自动对话机制,印象里大约是这样的:

机器人评论:在吗?对方:在(不管回答什么,都触发下一条评论)机器人评论:我们是一个年轻的创业团队,有一个不情之请。对方:xxxxx(不管回答什么,都触发下一条评论)机器人评论:邀请你来写游记blablabla 机器人评论:邀请你来写游记blablabla (这里专门拆成2条评论发,更接近真人对话风格)对方:xxxxx(不管回答什么,机器人再无回复)

直到机器人关停三年后的今天,还能遇到有人跟我说,你们的运营人员曾经在微博上拉过我写游记,当时太忙,不好意思没来哦。

我:呵呵,呵呵呵呵,呵呵呵呵呵呵,不客气不客气。

在我的记忆里,只有一两个人识破了这个机器人谜题,其他人受到了狡猾的蒙蔽……于是,30万目标用户+不知厌烦的机器人,完成了蝉游记的冷启动。

还是很有趣的。这套组合拳,打的还是非常有技巧的。

这个世界存在一些事情,其实蛮多人需要的,但是人群又不大,缺少商业价值,但做起来倒也没多复杂。

纯银敏锐的意识到,通过做这么一件事情获得流量,对于处于襁褓时期的产品的引流,也还是颇有意义的。想想现在一个移动APP获取一个用户的成本有多大,你就知道做这么一件事情是值得的。

纯银抓住这么一个事情,做了个【旅行推】。显然,这里存在两个难点

  1. 如何获取内容。肯定不能靠自己产生内容,所以只能去聚合。一般做聚合的产品,做的好,其实都不错。因为他们都解决了一个核心痛点:帮用户在数据的海洋中找到他想要的数据。 比如Google搜索,比如今日头条。
  2. 当用户浏览这些内容时,如何将流量导入到想要推广的产品。

这两件事情对于普通工程师来说,都不太好做。而对于一个算法工程师而言,其实一看到这两个需求,心里就已经知道怎么做了。因为这些其实都是他们日常的工作内容。

看看第一个难点,纯银也说了,核心要求是“如何判断一条微博是不是分享自己旅行“。纯银是个很聪明的人,挖掘出了很多规则,而且达到了一个相当高准确率。但是如果我没有纯银这么聪明该怎么办呢?

我记得我中学的时候,对于各种几何证明题,那是相当头疼。智商不高哇。后来我知道有一个叫‘机器证明’理论,是吴文俊提出的,我特地学了一段时间,基本照着步骤就能证明一个定理。不用太动脑。

而在机器学习领域,其实“如何判断一条微博是不是分享自己旅行“是一种常见类型的问题。我们可以把他定义为一个二分类问题。一旦定义了这个问题,一堆的分类算法就出现了:SVM,逻辑回归,贝叶斯。基本把数据丢进算法包,就搞定了。

一般上面提到的算法,都属于监督类型算法,也就是说要喂语料。可以人工找个几百条,也能比较容易解决。也可以写一些简单规则,先筛选一批出来,有误差也没啥大问题。然后就可以走标准的模型训练,模型使用了。

一般这种二分类问题,比较容易上90%以上的准确率。我之前做过一个8分类的,第一次的准确率就到87%。

纯银最后通过目测“抓取100条微博,目测97条有效”,其实忽略了一个问题,对于这类问题,我们除了要一个准确率外(他这里强调的是准确率),还需要一个查全率,和搜索引擎是一个道理。通过规则的方式,对查全率其实会影响比较大。

一般通过这种规则的方式,比较考验程序员的观察能力,每个人做的都不一样,但是如果用标准的机器学习方法去做,则大家按照流程做,基本不用什么思考,就能达到类似的效果。因为已经有人把这种类型的问题给‘机器化’了。不需要人的抽象思考就能搞定。

这里的理念和我之前对大数据平台中提及的理念是一致的:

数据平台从数据角度来看,其本质是处理非结构化数据的一套规范化,标准化的模式

机器学习其实也是类似的。将解决问题的方式标准化,流程化,不需要你动太多的脑子。

我们看看,如果你想进一步深入,是怎么就跑到机器学习范畴里去的。

纯银通过添加关键词以及规则,一定会遇到一个问题,就是如果内容包含一个关键字,是不是一定就是旅行微博了,如果包含了两个呢,到底需要多少个?我不清楚他提及的规则和关键字是并列的,还是规则是基于关键字的规则。如果是基于关键字的规则,这种规则其实就可以泛化。可以解决一类问题,不就是求 微博中出现A词,是旅行微博的概率,如果同时也出现B词,是旅行微博的概率,具体的大家可以看看这篇文章: 贝叶斯推断及其互联网应用(二):过滤垃圾邮件。于是我们就可以通过贝叶斯概率来计算微博是不是关于旅行的。但是这局限在了具体一个算法。你会想,我们其实还可以再上一个层次的。这不就是一个分类的问题么?而且是个二分类问题,YES/NO。 于是一波搞统计类机器学习的人就固化除了这一类问题的解决方案。

于是‘后人们’处理的方式就倒过来了,先定位一个问题属于什么问题,是分类问题?还是回归类问题?还是聚类问题?接着找到这类问题的工具集,可以是一个软件,也可以是一个开发包,也可以是一个算法自己实现。然后把数据喂给标准的处理程序,就得到结果了。

我们再来看看第二个问题:

当用户浏览这些内容时,如何将流量导入到想要推广的产品 

纯银很聪明,也敢于挑战。做了个机器人。一般人想到做机器人,估计觉得自己做不了,但是纯银敢于迎难而上。通过精巧的设计,使得程序开发的难度让一个刚毕业的学生也能实现,不得不惊讶其智慧。我能说纯银是十分精通社会工程学社会心理学么。

但其实问答机器人已经非常普及,做一个也不难。各家大公司都有,京东的jimi,苹果的Siri,微软的小冰,Google的智能助手。当然做成他们那样,还是比较吐血的。但是如果做得比纯银的及其人略微好些,也是不难的。

机器学习有一个很重要的用途是节省人力,可以应对海量的‘人’。比如第一个需求,如果是通过编辑去做,也还好。因为收集的微博倒也不需要太大的量。第二个需求,如果是人工去做,就麻烦了,它怎么搞定30万用户?但是服务器的的话无怨无悔,基本无成本,就算一百万人,也没问题。

机器学习并不一定应用在推荐,搜索领域。其实方方面面都用到了。而且能够很好的加强用户的体验。

举个最简单的例子,博客大家都做烂了吧,学程序的时候,就会写个博客系统练手。在写博文的时候,

  • 如何给用户推荐标签,方便用户后续整理自己内容,也方便网站使用?
  • 用户贴了一段代码,如何能直接判断其语言?
  • 用户写了标题后,我们是不是能给用户主动推一些参考文章,方便他写下去?

当然如果产品设计的不适当就是骚扰了。假设开发工程师没有一丁点的机器学习知识,就会用‘最直观的方式去做’。

  • 比如第一个方法准备个词库,用户写内容去抽词汇。
  • 第二个可能又得准备个词库,然后判断一些关键字。
  • 第三个通过利用搜索?

直观的方式往往需要做很多‘苦力’,还不一定能做好。也非常需要费大脑去总结出一些‘规则’。然而一堆的规则,每个规则的权重是什么?怎么定义?这些机器学习提供了数学的方法去支撑,提供了一套完善的思考流程去让你解决问题。

作为一个工程师,不应该仅仅要求机器执行固定的指令,我们希望自己的代码能够让机器更加‘聪明’些。帮助人们减轻工作。

也许你会说,我足够聪明,可以做到和纯银一样的水平。不过,你额外掌握一些基础的机器学习理论,或许能够做到50w用户呢?

其实这篇内容的标题也可以改成: 【机器学习给工程师带来了什么】,和我之前写的内容就差不多了(好吧,我承认我打广告了) 大数据给公司带来了什么

来自:https://github.com/allwefantasy/my-life/blob/master/you-should-learn-machine-learning.md