如何识别、抓取和构建高质量机器学习数据集(下)
2019年05月02日 由 sunlei 发表
869547
0
昨天我们学习了“搜索数据”和“提取数据”,今天我们继续来学习最后一部分“构建数据集”。
传送门:如何识别、抓取和构建高质量机器学习数据集(上)
第3阶段 -构建数据集
到目前为止,我们的数据质量可能在以下方面有一些改进:
清理数据
目前提取的数据可能有一些记录丢失了基本的数据信号。它们可以被安全地丢弃。例如:
- 有很多关于ModCloth的评论没有包含fit反馈或者购买的产品尺寸信息。尽管在第64-66行中我们丢弃了不包含任何侧信息的评论,但是仍然有一些评论包含一些侧信息,但是不包含一些基本数据信号。
- 如果你注意到,与项目不同,审核人关于ModCloth的信息与任何惟一id都没有关联。这对我们来说是另一个挑战,因为用户id对我们来说是一个重要的数据信号。为了解决这个问题,我们可以将审阅者的名称与其度量值连接起来,形成一个惟一的字符串。我们可以强制要求至少存在3个测量字段,以减少数据集中的噪音,因为不同的审阅者获得了相同的id。然后可以安全地删除所有不存在此类信息的记录。
- 此外,很少有记录显示产品目录尺寸中没有报告的采购尺寸(可能是报告错误)。我们也抛弃了这些记录。
匿名化
为了保护隐私,匿名用户和项目细节总是一个好主意。因为我们在ModCloth数据集中有像身体尺寸这样的敏感属性,所以我们可以随机生成用户id和项目id。如果我们搜取非公开的信息,这就变得更加重要了。
标准化
数据中可能存在一些属性,它们在所有记录中可能没有相同的含义。在这种情况下,我们需要使用我们的直觉(或一些基线)来标准化跨数据集的属性。例如,ModCloth上不同的产品可能会有不同的尺码习惯(美国有一些,英国有一些,牛仔裤有完全不同的尺码习惯,等等)。因此,在我们标准化所有记录的大小之前,数据集基本上是不可用的。
解决这一问题的一种方法是利用ModCloth上提供的尺寸图表,它将不同约定的尺寸映射到可以用来创建保存顺序的标准比例。然而,在一些产品中仍然存在一些未知的尺寸。我们可以使用我们的直觉将它们转换成一个标准尺度(例如xxxs可能不在尺寸表中,但是我们可以确定它肯定会比xs小),或者放弃所有对有争议产品的评论。
结构化
一旦我们确信我们所做的所有的预处理数据良好,剩下要做的最后一件事是将数据以一个共同的格式如CSV, JSON等新型结构化, 以便有兴趣使用数据集的人能够轻松地读取和导入数据。
结论
完成上述所有步骤后,数据中的记录可能如下:
{
"item_id": "507565",
"size": 12,
"quality": 5,
"cup size": "c",
"hips": "44.0",
"bra size": "42",
"category": "tops",
"length": "slightly long",
"height": "5ft 6in",
"review_summary": "I love this shirt so much",
"review_text": "I love this shirt so much I bought 2. It is quite long in the back but it goes with everything and can easily be dressed up or dressed down.",
"fit": "fit",
"user_id": "56291"
}
这看起来更干净、更有条理。我们做到了!
这可能需要消化很多内容,但是吸收内容的最佳方法是在下一个dataset任务中应用这些步骤。在此过程中,请记住本文的以下主要观点:
- 无论您是否考虑到特定的问题,请尝试识别数据集的EssentialData信号。这将指导数据集搜索过程。
- 结合来自多个数据源的数据,以提高数据集的有用性和质量。
- 一旦确定了数据提取源,就可以了解站点的结构并计划如何系统地提取数据。
- 根据提取过程中遇到的意外情况即兴编写脚本的过程。首先,在站点的有限部分试用您的脚本,如果您没有足够的本地存储空间,则通过在适当位置进行错误处理来避免失败。
- 如果您没有足够的本地存储空间,则首选动态分析数据。此外,请注意您发送到源站点的请求频率。
- 一旦您拥有了所有数据,请考虑是否可以进一步清理、匿名、标准化和结构化数据,以提高数据质量。
当我收集更多的数据集并遇到不同的场景时,我将继续改进本文。与此同时,如果你自己想出(或已经有了)一些技巧和技巧,请在评论中告诉我,我将尝试在本文中结合它们。