零基礎(chǔ)如何做AI開源項目?

image.png

背景

GitHub沟突,國際知名社交網(wǎng)站醋拧,匯集了全球眾多開源項目大刊,卡脖子留下的一口新鮮空氣。細心的人可能注意到敌蜂,我公眾號logo就借鑒了github經(jīng)典配色

image.png

如何談笑風(fēng)生地做一個開源項目呢箩兽?可以做做資料的收集,也就是github慣用的awesome系列章喉。awesome一個研究方向汗贫,awesome面試經(jīng)驗,甚至還可以awesome的awesome秸脱。

image.png

曾做過一個深度學(xué)習(xí)時序預(yù)測工具落包,也有100star。據(jù)我微薄的經(jīng)驗撞反,分享一點開源機器學(xué)習(xí)的經(jīng)驗妥色。這篇簡單的文章,也算多年總結(jié)遏片。對時序有興趣的家人們嘹害,也歡迎嘗試和參與項目。

github.com/LongxingTan/Time-series-prediction

一: 明確需求吮便、愿景笔呀、商業(yè)模式

第一步看似沒有硬核知識,卻最不可小覷髓需。

需求 Requirements

選擇自己擅長或喜歡的方向许师,或有熱度的風(fēng)口方向。好的項目不會被埋沒僚匆,但流行與否取決于這個方向池子有多大微渠,大致決定了其star上限。

我選擇時序是因為18年學(xué)編程時做的第一個分析就是時序咧擂,之后又一直慣用TensorFlow逞盆。所以習(xí)慣性地,把二者摻在一起做成撒尿牛丸T(ensor)F(low) T(ime)S(eries)

image.png

不曾想松申,風(fēng)向很快轉(zhuǎn)了云芦,PyTorch突起俯逾,涌現(xiàn)了很多PyTorch時序庫,少有人愿意再做Tensorflow舅逸,但上限也低桌肴。tf2.0后,寫法完全變了琉历,不得不重構(gòu)一版坠七。起了個大早,趕了個晚集善已。

總之灼捂,針對需求,結(jié)合自身换团,參考熱點悉稠,量力而行,充分發(fā)揮先發(fā)優(yōu)勢艘包。

愿景 Vision

我最初的設(shè)想是功利的的猛,轉(zhuǎn)碼簡歷上留了github地址,好歹寫個像樣的項目想虎。后來參加比賽卦尊,我的愿景變成了全球最好的比賽時序預(yù)測工具。正是這個愿景激勵著我參加了幾場比賽舌厨,希望之后能抽出時間在那些“全球”岂却、“世界”開頭的比賽里勇奪Top。時間允許的話裙椭,更應(yīng)該像transformers那樣支持tf\torch\jax的全面工具躏哩。

商業(yè)模式 Business

image.png

開源的另一大問題是,如何可持續(xù)揉燃?一些面向KPI開源的大廠扫尺,幾個commit后已完成KPI就不再維護了。反觀一些個人大佬炊汤,可以借開源養(yǎng)活自己正驻,文檔收費、培訓(xùn)收費抢腐、咨詢收費等姑曙。市場經(jīng)濟里,一定要牢記:

image.png

我收到過一個外國小伙的咨詢迈倍,希望和我合作預(yù)測博彩渣磷。給勸退了,要真能預(yù)測授瘦,我早就不在工地起早貪黑了醋界。也曾試圖在項目里附上了微信打賞碼,但人微言輕提完,至今沒有一分錢贊助形纺。

image.png

后來不得不改變商業(yè)模式,打比賽徒欣。天池氣象比賽曾有機會收手逐样,但最后一刻被小號絕殺,獎金立減三萬打肝,摩托變單車脂新。只好繼續(xù)上路,“以賽養(yǎng)包”粗梭。

當然争便,明確開源許可證,避免潛在法律風(fēng)險断医。

二: 情報調(diào)研

