系统:Windows 10
软件版本:
机器学习的常见流程有数据采集、特征提取、模型训练和验证、离线测试和在线测试。
1.数据获取:首先从线上拉取用户的真实数据,用已有的模型去遍历这些数据,得到一些有用的信息,作为标注人员的参考,从而加快标注速度;标记后,数据被放入存储,冲突得到解决。冲突的是同一个查询,两个标注的结果不一致。解决冲突的方法通常是手动检查,以获得更准确的标签。
2.特征提取:NLP任务一般需要提取数据特征,如ngram、词典特征、词向量特征、上游模块输出等。一般需要离线和在线进行特征提取,所以这部分离线代码是共享的,避免了在线特征提取和离线的不一致。特征提取的一个窍门就是把你能想到的特征都提取出来,保存为文本文件,避免重复特征提取的步骤。实验中使用mask来屏蔽掉那些对模型没用的特征,因为对于神经网络这样的模型,值为0的特征一般不会影响最终的结果(比如tanh/ReLU,但是sigmoid激活层可能会)。一般提取的特征格式不能满足机器学习框架的要求,可以通过脚本转换成机器学习框架要求的格式。
3.模型训练和验证:模型训练和验证的常见步骤是:首先从一个简单的算法入手,快速实现,在交叉验证集上验证;然后画出它的学习曲线,通过学习曲线确定更多的数据或特征是否会对模型的优化有帮助。然后人工检测交叉验证集中被错误分类或预测的样本的共同特征,从实际出发调整模型,不断调整和验证交叉验证集中的误差,寻找最佳结果,优化模型。
4.离线测试:指模型验证完善后,在测试集上测试模型的性能指标。离线测试可以将模型集成到应用程序中,也可以单独测试模型。离线测试的指标一般与具体的业务需求相关,包括:准确度、精密度、召回率、F1值等。
5.在线测试:是模型上线后的测试,是与业务密切相关的指标。在实际工作中,一般会把版本上线到一个小流量环境的副本,打到这个环境的流量也会打到上线环境。然后将线上环境的结果和小流量环境的副本同时取出,提取两者的差异,手动制作gsb(好坏相同),即对于有diff的情况,手动标注小流量是好,还是线上好,甚至(相同)。这种方法类似于A/B测试。模型上线后,你可以通过用户行为反馈模型的质量,比如用户点击、pv等。