為什么說普通工程師也要懂得機器學習

jopen 9年前發布 | 11K 次閱讀 機器學習

Robbin大神最近寫了篇文章叫 增長黑客與個人站長

里面舉了純銀推廣蟬游記的方法:

一開始,我們的運營團隊收集了近千個種子用戶名單,挨個去拉,成功率近乎于0。崩潰了。然后去微博上搜索“剛結束旅行”的用戶拉人,成功率還是近乎于0。再次崩潰了。

因為我的個人風格,再加上天使輪確實也沒什么錢,當時沒用錢開路,也就是不用現金獎勵,這個獎勵那個獎勵去吸引用戶來寫游記,就是硬拉,下場極慘,差點掛在這里。

我只好動用萌系產品技能,做了一個過渡產品叫“旅行推”。

旅行推這個網站吶,只做一件事,抓取“正在旅行中的人”,所發的“關于這次旅行的微博”,按目的地展示出來,樣式是爛大街的瀑布流。這件事情的難點在于,如何鑒定這是一條旅行分享微博?

我好想去巴黎哦算不算?我家住在巴黎公社小區算不算?我買了個包牌子是香榭麗算不算?

當然不算。必須得是正在旅行中的人,在旅行中實時發送的,與這次旅行相關的微博才算。

到現在為止,似乎只有旅行推做到了這一點。

我設計了一套核心算法,過濾掉臟數據,僅保留有效數據,后來又加入了另外9道過濾規則,以及不斷調試關鍵字庫,最后達到了驚人的……97%有效率。

抓取100條微博,目測97條有效。

這樣做,目的地必須限制在典型的“旅行目的地”,以國外為主,國內則是西藏,新疆,內蒙這種微博用戶較少的地區。廈門,成都,杭州都不行,北上廣更不行。即便有此限制,抓取數量也達到了每天3000條左右,相當于每天發現2000個以上的,有記錄和分享意愿的中長途旅行用戶。

神奇的抓取引擎默默地跑了半年,直到新浪修改搜索算法,抓取失效為止,大約抓了30萬目標用戶過來。然后我們就一個個去勾搭嗎?

Too young, too simple, sometimes naive.

蟬小隊的運營妹子設計了一套神奇的自動對話機制,印象里大約是這樣的:

機器人評論:在嗎?對方:在(不管回答什么,都觸發下一條評論)機器人評論:我們是一個年輕的創業團隊,有一個不情之請。對方:xxxxx(不管回答什么,都觸發下一條評論)機器人評論:邀請你來寫游記blablabla 機器人評論:邀請你來寫游記blablabla (這里專門拆成2條評論發,更接近真人對話風格)對方:xxxxx(不管回答什么,機器人再無回復)

直到機器人關停三年后的今天,還能遇到有人跟我說,你們的運營人員曾經在微博上拉過我寫游記,當時太忙,不好意思沒來哦。

我:呵呵,呵呵呵呵,呵呵呵呵呵呵,不客氣不客氣。

在我的記憶里,只有一兩個人識破了這個機器人謎題,其他人受到了狡猾的蒙蔽……于是,30萬目標用戶+不知厭煩的機器人,完成了蟬游記的冷啟動。

</blockquote>

還是很有趣的。這套組合拳,打的還是非常有技巧的。

這個世界存在一些事情,其實蠻多人需要的,但是人群又不大,缺少商業價值,但做起來倒也沒多復雜。

純銀敏銳的意識到,通過做這么一件事情獲得流量,對于處于襁褓時期的產品的引流,也還是頗有意義的。想想現在一個移動APP獲取一個用戶的成本有多大,你就知道做這么一件事情是值得的。