根據(jù)需求進行情報調(diào)研滞乙。零基礎(chǔ),即使有了方向鉴嗤,往往不知從何入手斩启。最簡單的當然是臨摹別人,一是學(xué)習(xí)其寫法和規(guī)范醉锅,二是調(diào)研其優(yōu)勢和不足兔簇,三是確認這個方向未來是否值得繼續(xù),是否還有好果子摘硬耍。

調(diào)研中我找了另一個時序包pytorch-forecasting垄琐,學(xué)到了很多開源規(guī)范性的東西。還去領(lǐng)英加了作者默垄,商業(yè)吹噓一波此虑。時序預(yù)測豈止沒有免費午餐,付費都不一定能吃上口锭。我本意是多經(jīng)歷比賽的洗禮朦前,在支持模型方面更獨到。

明確了需求鹃操,收集了情報之后韭寸。完成設(shè)計文檔,設(shè)計時盡量保證可擴展荆隘、可維護恩伺。

三: 明確工程規(guī)范

經(jīng)歷所限,我既沒有科班經(jīng)歷椰拒,也沒有軟件開發(fā)的流程洗禮晶渠,很虛凰荚。起初,倉庫一兩百star的時候褒脯,根本不是一個包便瑟,而是一個demo集合。之后番川,發(fā)現(xiàn)一個完備的Python機器學(xué)習(xí)包到涂,應(yīng)該包括測試、文檔颁督、CI/CD践啄、示例、構(gòu)建打包等環(huán)節(jié)沉御,一點點加了上去屿讽。

之后補上的包括代碼規(guī)范,測試覆蓋率嚷节,安全掃描等聂儒。走了很多彎路之后,發(fā)現(xiàn)有一本書已經(jīng)介紹的很全面了硫痰,《publishing python packages》衩婚。

image.png

四: 細化需求

繼續(xù)完善設(shè)計文檔,細化需求效斑。比如最基礎(chǔ)的非春,支持哪個或哪些模型?

設(shè)計時缓屠,涉及到邊界問題奇昙,必須清晰。這是團隊合作的基礎(chǔ)敌完,即使是單人項目储耐,何嘗不是在和昨天的自己合作?

以我的為例滨溉,支持單變量什湘、多變量、單步晦攒、多步闽撤,后續(xù)是否支持分類、異常檢測等任務(wù)脯颜。

  • 實現(xiàn)不同任務(wù)的深度學(xué)習(xí)方法(單變量哟旗、多變量、單步、多步闸餐、預(yù)測饱亮、回歸、異常)

  • 實現(xiàn)不同模型(rnn\cnn\transformer, deepar, informer等后臺模型)

  • 方便的配置绎巨,具備較規(guī)范的文檔近尚、測試、使用樣例等

五:寫代碼

有了設(shè)計文檔场勤、工程規(guī)范、細化需求之后歼跟,就差一個寫代碼的了和媳。

短期milestone:一個完整的包,包括設(shè)計文檔哈街,注釋留瞳、可安裝包、colab實例等骚秦,復(fù)現(xiàn)幾個比賽的top solution她倘,爭取復(fù)現(xiàn)出相對不錯的成績。

文檔:我選擇的是Sphinx

測試:unittest或Pytest作箍,注重測試用例和測試覆蓋率

其實硬梁,很多開源項目的代碼質(zhì)量相對是好的,是值得學(xué)習(xí)的胞得。

六: 營銷推廣

好的質(zhì)量很重要荧止,但好的營銷更重要。推廣之前阶剑,需要項目已達到較高的完成度跃巡,否則又會走我的彎路。甚至制定開發(fā)計劃時牧愁,也配套一個推廣計劃素邪。

一個好的項目要有個logo吧,我花5分鐘設(shè)計的

image.png

