作者 | zhpmatrix整理 | newbeenlp
題圖安利我抹零和哥哥,極有可能是全網最可愛的兩隻小貓咪
今天,和大家聊點放鬆的,來看看演算法工程師的工作日常
小陳所在的團隊每週的周一,週三,周五都會在晚上法定下班時間後(此處要打碼?)做乙個一小時的技術分享。一天,正當小陳津津有味的聽同事唾沫橫飛的講解乙個模型時,老劉突然神色慌張地闖進會議室,滿面通紅的對小陳說,「快點兒快點兒,你的模型5xx了,快去看看吧。」
小陳飛奔出去。
在從會議室飛奔到自己工位的路上,思緒紛飛,想到了自己的模型在上線時,**被review後,處理各種comments時的場景。
「使用者輸入為空時,怎麼辦?」
「你不能假定使用者不會輸入什麼,要做轉碼處理。」
「你的函式名能不能改一下,容易理解的那種。」
「**要簡潔,你的**雖然是從框架中扒出來的,但是要盡可能整潔,不要的**都刪掉。」
……坐到工位上,想到了之前工程組的大佬給演算法組的同學分享如何debug時講到的三要素:**,日誌和現場。於是向產品小妹妹要到了模型輸入的case,測試輸入,確實5xx了。看日誌,確實某行**在處理這個case的時候,越界了。
小陳不開心了。
「我是做模型的啊,不是只需要保證測試集和訓練集的一致就行了嗎?我的測試集中怎麼會出現這種case?後端同學呼叫我的模型的時候,難道不做異常處理嗎?為什麼需要我來做啊。啥都要我做了,後端同學只需要呼叫一下?那是不是併發也需要我來做啊…」
於是小陳找到後端對接同學,理論一番。後端同學心裡其實也很早就不爽了。因為服務不可用的原因,已經被產品同學擠兌了好多次了。
「我們怎麼知道你需要做什麼預處理啊?」
「我們在呼叫你的模型的時候,以為你都做了異常處理了啊。」
……這個時候,產品leader拿著乙份模型評測報告走向小陳。「我說小陳啊,你目前的模型評測指標不如上一版啊,為啥上線了啊?」
「我的評測指標提公升了10個百分點啊。」, 小陳反駁到。心裡想,「產品端拿10個case來測,能測出個錘子來。」,實際上,小陳當然也測了產品端的測試標準,要知道,模型指標和業務指標是兩種不同的評測指標。
沒錯,這是小陳的日常,乙個nlp演算法工程師的日常。當然,討論的結果自然是:小陳加異常處理,小陳需要考慮到各種使用者輸入的邊界,小陳要重新做測試,小陳要做併發提速。然後小陳要提交**給leader做**review,小陳要寫logging,要**整潔,要命名規範…
小陳心疼求虎摸。
(1)演算法工程師要不要考慮來自業務端的各種輸入情況?
實際上,距離業務端最近的同學可能是對各種輸入情況最了解的,演算法端同學實際上看到的更多的是標準的訓練和測試集,從這個角度來說,業務端近的同學做比較合適,保證呼叫模型時,模型的輸入是合法的。但是,從另一方面來講,一般團隊都會有內部的模型管理平台,也就是說通過該平台,模型可以單獨地對使用者服務,從這個角度來說,當然是演算法同學來做了。
因為這個事情其實誰來做都有理由,所以自然就遇到了演算法和工程同學在面對一些問題時的邊界模糊問題,這正是撕逼的**之一。
(2)演算法工程師要不要做服務可用性?
實際上,模型是部署在乙個模型管理平台上的,該平台後端是資源排程平台,前端是複雜的一些工程模組,同時會有儲存模組。完整的模型管理平台會有乙個監控模組,該模組不僅監控模型或者服務的一些基本情況,同時可能會對模型的周邊資源進行監控管理。
同學,想不想體驗一下「連環奪命call」的體驗?不過,無論怎樣,當模型要單獨對外服務的時候,自然要保證服務的可用性。
(3)演算法工程師如何做測試?
乙個模型能否上線,要同時兼顧模型指標和業務指標。很多時候演算法的同學可能關注更多的模型指標,但是線下模型指標的提公升並不一定能夠帶來業務指標的提公升,一般的a/b測試可以用來科學地評估業務提公升。但是這裡帶來的問題是:誰來測?
模型測試也是軟體測試,既然是軟體測試,將傳統測試方**用於模型測試總是沒有錯的。不過同時要看到模型測試有其特殊性,具體問題終究需要具體分析。
(4)還有很多問題。不要以為乙個nlp演算法工程師的日常都是讀**,推公式,設計模型等,可能很多時候,你也會做這些:
比如看資料,標註資料,是那種一條條的看,一條條的標。不要小瞧這個階段的工作,很多時候可以帶來顯著的增益。
比如看badcase,做case分析。這個case為啥會誤報呢?怎麼快速fix這個case呢?因為多數時候,你會遇到來做產品同學的靈魂鄙視,「你的模型指標都提公升了那麼多了,這個case還是誤報!!」
比如要花很多時間寫單元測試。
比如要想怎麼把異常不要直接拋給使用者,任務情況下,這種問題都是不可接受的,要做服務可用性。
比如要做**魯棒性。無數工程的同學吐槽過演算法同學的工程能力太差了。實際上,可能平均水平確實不高,但是這與演算法同學的核心訴求不一致,也是能夠理解。無論是產品端還是工程端同學都迫切希望演算法同學的工程能力有所提公升。
比如,首先希望你是乙個好的工程師,然後是乙個好的演算法工程師。
比如,模型在乙個nlp演算法工程師的日常中,佔的比重真的不高。分析各種問題,解決各種可能是來自資料,模型,工程上的各種問題。必要時,給產品同學科普演算法能力,銷售演算法能力。
業務工作流引擎排程演算法簡析 一
在工作流系統中,系統排程是核心,排程演算法的生效程度和成熟性直接決定了工作流系統的可用性。本文章描述工作流如何推進和回退,並且描述在分之 合併 跳轉等特殊情況下的流轉規則處理。1.1 流程例項 1.2 啟動節點 start state 1.3 終止節點 end state 1.4 活動節點 acti...
業務和技術的融合
我記得三年前去一家軟體公司應聘的時候,面試我的是乙個做市場方面的領導,當時他問了我乙個問題 你認為技術是最重要的嗎,業務一點都不重要嗎?聽他這麼問,我當時就說不是,業務也很重要,技術要依託於業務才能產生價值。來到現在幹的這家公司後,前些天又聽到我公司的技術總監說 其實單純做技術是走不遠的,技術要和業...
工程上的排序演算法
1 若你需要排序的是基本資料型別,則選擇快速排序。若你需要排序的是引用資料型別,則選擇歸併排序。基於穩定性考慮 可以去參考一下排序穩定性的概念,基本資料型別相同值,誰前誰後無意義 因為基本資料型別之間無差異,不需要考慮排序演算法穩定性,而歸併排序則可以實現演算法的穩定性。2 當你需要排序的樣本數量小...