Dcard 機器學習指南 (I) — 如何跟 PM 合作規劃新的機器學習專案

Dcard Tech
Dcard Tech Blog
Published in
May 11, 2022

--

Written By ML team lead Bruce

這個系列想要分享在 Dcard 裏面機器學習專案在開發途中的一些經驗,希望可以在分享的途中也跟各位業界的同好們一起討論切磋。

作為系列文的第一篇文章,今天這篇文想分享的事情是在 Dcard 裏面做機器學習的工程師們,在開發一個新的專案或是接一個關於機器學習的新需求之前,運作的流程大概是怎麼樣子,進而讓整個機器學習的專案進行更加順利,也可以讓機器學習的成果跟專案想要交付的價值更加緊密。

一開始會想先寫這個主題的原因是,其實我們平常在機器學習課程裡面,已經學到很多關於各式各樣機器學習演算法的知識以及技巧 / 思考模式。而實際在工作或是應用在專案上面的時候,時常團隊會遇到結果跟產品想要的似乎有一些出入,難以很自然融入產品的狀態。這個狀態其實並不是演算法不夠好或是不夠熟悉演算法,我們自己常常追根究底之後發現,問題的核心常常是在前期需求釐清或是定義問題的時候不夠完善,導致一頭洗下去做到中後期才發現牛頭不對馬嘴的狀態。

在 Dcard 裡,我們在初始一個新的機器學習專案的時候,會切成以下 6 個步驟去做討論跟思考,前 2 個步驟會跟需求方大量的來回討論,中間 3 個步驟會跟同專案的同事們一起做大量的討論,凝聚共識之後再開始開發和迭代整個專案。

圖一:機器學習專案流程

本篇會先著重於如何跟需求方收斂共識及轉化問題的過程(也就是 Step1, 2),在下一篇探討實際開發專案之前,需要先做大量思考,讓後續專案走得更順暢。

Step 1. 思考產品目標

在 Dcard,機器學習專案的產生常常會是由需求方(通常是 PM)帶著他們想要解決的問題或是預設的解法來跟 ML 團隊討論,而討論新專案時,我們首先會反覆跟需求方釐清目標,確認做哪些事情能幫助他們達成目的。以下為假設情境:

PM:嗨嗨我們想要做個文章推薦系統,讓使用者能夠看到他喜歡的文章

ML Team:做推薦系統想要達成的目的是什麼?

PM:希望使用者都能夠在這個 App 找到自己喜歡的文章

ML Team:那會用什麼指標來定義「使用者喜歡」這件事情?

PM:🤔 🤔 🤔 🤔 🤔,應該是點擊率或是日活躍率吧?覺得看越多或越常上線應該會越喜歡這個產品

ML Team:那對 PM 來說,這兩個指標哪一個會比較重要呢?

PM:可能是點擊率

ML Team:那我們做推薦系統的話就會以提高點擊率為目標優先

在 PM 提出需求的過程中,我們跟 PM 去共同探討做推薦系統這個專案的目的,從比較 high level 的「希望使用者可以在 App 裡找到自己喜歡的文章」進到比較指標層級的「優化點擊率」的過程。而在比較進階的專案程度裡,討論的深度會越來越深入,例如上面在 PM 點出他們現階段比較重要的是點擊率的同時,可能會順便做一些資料分析去幫助我們更確定最佳化點擊率,可以跟我們想最佳化的使用者體驗掛上勾。

另外值得注意的是在和 PM 來回討論時,除了釐清需求外,更重要的是排序這些需求的重要程度(像是在例子裡一開始會提到多個指標)。在同時有很多個目標的情況下,不太可能兩全其美,我們會依據現況去跟 PM 討論,並探索真的對目前最重要的指標,專門去最佳化這個指標。

Step 2. 把產品目標轉化成機器學習問題

釐清目標需求之後,我們會怎麼將需求轉化成機器學習可以解決的問題?

在上一步裡,我們確認了當前最想最佳化的指標是點擊率,接下來會把最佳化指標去轉換成機器學習較為擅長解決的問題。這邊以提升推薦系統點擊率為例,通常我們會去觀察使用的情境,進而設計問題。例如在文章推薦的狀況下(以圖二為例),通常使用者如果對推薦文章的其中一篇感興趣的話會去點擊,自然而然就可以把這 6 篇文章當成是 5 個曝光和 1 個點擊。

圖二:你可能感興趣的文章

在這樣子的模擬之下,通常我們會先去研究看看業界有沒有相似的問題以及實際他們大概會怎麼做,這邊調查的話會蠻建議看各個國內外大廠的 Technical Blog(如 Netflix Tech Blog or Pinterest Engineering …) & Top Conference Industry Paper(Recsys, WWW, …),看看別人怎麼做,主要是為了看他們如何思考跟拆解一個類似的問題,可以刺激自己的靈感並得到更好的設計。以上面的推薦系統為例,經過調查我們可能有幾個粗略的方向,去轉化成機器學習可解的問題:

  • 分類問題:分類問題的基本概念是把「有曝光且有點擊」當作是正例;「有曝光但沒點擊」則是負例。
  • sequence prediction:把點擊文章變成一個序列,我們根據使用者前面看過的文章,推薦符合使用者喜好的下一篇文章,讓使用者接連不斷地瀏覽自己喜歡的文章。
  • graph based model:把點擊文章和使用者建邊,藉由 graph based model(如 GNN 或是單純的 deepwalk)來做推薦系統,幫助使用者找到他們喜歡的文章。

另外可以注意一點的是,在剛剛的例子裡,我們其實做了一些假設,幫助我們把一個比較複雜的產品或是商業問題簡化成一個機器學習可解的問題,像是剛剛其實我們沒有特別去考慮未曝光的東西使用者到底喜不喜歡,而是利用已知的曝光及點擊來作為 modeling 的基礎,再去繼續延伸發展我們的演算法。而這中間會有一些未知或不確定的部分,在後續作線上及線下實驗的時候,需要去探討這兩種實驗的相關程度,來幫助我們的演算法可以在實際應用時達到最大的效益。

小結

經過這兩步,我們大概可以把一個比較複雜模糊的產品需求轉換成機器學習可以解決的問題,接下來就是在思考該怎麼做解決問題的技術規劃,這邊會牽涉大量的思辨過程,以及需要做一些資料分析的過程。在下一篇裡,我們會分享我們如何一步一步拆解,思考一個從產品轉化過來的機器學習專案。

另外 Dcard 的機器學習團隊也在徵才中,我們目前專注的領域有推薦、搜尋、 推播、廣告、Data Infrastructure,如果正在閱讀你們對我們在做的事情有興趣的話歡迎來跟我們聊聊~

--

--