純銀抓住這么一個事情,做了個【旅行推】。顯然,這里存在兩個難點

  1. 如何獲取內容。肯定不能靠自己產生內容,所以只能去聚合。一般做聚合的產品,做的好,其實都不錯。因為他們都解決了一個核心痛點:幫用戶在數據的海洋中找到他想要的數據。 比如Google搜索,比如今日頭條。
  2. 當用戶瀏覽這些內容時,如何將流量導入到想要推廣的產品。
  3. </ol>

    這兩件事情對于普通工程師來說,都不太好做。而對于一個算法工程師而言,其實一看到這兩個需求,心里就已經知道怎么做了。因為這些其實都是他們日常的工作內容。

    看看第一個難點,純銀也說了,核心要求是“如何判斷一條微博是不是分享自己旅行“。純銀是個很聰明的人,挖掘出了很多規則,而且達到了一個相當高準確率。但是如果我沒有純銀這么聰明該怎么辦呢?

    我記得我中學的時候,對于各種幾何證明題,那是相當頭疼。智商不高哇。后來我知道有一個叫‘機器證明’理論,是吳文俊提出的,我特地學了一段時間,基本照著步驟就能證明一個定理。不用太動腦。

    而在機器學習領域,其實“如何判斷一條微博是不是分享自己旅行“是一種常見類型的問題。我們可以把他定義為一個二分類問題。一旦定義了這個問題,一堆的分類算法就出現了:SVM,邏輯回歸,貝葉斯。基本把數據丟進算法包,就搞定了。

    一般上面提到的算法,都屬于監督類型算法,也就是說要喂語料。可以人工找個幾百條,也能比較容易解決。也可以寫一些簡單規則,先篩選一批出來,有誤差也沒啥大問題。然后就可以走標準的模型訓練,模型使用了。

    一般這種二分類問題,比較容易上90%以上的準確率。我之前做過一個8分類的,第一次的準確率就到87%。

    純銀最后通過目測“抓取100條微博,目測97條有效”,其實忽略了一個問題,對于這類問題,我們除了要一個準確率外(他這里強調的是準確率),還需要一個查全率,和搜索引擎是一個道理。通過規則的方式,對查全率其實會影響比較大。

    一般通過這種規則的方式,比較考驗程序員的觀察能力,每個人做的都不一樣,但是如果用標準的機器學習方法去做,則大家按照流程做,基本不用什么思考,就能達到類似的效果。因為已經有人把這種類型的問題給‘機器化’了。不需要人的抽象思考就能搞定。

    這里的理念和我之前對大數據平臺中提及的理念是一致的:

    數據平臺從數據角度來看,其本質是處理非結構化數據的一套規范化,標準化的模式

    </blockquote>

    機器學習其實也是類似的。將解決問題的方式標準化,流程化,不需要你動太多的腦子。

    我們看看,如果你想進一步深入,是怎么就跑到機器學習范疇里去的。

    純銀通過添加關鍵詞以及規則,一定會遇到一個問題,就是如果內容包含一個關鍵字,是不是一定就是旅行微博了,如果包含了兩個呢,到底需要多少個?我不清楚他提及的規則和關鍵字是并列的,還是規則是基于關鍵字的規則。如果是基于關鍵字的規則,這種規則其實就可以泛化。可以解決一類問題,不就是求 微博中出現A詞,是旅行微博的概率,如果同時也出現B詞,是旅行微博的概率,具體的大家可以看看這篇文章: 貝葉斯推斷及其互聯網應用(二):過濾垃圾郵件。于是我們就可以通過貝葉斯概率來計算微博是不是關于旅行的。但是這局限在了具體一個算法。你會想,我們其實還可以再上一個層次的。這不就是一個分類的問題么?而且是個二分類問題,YES/NO。 于是一波搞統計類機器學習的人就固化除了這一類問題的解決方案。

    于是‘后人們’處理的方式就倒過來了,先定位一個問題屬于什么問題,是分類問題?還是回歸類問題?還是聚類問題?接著找到這類問題的工具集,可以是一個軟件,也可以是一個開發包,也可以是一個算法自己實現。然后把數據喂給標準的處理程序,就得到結果了。

    我們再來看看第二個問題:

    當用戶瀏覽這些內容時,如何將流量導入到想要推廣的產品 

    純銀很聰明,也敢于挑戰。做了個機器人。一般人想到做機器人,估計覺得自己做不了,但是純銀敢于迎難而上。通過精巧的設計,使得程序開發的難度讓一個剛畢業的學生也能實現,不得不驚訝其智慧。我能說純銀是十分精通社會工程學社會心理學么。

    但其實問答機器人已經非常普及,做一個也不難。各家大公司都有,京東的jimi,蘋果的Siri,微軟的小冰,Google的智能助手。當然做成他們那樣,還是比較吐血的。但是如果做得比純銀的及其人略微好些,也是不難的。

    機器學習有一個很重要的用途是節省人力,可以應對海量的‘人’。比如第一個需求,如果是通過編輯去做,也還好。因為收集的微博倒也不需要太大的量。第二個需求,如果是人工去做,就麻煩了,它怎么搞定30萬用戶?但是服務器的的話無怨無悔,基本無成本,就算一百萬人,也沒問題。

    機器學習并不一定應用在推薦,搜索領域。其實方方面面都用到了。而且能夠很好的加強用戶的體驗。

    舉個最簡單的例子,博客大家都做爛了吧,學程序的時候,就會寫個博客系統練手。在寫博文的時候,

    • 如何給用戶推薦標簽,方便用戶后續整理自己內容,也方便網站使用?
    • 用戶貼了一段代碼,如何能直接判斷其語言?
    • 用戶寫了標題后,我們是不是能給用戶主動推一些參考文章,方便他寫下去?
    • </ul>

      當然如果產品設計的不適當就是騷擾了。假設開發工程師沒有一丁點的機器學習知識,就會用‘最直觀的方式去做’。

      • 比如第一個方法準備個詞庫,用戶寫內容去抽詞匯。
      • 第二個可能又得準備個詞庫,然后判斷一些關鍵字。
      • 第三個通過利用搜索?
      • </ul>

        直觀的方式往往需要做很多‘苦力’,還不一定能做好。也非常需要費大腦去總結出一些‘規則’。然而一堆的規則,每個規則的權重是什么?怎么定義?這些機器學習提供了數學的方法去支撐,提供了一套完善的思考流程去讓你解決問題。

        作為一個工程師,不應該僅僅要求機器執行固定的指令,我們希望自己的代碼能夠讓機器更加‘聰明’些。幫助人們減輕工作。

        也許你會說,我足夠聰明,可以做到和純銀一樣的水平。不過,你額外掌握一些基礎的機器學習理論,或許能夠做到50w用戶呢?

        其實這篇內容的標題也可以改成: 【機器學習給工程師帶來了什么】,和我之前寫的內容就差不多了(好吧,我承認我打廣告了) 大數據給公司帶來了什么

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

         本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!