在 Quora 做機器學習 煉丹 是種怎樣的體驗

2021-09-19 18:32:41 字數 2691 閱讀 4077

概述 一直以來,quora 都致力於拉近人們和有益知識的距離。這意味著,我們需要不斷增加知識的採集,並對知識進行評估,還要知道怎樣高效地對它們進行排序和分類。現在,quora 的重點便是通過問答來實現這些目標:讀者在**上尋找相關的內容,提問者尋找有用的答案,而我們就是從他們的提問中提取出正確問題的答覆者。其次,我們也需要考慮檢測並刪掉違規的內容,以及識別出重複的問題。而為了實現這些目標,我們重點倚靠機器學習技術。

首先讓我們來看乙個典型的案例:quora 的 home feed 功能。在這個最簡單的功能中,系統會根據我們認為特定使用者可能重視的上下文中的一系列特徵,對候選 post 進行排序。之後,這些計算了得分的輸入就會形成乙個基本的漏斗(funnel)。

一如既往地,更多的框架意味著更多碎片(fragmentation)、更多冗餘(redundancy),以及給我們的工程團隊帶來更重的維護負擔。各個團隊的開發人員正在建立不同的系統來應對同乙個技術挑戰,並且無法跨多個應用程式重複利用特徵。

對於乙個典型的機器學習應用程式來說,針對每個問題都有成百上千篇候選 post,而每篇候選 post 中又可以提取出數百個特徵。同一時間,多個產品服務又必須要實時響應,且響應的時間不能超過幾百毫秒。這就意味著,特徵提取受限於時間很緊的速度、計算以及記憶侷限。我們其中的一些框架難以應對這些侷限,也無法成功從日復一日的特徵開發中將系統所面臨的挑戰抽象化。

高水平的設計

為了應對上述所有的挑戰,我們為特徵提取開發了乙個高效能、規模化、無國界的服務——alchemy,它可以泛化到 quora 上所有的機器學習相關應用程式。

在這 feed 功能的案例以及相似的應用程式中,這就意味著將特徵提取這一步驟單獨分離出來作為該**的一項服務。

之前:

來自應用程式的請求會實時排列,並且在某些情況下,源於不同期工作的請求也會進行排隊。每個請求包含了需要評估特徵的請求型別以及候選列表(同時,相應的應用程式會定義每個特徵列表)。之後,alchemy 檢索並組織任一必要的資料,並最終平行計算出每個目標的特徵。

資料儲存

alchemy 使用 hbase 作為它的儲存層,不過它也可以輕易地進行擴充套件來支援其他的儲存庫。為了讓查詢更加高效,我們採用了多個緩衝層(hbase 頂部的 memcache 以及 memcache 頂部的乙個記憶體 lru cache)。我們的資料由 thrift 目標組成,它們可以直接儲存於記憶體 cache,以及以二進位制形式(binary serialized format)儲存於 hbase 和 memcache。

由於高速緩衝器儲存的值會變得陳舊,我們就需要讓 alchemy 知道何時需要從 ground truth 中捨棄掉一些值。這項操作可以通過這種方式實現:從應用程式端寫入 kafka 佇列並從 alchemy 端上的這一佇列中讀取值。該佇列包含 table、 key 以及值資訊,因此 alchem 可以在記憶體緩衝器中用新的值來取代舊的值。

實現 alchemy 的第乙個版本後,我們投入了大量精力來提高該服務的效能。為了讓 alchemy 變得更加快速,我們採用 c++語言將其寫成了乙個單獨的服務,這與將特徵提取器嵌入 web 應用程式的**中的做法相反。這樣做的原因在於:

c++ 是乙個低水平的程式語言,它通常可以比用 python 寫的應用程式執行得更快。

針對每個問題,我們都會傳送成百上千篇候選 post 進行評估,**在候選級別上就能輕鬆實現並行。而在 python 中,**很難在乙個過程內實現並行。

將 alchemy 寫成乙個單獨的服務,我們就能夠在儲存器中儲存大量反序列化的目標,從而巨大地減少資料檢索的延遲(latency),然而這些在 web 應用程式**中通常是無法實現的。

除了決定採用這些設計,我們還 profile 了**以找到並消除熱點。此外,我們還不斷審查了大量的度量標準,以了解當這些熱點出現時的速度回歸(speed regression)源。

(是的,當為單個特徵提取編寫**時,選擇採用 c++ 可能會降低開發速度。然而,我們認為 c++ 所帶來的優勢要遠大於這一損失,因為機器學習工程師在使用 alchemy 時不再需要擔心效能優化問題。)

遷移和未來工作規劃

這些遷移還帶來了許多觀點、反饋和特徵請求,它們都將以實質性的方式積極為我們的路線圖提供資訊。舉乙個小例子,我們開始對目標 id 的請求進行分割槽以實現更好的快取利用率。

至於未來的工作規劃,我們可能會增加 python 的繫結,以便工程師和資料科學家可以更廣泛地使用該系統。我們還會識別特徵之間的依賴關係,構建特徵圖並非同步計算出特徵和資料的依賴關係。乙個靈活的非同步資料檢索抽象,會讓訪問多個資料的儲存變得更加容易。所有這些改進都可以將機器學習工程師的負擔轉移出去,從而使他們可以更專注於開發出色的機器學習模型。

結論 一旦 alchemy 能夠結合大量的應用程式,它的投資回報率是非常高的。系統特徵提取做得更好,也意味著它的排序也做得更好。

所有人都說,增長是乙個伴隨著挑戰的好事。弄清楚如何明智地控制這種增長以減少低效率和冗餘,是值得從多個維度深入思考的事情,並且這種增長可能會帶來很大的收益。

英飛凌微控制器知乎 在英飛凌工作是怎樣一種體驗?

額寄幾問的問題,自己來答算腫麼肥事?當時問這問題的時候,還處在大學畢業還未去公司報道的閒暇時段,當時我的狀態是這個樣子滴 這時完全無壓力,據輔導員透露,這家公司是500強德企呢,還是家上市公司。我心目中高大上的樣子立馬顯現粗來了 高大辦公樓,乾淨整潔的辦公環境,西裝革履。工作幾年以後,人生巔峰是不是...

身為女性,在谷歌工作是一種怎樣的體驗?

當我第一次與elise birkhofer交談時,那是下午5點,這是當天的最後乙個 我已經處於很疲憊的狀態了 但是當我遇到elise時,這種情況發生了變化,她的熱情是顯而易見的 她形容自己 同樣精疲力竭和靈感 但我只能感受到靈感的一部分 她在澳大利亞參加了來自亞太地區的谷歌女性聚會,她們離開了工作幾...

在二線城市工作是一種怎樣的體驗

歸鄉已經一年半了,談談這一年半以來自己的生活感悟。上班的距離明顯感覺要比北京近很多,北京,通勤距離一般都以 10 公里為基準。10 公里一迭代。而我在老家的通勤距離最多也就 10 公里,這幾乎都算是最遠的距離了。而且北上廣深的上班族幾乎都是裝在地鐵裡的人,同為碼農的你,想一想,有多久沒有出門看過外面...