(导语)
计算机行业发展至今,“开源”已逐渐成为技术茁壮成长最肥沃的土壤。而在中国,企业开源热闹非常,个人开源也方兴未艾。尽管个人开源困难重重,还是有一些开发者仍然在努力做着这样“吃力不讨好”的事情。
今天的“开发者说”文章,就来自这样一位个人开发者。他做的文本纠错开源工具pycorrector,当前在GitHub上star数2165,fork数565。pycorrector主要用于音似、形似错字纠正,可用于输入法、OCR、ASR的文本错误纠正,兼容Kenlm语言模型纠错,和深度模型纠错,包括:Seq2Seq,Bert,MacBert,Electra,Ernie。
欢迎大家Star支持:https://github.com/shibing624/pycorrector
下面就来看下这样的千星项目是怎样打造出来的吧!
做中文纠错项目之前,我做了做大量的背景调研,避免重复造轮子。
基于以上调研,我做了文本纠错pycorrector项目。
我们选择做一个面向开源,解耦业务数据,对新老模型兼容并包,将学术界SOTA模型应用于工业应用。
由此,新项目需要满足以下四点:
文本纠错的两种解决方案,规则方法和深度方法。
既然已经决定开源,项目的质量要求即是以开源的标准来要求。
每个开发者都或多或少的使用过开源产品,在使用开源的同时尽量的反馈社区,让开源成为良性循环。
使用的人越多,看代码的人越多,项目的bug和风险就会越小。社区开发人员的贡献促进pycorrector项目成长。比如:
发现问题的途径越多就越有利于项目的健康发展。而且社区人员确实反馈了一些关键问题,贡献了关键代码,这些代码也为项目的最终效果做出了贡献。
开源之后收到越来越多的人询问组里是否还招人,也更多收到了讨论技术问题的邮件和微信消息。这些影响都是潜移默化的,会渐渐的让公司和个人的技术影响力提升。对于不发出技术声音的互联网公司,可能会越来越难招募到优秀的开发者。
文档是项目的“门面”,优秀的文档更吸引开发者。 文档要有,代码不能代替文档。文档要清晰,使用者是通过文档来了解并使用项目的。通读代码的使用者毕竟是少数,我们无法要求使用者通读代码。但文档绝不是越多越好,一定要适中,信息量爆炸不利于信息的吸收消化和检索。如果你的项目不限于国内使用,那最好提供两个版本,或者起码提供英文版本的文档。
文档的要求:
详细的文档结构:
对齐学术界SOTA模型,产出最佳应用效果。
过去一年,百度提出的ERNIE通过持续学习海量数据中的知识在中英文十六个自然语言理解任务上取得领先效果,并在去年12月登顶权威评测榜单GLUE榜首。
我们的项目使用ERNIE预训练语言模型,分别调研基于Fill-Mask和Bi-LSTM模型的文本纠错效果,结果是Fill-Mask模型效果更优,项目文档如下图所示。
开源项目一般难度会大于业务项目。
这里以transformers和 detectron2(https://github.com/facebookresearch/detectron2)举例。两个项目的难度展现在不同的地方,transformers属于为NLP领域提供最先进模型的应用框架,该项目汇聚100+人类语言,超过32+类NLP任务的预训练模型,可以高效让研究人员快速呈现最先进模型的应用效果。detectron2属于CV领域目标检测方向的识别工具,着力于在目标检测及图像分割上深耕模型创新,融合不同基模型达到目标检测的最优效果。以上两个项目都有较高借鉴意义。
举个例子,pycorrector核心代码开发只花了两周左右,而花了两个月打磨。主要包括整体流程梳理、模块拆分规划、代码可读性重塑、封装粒度缩小、深度模型调研等。开源项目是否可持续发展的关键点即在于此,这是对一个项目负责的态度。
GitHub的repo版本管理具有先天优势,基于GIT,可以灵活运用branchs,tags管理源码。我建议在代码版本管理之外,对于工具类项目上传到pip或者conda中,方便release版本管理。
版本:
针对于这样的问题,为了可以让更多的人参与项目贡献,我们考虑把任务分级,分为简单型、长期型、讨论型、缺陷型和技术难点型。
很多开发者想要参与开源,但不知道如何开始,这里我建议大家从小做起。从小做起指的是从“小贡献”和“小项目”开始做。
完成一些bug修复,实现一些小的功能可以让你收获成就感和圈子中小有名气,更重要的是了解项目的底层代码实现逻辑,这能使你提交的补丁更容易获得批准。
总的来看,本片文章结合pycorrector的项目经历介绍了开源项目从0到1的过程,希望通过以上的分享,吸引更多感兴趣的同行一起加入到开源的大家庭,共同推进技术的进步。