我们在做AI产品,尤其是有监督学习时,最重要的事情是训练数据从哪里来,数据又要怎么用,才能提升产出效率。今天我们来讲下有关数据集的那些事。
1、获取数据
- **内部数据: **通过整合系统内部的数据来获取AI训练/验证数据,通常可以考虑系统里的历史记录,用户的行为,属性,交易等数据。这些内部数据可能在系统的不同模块中,包含了结构化数据、半结构化数据(日志等)、非结构化数据(文本类的数据)需要进行整合、映射、清洗。
- 外部数据:公开类的或第三方合作伙伴的数据,根据具体业务,可从外部的公开资源或伙伴资源中,找到跟AI训练相关的数据,如第三方的数据平台、公开的已被标注好的训练集等(AI数据集类的网站会有公开的标注好的数据,但是否适用,要看具体的业务情况)。此外,还可以发布数据标注的众包任务,通过人工标注的形式收集标注好的训练数据。
2、数据清洗
数据收集好后,不能直接使用,需要进行清洗,否则会影响模型训练的结果。通常需要关注以下几种场景:
- 缺失数据:收集后的数据,因为来源不同或数据本身的问题,会有数据缺失的情况。对于缺失的数据,一般根据数据量的情况,采用“直接删除”或“想办法填补”的方法,填补数据可采用人工填补、临近值填补、平均值/众数填补、热卡填补(最相似的填补)等方法来填充。
- 重复数据:数据本身可能因为各种原因有重复的情况或相似重复的情况(因为格式等差异导致系统不能正确识别),对于重复数据,多采用直接删除的方式。
- 不均衡数据:****部分维度的数据较多或太少,要根据数据的体量来选择“丢弃”或“补充”,以达到数据集的平衡。
- 错误数据:包含数****据本身是错误值和异常极端的情况(超出范围的极大、不可能的负数等),此类数据要看数据量的情况,选择修正或舍弃。这部分的处理主要还是看各个方案的性价比,如果修正的时间太长,而数据量又足够的情况,舍弃这部分训练数据是最省力的做法。当然,如果这些数据隐含着系统中的bug,那还是最好要查清楚,至少要知道影响的范围以及处理方案。
- 量纲不一致:这指的是在同一组数据中,不同特征或变量的单位或量纲不相同。例如某一特征的取值范围是1到1000,而另一特征的取值范围是0.01到10。这种情况下,两个特征的量纲就不一致。在处理数据量纲不一致时,可采用以下方法:归一化(将数据缩放到特定的范围内,如将数据缩放到[0, 1]范围内),标准化(通过线性变换将数据缩放到相似的范围,使其均值为0,标准差为1)等方法来使量纲达到一一致。除了以上的处理,还需要根据业务场景进行其他处理,比如大小写转换、显示格式的转换,去除噪声(部分数据的存在不重要或会影响模型的结果,如某些单词,符号,停用词等),需要根据具体的业务场景来进行相应的处理。
3、数据考量
在考量AI训练的数据集时,除了要根据情况对数据进行处理之外,还要考虑训练数据是否满足以下条件。
- 可维护性:对于需要连续关注“数据”进展,不断优化模型的场景,数据后续的可维护性决定了是否能够持续得到“训练数据”;
- 覆盖面:选取的数据集是否能够覆盖当前业务的主要场景及特征,会影响模型的实际表现;
- 时效性:数据更新的频率如果太慢,比如一个月更新一次,那这一个月中间数据的变化情况,模型就没有了训练基础,当然,数据更新太快,牵涉到的成本也更多,需要根据业务情况来权衡;
- 相关性:训练数据需要尽可能的相关,比如你想分析某个话题下评论的情感分析,但是你给的训练集是电商领域的商品评论,虽然都是评论,但是因为业务领域不同,也会极大影响训练的结果。
AI模型需要大量的数据集(尤其是有监督学习),而真正符合业务场景的数据,往往都要花大量的时间收集,处理,标注,所以尽****可能地开拓思路,用最快、简便的方式找到符合业务场景的高质量数据来源,才能更好的让模型训练起来,多研究下行业内外的其他产品是如何获取训练数据的,多看些公开的数据集网站,是否有符合自己业务的已经标注好的数据,多找找是否有第三方公司是否可以帮助你,尽可能“借力”简化训练数据的获取、处理过程,才能让你有更多的精力放在AI模型后续的工作上。
版权归原作者 养心进行时 所有, 如有侵权,请联系我们删除。