my-life/you-should-learn-machine-learning.md at master ・ allwefantasy/my-life



my-life/you-should-learn-machine-learning.md at master ・ allwefantasy/my-life

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

一开始,我们的运营团队收集了近千个种子用户名单,挨个去拉,成功率近乎于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用户呢?


Read full article from my-life/you-should-learn-machine-learning.md at master ・ allwefantasy/my-life


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts