炼丹笔记二:数据清洗

炼丹笔记二:数据清洗

欢迎大家关注微信公众号:baihuaML白话机器学习

在这里,我们一起分享AI的故事。

您可以在后台留言,关于机器学习、深度学习的问题,我们会选择其中的优质问题进行回答!

本期的问题:

能不能谈一谈数据清洗问题?

既然要炼丹,就不能不关心下药材的质量。毕竟,药材的质量决定了丹药的最后的成色。大多炼丹师在实际炼丹之前,要做的事情就是处理药材——“数据清洗”。

什么是数据清洗?

数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。通俗点来讲,就是去掉或者修复掉影响后续模型训练的“脏样本”。
如何进行数据清洗?

关于数据挖掘时,如何清洗数据,请看《数据清洗的一些梳理》关于Excel大数据工程师,如何清洗数据,请看《清理数据的十大方法

我们重点谈一谈,深度学习中的图像+文本数据,如何清洗数据。

  • 图像数据应该如何清洗?

图像数据需要清洗的一个主要原因就是,数据标注存在问题(通常很大,已经影像到模型训练效果了)。我们同样可以从数据和模型设计的角度来考虑,如果解决在“脏数据”的情况下,正常炼丹。推荐一个图像数据爬虫的代码:github.com/kong36088/Ba

从数据的角度来看,常用的方法可以有以下几种:

  1. 随机抽样,查看标注样本质量。首先,我们需要观察样本的标注情况,如果样本标注情况,问题不大可以暂时不做处理。
  2. 去掉难的样本。以ADAS场景为例,实际上在视频图像中,存在非常多的小目标和遮挡目标,这个时候,我们需要明确定义,当前模型能够处理的边界在哪里,检出目标的尺寸多大?遮挡程度什么样子?
  3. 利用训练好的模型,做样本分析。利用训练好的模型,在测试集上进行测试,分析测试结果。在哪一类样本上存在明显问题。产生这个问题的原因是模型还是数据?如果是数据,需要重新明确标注规范。并采用适当的方法进行修正处理。

从模型的角度来看,主要的方法就是将其作为一个“弱标签”问题来进行处理。更大的方向,就是不确定问题。

  1. 弱标签:zhuanlan.zhihu.com/p/34
  2. 不确定性:wemedia.ifeng.com/72003

以上仅仅是一些概念的介绍。更多内容还是推荐Google学习去检索,关键词推荐“ uncertainty、weak supervision、weak label、 deep learning ”

  • 文本数据应该如何清洗?

文本数据相比于图像数据而言,数据类型更加复杂。对于一些偏统计和日志类数据,推荐参考上述的数据挖掘中数据清晰方法。这里我们主要以自然语言处理为主。对于NLP数据,首先需要的就是抓取海量的训练数据。对于如何进行数据抓取,推荐阅读《自然语言处理系列篇——海量数据抓取zhuanlan.zhihu.com/p/25,自然语言推荐数据集《资源 | 100+个自然语言处理数据集大放送,再不愁找不到数据!》:zhuanlan.zhihu.com/p/36

在抓取到海量数据以后,下一步就是数据清洗。

  1. 中文首先需要分词,可以采用结巴分词、HanNLP、刨丁解牛等分词工具;
  2. 数据规范化处理(Normalization):比如通常会把文本中的大写转成小写,清除文本中的句号、问号、感叹号等特殊字符,并且仅保留字母表中的字母和数字。小写转换和标点移除是两个最常见的文本 Normalization 步骤。是否需要以及在哪个阶段使用这两个步骤取决于你的最终目标。
  3. Tokenization,Token 是“符号”的高级表达。一般指具有某种意义,无法再分拆的符号。在英文自然语言处理中,Tokens 通常是单独的词。因此,Tokenization 就是将每个句子分拆成一系列词。可以使用NLTK工具箱来完成相关操作。
  4. Stop Word 是无含义的词,例如'is'/'our'/'the'/'in'/'at'等。它们不会给句子增加太多含义,单停止词是频率非常多的词。 为了减少我们要处理的词汇量,从而降低后续程序的复杂度,需要清除停止词。
  5. Part-of-Speech Tagging:还记得在学校学过的词性吗?名词、代词、动词、副词等等。识别词在句子中的用途有助于我们更好理解句子内容。并且,标注词性还可以明确词之间的关系,并识别出交叉引用。同样地,NLTK 给我们带来了很多便利。你可以将词传入 PoS tag 函数。然后对每个词返回一个标签,并注明不同的词性。
  6. Named Entity 一般是名词短语,又来指代某些特定对象、人、或地点 可以使用 ne_chunk()方法标注文本中的命名实体。在进行这一步前,必须先进行 Tokenization 并进行 PoS Tagging。
  7. Stemming and Lemmatization:为了进一步简化文本数据,我们可以将词的不同变化和变形标准化。Stemming 提取是将词还原成词干或词根的过程。
  8. 一些词在句首句尾句中出现的概率不一样,统计N-GRAM特征的时候要在句首加上BOS,句尾加上EOS作标记。
  9. 把长文本分成句子和单词这些fine granularity会比较有用。
  10. 一般会有一个dictionary,不在dictionary以内的单词就用UNK取代。
  11. 单词会被转成数字(它对应的index,从0开始,一般0就是UNK)。
  12. 做机器翻译的时候会把单词转成subword units。


最后,推荐阅读《自然语言处理时,通常的文本清理流程是什么?

欢迎加入深度学习、机器学习技术研讨群!

745224003

欢迎关注我们的微信公众号:baihuaML,白话机器学习

关注知乎“会写代码的好厨师”


参考文献


[1] https://www.zhihu.com/question/268849350
[2] zhuanlan.zhihu.com/p/36
[3] wemedia.ifeng.com/72003
[4] support.office.com/zh-c

编辑于 2019-02-01

文章被以下专栏收录

    主要介绍机器学习中涉及到各种疑惑问题,希望能够介绍更多的干货,一方面带大家入门,另一方面让大家少踩坑