背景
GitHub沟突,國際知名社交網(wǎng)站醋拧,匯集了全球眾多開源項目大刊,卡脖子留下的一口新鮮空氣。細心的人可能注意到敌蜂,我公眾號logo就借鑒了github經(jīng)典配色
如何談笑風(fēng)生地做一個開源項目呢箩兽?可以做做資料的收集,也就是github慣用的awesome系列章喉。awesome一個研究方向汗贫,awesome面試經(jīng)驗,甚至還可以awesome的awesome秸脱。
曾做過一個深度學(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)
不曾想松申,風(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
開源的另一大問題是,如何可持續(xù)揉燃?一些面向KPI開源的大廠扫尺,幾個commit后已完成KPI就不再維護了。反觀一些個人大佬炊汤,可以借開源養(yǎng)活自己正驻,文檔收費、培訓(xùn)收費抢腐、咨詢收費等姑曙。市場經(jīng)濟里,一定要牢記:
我收到過一個外國小伙的咨詢迈倍,希望和我合作預(yù)測博彩渣磷。給勸退了,要真能預(yù)測授瘦,我早就不在工地起早貪黑了醋界。也曾試圖在項目里附上了微信打賞碼,但人微言輕提完,至今沒有一分錢贊助形纺。
后來不得不改變商業(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》衩婚。
四: 細化需求
繼續(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è)計的
一個方便民族主義營銷的項目猪半,得有個古風(fēng)名字吧兔朦,比如伏羲、八戒办龄、封神榜烘绽、山海經(jīng)之類。配上一句“不轉(zhuǎn)不是中國人”的宣傳俐填,想不火都難安接。我非常喜歡的辛棄疾的一句詞:“青山遮不住,畢竟東流去。江晚正愁余盏檐,山深聞鷓鴣”歇式。所以tfts的中文名為“東流”,寓意著時間序列問題猶如滔滔江水胡野,滾滾東流材失,多少離譜預(yù)測,都付笑談中硫豆;又猶如黃河泛濫龙巨,一發(fā)而不可收拾。
- 被動推廣:項目初期熊响,有幸得到愛可可老師推廣旨别,一天漲了幾十star,首次過百汗茄,我仍記得那天的興奮秸弛,大佬青睞真是事半功倍。前面介紹的Pytorch-forecasting洪碳,接受過TheSequence專訪递览,之后沒幾天star遠遠超過我,一騎絕塵瞳腌,什么是國際巨星啊
- 主動推廣:可以自己去社區(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)品的角度對待自己的開源。為開源世界做一點微小的工作箩溃,使得人人有丹煉瞭吃,人人有源開。