如何做AI开源项目?零基础到100star

欢迎关注我的公众号:YueTan

请添加图片描述

​背景

GitHub,知名社交网站,汇集了全球众多开源项目。细心的人早已注意到,我公众号的logo就借鉴了github经典配色

如何谈笑风生地做一个开源项目呢?可以做收集资料的仓库,也就是github中的awesome系列。awesome一个研究方向,awesome面试经验,甚至还可以awesome的awesome。

曾做过一个深度学习时序预测工具tfts,有100+star。据我微薄的经验,分享一点开源机器学习的经验。这篇简单的文章,却也是多年总结。对时序有兴趣的家人们,也欢迎尝试和参与tfts项目。

github.com/LongxingTan/Time-series-prediction

一: 明确需求、愿景、商业模式

第一步看似没有硬核知识,却不可小觑。
需求 Requirements
选择自己擅长或喜欢的方向。虽说好的项目不会被埋没,但流行与否取决于这个方向池子有多大,大致决定了其star上限。
我选择时序是因为学编程时做的第一个分析就是时序,我又一直惯用TensorFlow。所以习惯性地,把二者掺在一起做成撒尿牛丸T(ensor)F(low) T(ime)S(eries)

不曾想,风向很快转了,PyTorch异军突起,涌现了很多PyTorch时序库,竞争激烈。打了个时间差,少有人愿意再做Tensorflow,但上限也低。tf更新2.0后,写法完全变了,又不得不重构一版。起了个大早,赶了个晚集。
总之,针对需求,结合自身,量力而行,不重复造轮子,充分利用先发优势。

愿景 Vision
我最初的设想是功利的,简历上留了github地址,好歹有个像样的经项目。后来参加比赛,我的愿景变成了做全球最好的比赛时序预测工具。正是这个愿景一直激励着我参加比赛,希望之后能在那些“全球”、“世界”冠名的比赛里勇夺Top。但时间允许的话,更应该做成transformers那样支持tf\torch\jax的全面时序工具。
商业模式 Business

开源的一大问题是,如何保证可持续?一些面向KPI开源的大厂,开源前几个commit已完成KPI就不再维护了。反观一些个人大佬,可以借开源养活自己,例如文档收费、培训收费、咨询收费等。市场经济里,一定要牢记:

我曾收到一个外国小伙的咨询,希望和我合作预测博彩,我给劝退了。要真能预测,早就不在工地起早贪黑了。我在项目里附上了微信打赏码,但人言微轻,至今没有一分钱赞助。

后来不得不改变商业模式,打比赛。天池气象比赛曾有机会收手,但最后一刻被元宇宙大学小号绝杀,4万变1万,摩托变单车。只好继续上路,持续优化,希望“以赛养包”。
最后,明确开源许可证,避免潜在法律风险。

二: 情报调研

根据需求进行情报调研。零基础,即使有了方向,往往不知从何入手。最简单的当然是临摹别人,一是学习其写法和规范,二是调研其优势和不足,三是确认这个方向未来是否值得继续,是否还有好果子摘。
调研中我找了另一个时序包pytorch-forecasting,就去领英加了作者,商业吹嘘一波,学到了很多开源规范性的东西。而时序预测是没有免费午餐的,我的本意是让tfts多经历几个比赛的洗礼,在支持模型方面更独到。

明确了需求,收集了情报之后。完成设计文档,设计时尽量保证可扩展、可维护。

三: 明确工程规范

经历所限,我既没有科班经历,也没有软件大厂的流程洗礼,工程和流程都很虚。起初,仓库一两百star的时候,根本不是一个包,而是一个demo集合。之后,发现一个完备的Python机器学习包,应该包括测试、文档、CI/CD、示例、构建打包等环节,一点点加了上去。
之后补上的包括代码规范,测试覆盖率,安全扫描等。走了很多弯路之后,发现一本书已经介绍的很全面了,《publishing python packages》。

四: 细化需求

继续完善设计文档,细化需求。比如最基础的,支持哪个或哪些模型?
设计时,涉及到边界问题,必须清晰。这是团队合作的基础,即使是单人项目,何尝不是在和昨天的自己合作?支持单变量、多变量、单步、多步,后续也可以比较简单的支持分类、异常检测等任务。
实现不同任务的深度学习方法(单变量、多变量、单步、多步、预测、回归、异常)
实现不同模型(rnn\cnn\transformer, deepar, informer等后台模型)
方便的配置,具备较规范的文档、测试、使用样例等

五:写代码

有了设计文档、工程规范、细化需求之后,就差一个写代码的了。
短期计划:一个完整的包,包括设计文档,注释、可安装包、colab实例等 ,复现几个比赛的top solution,争取复现出相对不错的成绩。
文档:我选择的是Sphinx
测试:可以unittest或Pytest,注重测试用例和测试覆盖率
其实,很多开源项目的代码质量相对是好的,是值得学习的。有图为证

六: 营销推广

好的质量很重要,但好的营销更重要,事半功倍。当然推广之前,需要项目已达到较高的完成度,否则就会走我的弯路。甚至制定开发计划时,也配套一个推广计划。
一个好的项目要有个logo吧,我花5分钟设计的

一个方便民族主义营销的项目,得有个古风名字吧,比如伏羲、八戒、封神榜、山海经一类。配上一句“不转不是中国人”的宣传,想不火都难。我非常喜欢的辛弃疾的一句词:“青山遮不住,毕竟东流去。江晚正愁余,山深闻鹧鸪”。所以tfts的中文名为“东流”,寓意着时间序列问题犹如滔滔江水,滚滚东流,多少离谱预测,都付笑谈中;又犹如黄河泛滥,一发而不可收拾。

被动推广:项目初期,有幸得到爱可可老师推广,一天涨了几十star,首次过百,我仍记得那天刷新时的兴奋,大佬青睐真是事半功倍。前面介绍的Pytorch-forecasting,接受过TheSequence专访,之后没几天star远远超过我,一骑绝尘,什么是国际巨星啊

主动推广:可以自己去社区多写一些示例文章。某大厂,star送开发者礼物的事还是别做了。由于机器学习的独特,文章能推广,比赛也能推广。不过激烈赛事,不是我们零基础混的我还没有经验。还可以写一些论文到opensource、arxiv等推广。
另外,建立微信、slack社群也是不错的运营方式,可以更真实贴近用户需求。路子可以野一点,为了这碗醋,多包几顿饺子。我甚至想过录一些时序视频来宣传,反过来我这篇文章何尝不是tfts的另类推广呢。

七: 维护更新

很惭愧,我做得也不好,经常整年断更。除了代码更新,我觉得最起码的要求,是认真回答issue里提的问题,德国同事经常重复的一句话:没有愚蠢的问题,只有愚蠢的答案。我一开始由于是个人项目,看到很基础的问题就不愿意花时间理,这都是不对的;然后就是积极bugfix。可虑用github自带的project功能进行项目规划与管理,也就是认真用项目管理和产品的角度对待自己的开源。为世界贡献一份力量,使得人人有丹炼,人人有源开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YueTann

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值