选择任务
1. 技术的成熟度
1.1 底线:人工能否解决问题
如果人工都不能解决,直接放弃。
1.2. 大厂当前的水平
不能以paper中的结论作为目标。
1.3 初期通过小demo测试准确率
准确率受数据影响很大。
1.4 团队的时间和能力
项目进度受团队的能力影响很大。
1.5 项目部署
例如:没有GPU;AMD没法布置TensorFlow或pytorch。
1.6 保守估计的交付时间
交付时间总是过于乐观
2. 需求的可控程度
客户的可变性
2.1 销售导向 OR 技术导向
销售导向的劣势:消耗技术成本,影响公司运营;技术人员无法提升(耗在扯皮上)。
2.2 客户管理能力
项目经理是否有意愿、能力控制客户的需求。
2.3 团队整体的需求控制能力
技术leader是否有担当。
3. 投入周期和成本
3.1 容易被低估
3.2 主要来自于需求的变更
3.3 其他问题
- 标注的不可控
- 模型调优的时间
- 推断速度提升所需的时间
- 环境部署所需要的时间
- 算力成本
4. 最终交付流程
4.1明确项目目标
4.2 交付过程中的额外投入
4.3 交付的流水化能力
- 明确的流程
- 职责安排清晰
- 时间规范严格遵循
- 是否有烂尾风险
前期调研
容易被忽略的问题:
- 学术结果常常难以复现
- 数据的质量决定了模型的质量(需要有数据研发的能力)
- 方法的成功取决于细节(细节只有做过的人才知道)
- 模型的运行实效比方法的效果更重要(实际在客户部署后的效果)
- 项目整体难度往往被低估
开发计划
数据标注
- 前期要制定充分的标注规则(傻子也能看懂的文档)
- 数据采集要有代表性(针对应用场景)
- 非常不建议自动标注(通过关键词自动标注,数据分布会漂移)
- 训练一个初步模型,只让相关人员校对,可以保证标注效率并减少成本。
算法开发
- 千万不要采用规则的方式开发(规则会越来越多越混乱,尽量放到最后)(尽量规则写成配置的形式;可以用XGBOOST)
- 初期就要引导客户使用和购买能够支持DL框架的硬件(涉及预算申请)
- 算法开发的过程中,需要有量化指标并记录。(记录方案、使用什么数据测试,不然永远无法优化)
- 开发过程中,多分解问题(遇到问题时,引导去关注整体而非局部的问题)(做的不好的地方要扩充。关注简单的问题的准确率,难的问题业界领先也做不了。)
- 前端对接中,一定要引导何为“智能”
结果验证
效果优化
- 时间和成本
- 可以引导客户的评估标准
- 一定要从数据角度出发进行优化(而不是算法)
- 学会止损(提早和前端说)
- 除了准确性的优化,还有代码运行效率的优化
- 算法开发和效果优化是需要反复进行的工作(做持久战的准备)
部署
- 提前了解客户系统,告知风险
- 再小的项目也建议使用微服务架构(Docker不稳定,需要kubernetes)
- 算法部署在云端(环境控制、投入都更好。先在云端做demo,测试)