一個方便民族主義營銷的項目猪半,得有個古風(fēng)名字吧兔朦,比如伏羲、八戒办龄、封神榜烘绽、山海經(jīng)之類。配上一句“不轉(zhuǎn)不是中國人”的宣傳俐填,想不火都難安接。我非常喜歡的辛棄疾的一句詞:“青山遮不住,畢竟東流去。江晚正愁余盏檐,山深聞鷓鴣”歇式。所以tfts的中文名為“東流”,寓意著時間序列問題猶如滔滔江水胡野,滾滾東流材失,多少離譜預(yù)測,都付笑談中硫豆;又猶如黃河泛濫龙巨,一發(fā)而不可收拾。

  • 被動推廣:項目初期熊响,有幸得到愛可可老師推廣旨别,一天漲了幾十star,首次過百汗茄,我仍記得那天的興奮秸弛,大佬青睞真是事半功倍。前面介紹的Pytorch-forecasting洪碳,接受過TheSequence專訪递览,之后沒幾天star遠遠超過我,一騎絕塵瞳腌,什么是國際巨星啊
image.png
  • 主動推廣:可以自己去社區(qū)多寫一些示例文章绞铃。某廠,star送開發(fā)者禮物的事還是要避免纯趋。由于機器學(xué)習(xí)的獨特憎兽,文章能推廣,比賽也能推廣吵冒。不過激烈賽事纯命,不是我們零基礎(chǔ)混的。還可以寫一些論文到opensource痹栖,arxiv等推廣亿汞。
  • 另外,建立微信揪阿、slack疗我、discord社群也是不錯的運營方式,可以更真實貼近用戶需求南捂。路子可以野一點吴裤,為了這碗醋,多包幾頓餃子溺健。我甚至想過錄一些時序視頻來宣傳麦牺,反過來我這篇文章何嘗不是tfts的另類推廣呢。

七: 維護更新

很慚愧,因為工作性質(zhì)剖膳,我經(jīng)常整年斷更魏颓。除了代碼更新,我覺得最起碼的要求吱晒,是認真回答issue里提的問題甸饱,之前很多同事經(jīng)常重復(fù)的一句話:沒有愚蠢的問題,只有愚蠢的答案仑濒。我一開始叹话,看到很基礎(chǔ)的問題不愿意花時間回應(yīng),這是不對的躏精;然后就是積極bugfix渣刷。可慮用github自帶的project功能進行項目規(guī)劃與管理矗烛,也就是認真用項目管理和產(chǎn)品的角度對待自己的開源。為開源世界做一點微小的工作箩溃,使得人人有丹煉瞭吃,人人有源開。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣旨,一起剝皮案震驚了整個濱河市歪架,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霹陡,老刑警劉巖和蚪,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烹棉,居然都是意外死亡攒霹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門浆洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催束,“玉大人,你說我怎么就攤上這事伏社】俅蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵摘昌,是天一觀的道長速妖。 經(jīng)常有香客問我,道長聪黎,這世上最難降的妖魔是什么罕容? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上杀赢,老公的妹妹穿的比我還像新娘烘跺。我一直安慰自己,他們只是感情好脂崔,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布滤淳。 她就那樣靜靜地躺著,像睡著了一般砌左。 火紅的嫁衣襯著肌膚如雪脖咐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天汇歹,我揣著相機與錄音屁擅,去河邊找鬼。 笑死产弹,一個胖子當著我的面吹牛派歌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痰哨,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼胶果,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斤斧?” 一聲冷哼從身側(cè)響起早抠,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撬讽,沒想到半個月后蕊连,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡游昼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年甘苍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱床。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡羊赵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扇谣,到底是詐尸還是另有隱情昧捷,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布罐寨,位于F島的核電站靡挥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸯绿。R本人自食惡果不足惜跋破,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一簸淀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毒返,春花似錦租幕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盆赤,卻和暖如春贾富,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牺六。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工颤枪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淑际。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓畏纲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親春缕。 傳聞我的和親對象是個殘疾皇子霍骄,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容