問題的解決能力
問題的解決能力大部分入門的演算法都容易把精力集中在模型上,無論是理論還是實踐,但是卻背離了演算法本身所依託的背景。作為工程師而非科研人員,其核心價值在於解決問題而非研究模型,當一個問題能使用簡單的規則策略去解決的時候,我們並不應該使用訓練時間長、結果不可控、效果風險不明確的模型作為解決方案。
舉例子,客服機器人大家都知道,對於演算法而言可能就會開始看文字生成、對話機器人的知識了,但是實質上,一個“觸發詞-回答”的詞典就能達到初版上線要求。命名實體識別在很多場景其實沒有標註資料,模型根本無用武之地,語言模板規則、詞典最大逆向匹配都是很好的方法,不必糾結於模型。
另一方面,解決問題的能力還要體現在逆境上,資料不全、資料質量不高、缺乏訓練資料的時候,你要提出你的解決方案,尤其是在新專案下,這種場景很常見,能開天闢地的往往是高手,你具備這些能力才能夠進一步進階,除了研究模型本身,多想想類似“萬一有XXX情況,這個方法還是否可行,不可行怎麼辦。
記住,使用者對實現方法的高階低端是沒有任何感知的,老闆也是。
模型的優化能力
演算法工程師的工作看著很簡單,問題一來加模型調結構上線。
但問題是,如果模型效果不好,你該怎麼辦?換一個模型,調參?基本也是差不多的效果,大家看論文其實可以看到,在論文裡模型的提升基本不會超過10個點對吧,所以換模型只能存在於微調中。那你就沒轍了?這就是體現演算法工程師優勢的能力所在。
你可以:看看資料質量、資料量怎麼樣要不要提升。看看特徵是否足夠表徵個體。標註是否正確。模型特性是否符合問題(例如RNN和CNN的適用場景)等等。
尤其是在NLP領域,整體非常黑盒,整個模型的流程相對固定,基本沒有什麼干預措施,所以你的選擇會變得更少,如何能進一步提升結果,(新增人工特徵、優化資料集、優化模型等)這個需要的是你的智慧和經驗了。
順風局誰都會打,逆風局如何化腐朽為神奇才是高手該體現的能力。
工程能力
這個概念有點模糊,簡單舉幾個例子吧:
* 你的演算法耗時多少,是否具備多執行緒的能力。(例如一般而言RNN系列模型的耗時都偏長)
* 演算法如何部署,線上部分特徵怎麼構建和傳入。
* 你寫的演算法複雜度多少,有沒有優化空間。(例如用Trie樹代替便利詞表實現檢索功能)模型的更新是熱更新還是需要重啟服務,生效時長等。
問題的解決能力
問題的解決能力大部分入門的演算法都容易把精力集中在模型上,無論是理論還是實踐,但是卻背離了演算法本身所依託的背景。作為工程師而非科研人員,其核心價值在於解決問題而非研究模型,當一個問題能使用簡單的規則策略去解決的時候,我們並不應該使用訓練時間長、結果不可控、效果風險不明確的模型作為解決方案。
舉例子,客服機器人大家都知道,對於演算法而言可能就會開始看文字生成、對話機器人的知識了,但是實質上,一個“觸發詞-回答”的詞典就能達到初版上線要求。命名實體識別在很多場景其實沒有標註資料,模型根本無用武之地,語言模板規則、詞典最大逆向匹配都是很好的方法,不必糾結於模型。
另一方面,解決問題的能力還要體現在逆境上,資料不全、資料質量不高、缺乏訓練資料的時候,你要提出你的解決方案,尤其是在新專案下,這種場景很常見,能開天闢地的往往是高手,你具備這些能力才能夠進一步進階,除了研究模型本身,多想想類似“萬一有XXX情況,這個方法還是否可行,不可行怎麼辦。
記住,使用者對實現方法的高階低端是沒有任何感知的,老闆也是。
模型的優化能力
演算法工程師的工作看著很簡單,問題一來加模型調結構上線。
但問題是,如果模型效果不好,你該怎麼辦?換一個模型,調參?基本也是差不多的效果,大家看論文其實可以看到,在論文裡模型的提升基本不會超過10個點對吧,所以換模型只能存在於微調中。那你就沒轍了?這就是體現演算法工程師優勢的能力所在。
你可以:看看資料質量、資料量怎麼樣要不要提升。看看特徵是否足夠表徵個體。標註是否正確。模型特性是否符合問題(例如RNN和CNN的適用場景)等等。
尤其是在NLP領域,整體非常黑盒,整個模型的流程相對固定,基本沒有什麼干預措施,所以你的選擇會變得更少,如何能進一步提升結果,(新增人工特徵、優化資料集、優化模型等)這個需要的是你的智慧和經驗了。
順風局誰都會打,逆風局如何化腐朽為神奇才是高手該體現的能力。
工程能力
這個概念有點模糊,簡單舉幾個例子吧:
* 你的演算法耗時多少,是否具備多執行緒的能力。(例如一般而言RNN系列模型的耗時都偏長)
* 演算法如何部署,線上部分特徵怎麼構建和傳入。
* 你寫的演算法複雜度多少,有沒有優化空間。(例如用Trie樹代替便利詞表實現檢索功能)模型的更新是熱更新還是需要重啟服務,生效時長等。