携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
说明
本系列博客将记录自己学习的课程:NLP实战高手课,链接为:time.geekbang.org/course/intr… 本篇为04节的课程笔记,主要介绍了AI项目开发的流程及其中的经验教训。
如何判断是否要做一个AI项目
项目立项是最重要的环节之一,那么我们该从哪些方面判断是否要做一个AI项目呢?这里导师给出了以下几点注意事项:
- 技术的成熟度
- 需求的可控程度
- 项目投入的周期和成本
- 项目最终的交付流程
技术的成熟度
技术成熟度是首先要考虑的问题,即业界或者学术界是否存在该问题的解决方案。一个底线就是“人工是否可以解决这个问题?”。同时,在对接时,必须要将问题定义清晰,比如“智能对话机器人”中的“智能”到底是需求哪些方面?
项目初期可以使用一个小的Demo进行测试,并且需要注意的是测试数据要和开发训练时的数据来自同样的数据来源,不能用微博的数据开发,新闻的数据测试。
同时,项目的部署在实际应用时也是需要考虑的问题。以及不要对项目的难度进行低估,过于乐观。
需求的可控程度
第二个需要注意的问题是需求的可控程度。作为一个算法工程师,你需要明确客户的需求,同时能够有效应对客户提出的不合理的,频繁变更的无理要求。
项目投入的周期和成本
大多数时候,人们会低估项目投入的周期和成本。而导致项目周期和成本不可控主要是需求的频繁变更(客户往往不知道他要的是什么:比如智能对话机器人,客户可能希望它可以猜出我心中所想,这是完全不可能实现的)。
同时在开发时,要注意可能出现的其他问题,如下图所示:
项目最终的交付流程
交付是最后的一步,但也十分关键。比如部署开发可能会消耗很多的时间。
项目的一般流程
AI项目的一般流程如下:
- 前期调研和方案确定
- 数据标注和开发
- 效果调优(包括准确性和速度)
- 代码部署
前期调研和方案确定
有很多容易被忽略的问题,比如学术结果的可复现性差、数据集分布带来的影响等等。
数据标注和开发
数据标注
在进行数据标注时,非常不建议使用自动标注的方式,例如使用关键词匹配,倘若采用这些技术,将会受到数据集分布漂移的影响。
算法开发
算法开发部分的一个最重要的教训是千万不要采用规则的方式进行开发。这里的规则在使用初期看似简单,但开发到后期后就会失控。导师建议使用XGBoost代替规则,如果非要使用规则,也要把它们设置为可以配置的形式。
同时,算法开发的一个重点是一个要有一个最客观唯一的评估指标,不能总是主观的判别,同时测试集一旦确定就不要频繁的变更。
开发时,可以不追求一个大一统的模型将所有问题全部解决,而是可以将任务进行分解,比如问答中按照问题类型进行分解。
效果优化
在进行优化时,一定多从数据角度出发分析问题。
算法部署
完成开发进行部署时,一定要非常慎重。比如安装cuda时会重新编译Linux系统,有可能对客户机器上已经运行的其他服务产生影响。
同时,建议使用docker进行部署,但是docker容易挂掉,可以部署一个Kubernetes自动拉取镜像。
最后,能部署到云端就尽量部署到云端,而不要在本地折腾环境。