切入点
目前的AI其实更多就是仅仅用来从历史数据中学习到一些规律而已,在业务上,更多的只是减少人为介入工作,所以要在业务系统中引入神经网络,其实主要就是在要找到切入点。
简单来说,可以走访一线用户看他们花最多的时间在系统哪些地方,经常重复了哪些工作,也可以通过统计日志找到合适的切入点。
理解问题
- 业务上要解决的问题:预测某个分类。
- 问题涉及到的信息管道:xx。
- 数据源及采集方式:数据源在xx业务系统上,可由相关api获取。
- 数据属于定期发布还是实时:定期&实时发布。
- 影响模型的有价值因素:咨询业务专家提供初步模型特征。
- 工作量:制定项目计划。
数据预处理
- 过滤操作,将不符合条件的数据记录去掉。
- 空值填充,补0或其他填充措施。
- 对数据进行标准化处理。
- 字符串集标签化。
样本统计
对样本进行统计分析,看看可用样本数量为多少,对于一般的分类任务,每个分类的样本数一般可以从几千到上万个。另外也要检查是否存在样本不平衡问题,如果存在的话要对其进行平衡处理,比如上采样操作。
模型定义
定义模型,比如定义传统的多层神经网络,两个隐含层,每个层100个神经元。
确定输入为attribute1、attribute2、...,输出为分类编号。
损失函数可选:tanh、logistic或relu。
优化方法可选:梯度下降法或adam。
模型训练
- 将整个数据集分成两组,比例是8:2,第一组为训练集,用于调整模型参数;第二组为测试集,用于测试训练得到的模型准确性。
- 最大迭代数为10000。
- 批大小为200。
- 优化提升容忍程度为1e-8。
- 标准化初始权重。
模型迭代
模型的效果需要不断分析特征,选择或生成更有价值的特征,不断优化模型效果。比如
- v0.1 凭感觉选择若干数据特征作为输入,效果可能比较差。
- v0.2 咨询业务专家,结合他们的意见使用或者生成更有价值的特征,precision、recall、f1-score都提升了,因为增加了某些属性,而且还从额外的系统提取了有用的特征。
- v0.3 已经无法直接找到有价值的特征,可以考虑引入自然语言处理对一些文本进行分析,使用词向量、tfidf之类的特征,precision、recall、f1-score都达到90%以上。
版本 | precision | recall | f1-score |
---|---|---|---|
v0.1 | 0.52 | 0.59 | 0.54 |
v0.2 | 0.83 | 0.82 | 0.81 |
v0.3 | 0.91 | 0.90 | 0.90 |
线上部署
有以下几种方式部署模型,需要综合考虑。
- 嵌入到业务系统中,将模型与业务系统耦合,需要考虑业务系统和模型开发使用的统一语言,比如业务系统一般用java开发,模型较多使用python,而java调python并发起来后性能有问题,不然就用java做模型并提供jar。
- 单独模型部署,将模型系统通过服务形式对外开放,由业务系统访问,达到解耦效果,但对于一些情况下会导致整个系统架构比较重。
- 后台部署,直接由模型系统访问业务数据层,将预测的结果回写到业务数据持久化中。
-------------推荐阅读------------
我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)
跟我交流,向我提问:
欢迎关注: