如何创建高质量的机器学习数据集?
优采云 发布时间: 2020-08-08 06:10这是一个很好的问题,为什么没有多少人回答. . . 无论是进行研究还是解决业务问题,数据集都是不可避免的问题. 但是这个问题有点大,在NLP字段T ^ T
中的数据集构建中也有一点点鲜血与泪水
许多刚进入该行业的学生都认为发布数据集是最简单的方法. 如果这样做了,您会发现很容易随意生成一个数据集,但是如果您可以解决实际问题或让每个人都为它生成一个可用的,高质量的,中等难度的数据集并不容易. 在上面玩盐的目的. 这是超级耗时,费力的脑力劳动,甚至是昂贵的,好吗?
(╯°□°)╯︵┻━┻
尽管没有刻意研究如何处理数据集,但是由于项目或研究的需要,鸭子们已经将近10个数据集放在架子上,但是它们只是在问答环节上完成,对话和一些分类问题. ,所以请让小夕去问私人邮箱中的“如何建立知识图谱”╮( ̄▽ ̄“”)╭
由于我没有刻意研究此问题,因此我将分别分享一些我认为更重要的观点.
什么是高质量的基本工具数据和标签来源?进行预处理以验证可用性,尽早构造数据集,迭代闭环?复杂的NLP任务有什么高品质?
一些刚进入维修站的朋友可能会认为“高品质” =“超级干净”,因此他们疯狂地进行了预处理以追求“高品质”,最后哭了╮(╯▽╰)╭.
创建数据集通常有两种动机. 一是研究,这是使广大研究人员受益,并促进该领域的进步;
必须说SQuAD的发布极大地推动了NLP的这一研究浪潮.
另一种方法是使用数据驱动的方法来优化业务指标或解决项目中的实际问题.
这两个看似无关的目的背后的“高质量”的定义确实非常相似,即: 解决问题!
但是,出于后一个目的,问题通常来自在线系统
通常来说,在创建数据集之前通常已经存在一个系统(为了冷启动该系统,通常首先开发一个规则驱动的系统). 系统上线后,自然会生成日志. 不良情况分析可以知道现有系统无法解决哪些问题,并且可以使用数据驱动的方法解决这些问题,因此需要一个数据集. 解决这些问题是您数据集的首要目标.
出于前一个目的,问题通常来自学术研究的现状
当前的NLP研究主要由数据驱动,甚至由数据集驱动. 尽管这不是一个好现象,但必须承认,它极大地促进了NLP的发展和研究热潮. 当现有数据集无法涵盖该领域的痛点,无法发挥数学工具的潜力或已被解决时,则需要一个新的数据集,更确切地说,需要一个新的基准.
换句话说,行业痛点还有哪些其他问题?还是可以进一步挖掘当前数学工具的潜力?还是现有数学工具的当前开发阶段不能很好地解决这个问题?这应该是制作高质量数据集之前的首要考虑.
想想2015年的SNLI [1],2016年的SQuAD [2],2018年的GLUE [3],CoQA [4],以及现在的SuperGLUE [5],MRQA,都是由问题驱动的. 不足以覆盖问题的难点或无法满足数学工具的潜力,或者先前的问题几乎已解决,因此将出现一个新的数据集来解决下一个难点.
在明确要解决的问题之后,可以保证数据集质量的一半,其余一半取决于数据集的处理方式. 这里最关键的问题是数据和标签来源的选择以及预处理的程度. 此外,迭代的闭环构造和复杂的NLP任务的处理也将对解决问题的效率和质量产生非常重要的影响. 让我们介绍一下(〜 ̄∇ ̄)-☆
基本工具
所谓的“好工作”必须首先磨练自己的工具,只要您不太着急,在制作数据集之前就掌握一些有用的工具和技巧,这样可以大大减少不必要的重复和低效的劳动并提高工作效率. 迭代.
数据和标签来源
对数据集质量的第二个关键影响是数据和标签来源的选择. 其中,数据可以通过手动构建和写入来生成,也可以从Internet上进行爬网或通过对公共数据集进行二次处理而获得;标签也可以手动标记或通过*敏*感*词*获得.
手动构造和标签
最简单的思考方法是数据和标签都是人为( ̄∇ ̄)不幸的是,小夕没有资金去众包平台来帮助您积累经验(。́︿)对于许多相对简单的NLP任务,总是可以在Internet上找到数据,但是也有一些任务数据很难在Internet上访问. 通常,只能手动手动构建它(例如自然语言推理,基于任务的对话框中的大多数子任务),分词,NER,提取和一些序列标记任务. 如果您有一个小伙伴想要系统地学习标签,Xiao Xi推荐我之前在图书馆中读过的一本书,叫做《自然语言注释》,中文名称看起来像是《自然语言注释: 用于机器学习》. ”. 这本书非常好,所以我曾经想念一位不太擅长标记\(//∇//)\的PM女士(我希望她不会读它. 我知道……
幸运的是,对于大多数nlp任务,可以在Internet上找到合适的数据源,或者可以通过修改现有的公共数据集来生成合适的数据源.
爬上
如果您想自己进行爬网,可以从甚至Twitter,Quora,Wiki,Reddit等外部网站上爬网甚至直接下载英语语料库. 如果官方数据采集脚本无法满足您的需求,则可以进行搜索在github上基本上,我们总能找到一些奇怪的第三方爬虫来绕过这些限制(emmm感觉像在教别人实施*敏*感*词*). 当然,如果目标数据是中文,则微博,贴吧,豆瓣,百度百科和智虎网站上都有待爬网的地方.
当然,Twitter,微博和Tieba这样的网站的缺点是它们的内容太多. 爬完后,记得去github上找到相应的减肥减肥脚本(注意不要使用那些过于夸张的脚本. 清洁度可能有问题,原因将在后面解释)
更改
说实话,抓取您自己的数据确实是一件很脏的工作,尤其是当您要抓取的数据量非常大或正在抓取一些不太主流的网站时!因此,小溪建议您从现有的数据集开始,并尝试找到一种方法. 取用现成的数据并在饭后进行更改绝对可以节省很多精力!
实际上,许多数据集都是像这样“懒惰”的. 例如,在早期的Socher中,只有10,000个样本MR [16]的情感分类数据集使用解析器将MR中的句子分解为短语,从句等,然后分别对其进行标记,因此它成为具有更多内容的SST超过200,000个样本和多个粒度. [17]╮( ̄▽ ̄””)╭我最近刷了一篇论文,以进行文本样式控制[18],该解析器还用于分解Yelp情感分类数据集[19]和疯狂地处理它,将其转换为一个结构->文本样式化的文本生成数据集(解析器对于制作数据集确实是一件好事). 简而言之,在玩了一次之后,您会知道更改比爬╮(╯▽╰)╰方便得多
远程监管
在标记方面,最容易想到的当然是花钱进行众包. 不用说,下一种方法.
更经济和可用的方法是远程监视. 该区域的可玩性非常好. 标签的质量将和脑孔一样大!
进行远程监管的前提是提供可靠的假设,例如“给出查询-答案对,如果答案串出现在搜索引擎调用的文档中,则该文档可以回答查询”,因此是机器读取理解数据集TriviaQA [6],searchQA [7];例如,“ Twitter中收录的表情符号可以反映该Twitter的(细粒度)情绪”,因此存在情感分类数据集TwitterSentiment [8]和情绪可控对话生成数据集Mojitalk [9]. <//p
p如果您不放心,请自己抽样一些样本,然后粗略计算假设为真的样本比例. 只要在大多数情况下是正确的,它就很有希望,然后在假设上添加一些详细的约束条件(例如TriviaQA). 文档中的答案必须经常出现在文档中;带有mojitalk中收录多媒体信息的Twitter被直接丢弃. 当表情符号很多时,只查看频率最高的表情符号等. 在可靠的假设下,经过几次小的迭代,它通常可以是一个可用数据集./p
p简而言之,充分发挥远程监督作用就是掌握反向思维. 忘记“标签”一词,将您的思维方式改为“持有标签以查找数据”./p
p适当的预处理/p
p实际上,在处理数据集时具有“整洁度”不是一件好事,尤其是在语料库的词汇多样性和语义丰富性相对较强时,似乎使数据集更整洁的正则表达式可能非常/p
p沙雕一些与类别标签相关的有效模式,导致一些最初建立的X-> Y映射关系消失. 这减少了模型学习噪声的机会. 您无法消除所有噪声,但是您消除了许多模型. 找出学习噪音的机会,以适应噪音
在这方面,小夕痛苦的流泪. 花了半个下午写了几十条清洁规则. 结果,该模型更难以收敛,并且开发集的性能更差. 最后,我们发现,当数据量和模型不太小时,除了一些常规操作(例如过滤掉HTML标签,URL,脱敏,重复数据删除,截断等),小希通常只处理以下情况:
导致“标签泄漏”,在具有简单任务和典型标签的情况下,尤其是在有许多数据源的情况下,很容易发生这种情况. 例如,您任务的目标是让模型通过文本语义来判断情绪,因此不要宽容表情符号和表情符号,并严格控制它们在数据集中的比例. 样本太长. 例如,保留的功能词会出现在相同表情符号,ha,ah等的100个连续样本中(例如BERT中的[UNK],[PAD],[CLS],[SEP]等)
当然,如果您的数据集与生成任务有关,请记住要过滤掉*敏*感*词*counter =,=的内容. 对于某些高频错别字,一堆会使您感到肮脏的东西,如果您没有特殊需要,请放开它们. . . (如果您真的想彻底消除它们,则可以更改数据源. 不要试图与一个人的人争夺热鸡!)
验证可用性,尽快构建数据集的迭代闭环
无论是手动注释还是远程监督,如果数据集看起来不错,并不表示它可用. 如果注释太嘈杂或标签边界太模糊(许多注释错误,或者注释规则写得太松散和过于模糊,以至于人们无法区分某些类别之间的差异),无论模型多么复杂,它很可能都不会收敛于该数据集;相反,如果数据集中存在“标签泄漏”(例如,您使用表情符号*敏*感*词*构建情感分类数据集,最后忘记过滤出表情符号),或者标签和内容具有非常直接的含义映射关系(类别太具体或标签规则写得太废),这将导致非常简单. 模型将轻松地将此数据集刷到几乎完整的标记. 通过该模型学习的知识基本上是没有意义的. 换句话说,这种简单而直接的任务实际上是用一些规则和几行代码完成的,而这完全是不必要的. 进行数据驱动的模型训练.
因此,绝对不要抱有一次制作数据集的想法,而是尽快构建一个“生成数据集->运行基准线->不良案例研究->更新策略->重新生成数据集”的闭环. 可能. 请注意,选择基线太麻烦了(应该忘记对各种超参数敏感的模型),最好是使用开放源代码,易于使用且基本上不需要进行一般验证和有效. 调整参数. 其他型号(例如BERT系列).
请注意此处的焦点. 在迭代的早期阶段,第一个目标是使基准线正常收敛在数据集上. 在中期,将重点放在开发集上的基准性能上. 如果性能太好,请注意标签泄漏或数据泄漏(X中出现Y,或者您忘记删除重复项),性能太差,请调整参数,以后再注意情况. 看看不良情况更多地是关于样本问题(标记噪声)还是真实的模型能力还不够.
关于复杂的NLP任务
当然,以上内容实际上很广泛. 实际上,关于不同的NLP问题的数据集可能会非常不同. 一些简单的NLP任务(例如文本分类)几乎都基于上述基本原理,但是一些复杂的NLP任务(例如,基于任务的对话和知识图相关性)即使完全人工生成并标记,也不容易做到.
例如,与基于任务的对话相关的数据集很难使用*敏*感*词*来构建,这是一种懒惰的方式. 样本和标签的生成可能很难与人类注释分开. 有兴趣的朋友可以参考此数据集MultiWOZ [10]的论文(在三个基于任务的对话中介绍了DST的子任务,行为到文本的生成以及上下文到文本的生成). 机器方法(例如M2M [11]),机器人(例如DSTC系列[14]),人(例如ATIS [15],WOZ系列[10])这三种方式共同构建基于任务的方法对话数据集该摘要已经准备就绪,使您感到产生高质量的任务完成的对话数据集是一项非常具有挑战性的任务. 如果从一开始就进行探索,您可能会面临尴尬的表情╮( ̄▽ ̄“”)╭
因此,在面对一些更复杂的NLP任务时,您必须记住首先阅读最新,最权威的数据集. 您可能找不到关于这种数据集构建经验的几篇文章.
参考
[1] Bowman S R,Angeli G,Potts C等. 关键词: 大型标注语料库,学习自然语言推理arXiv预印本arXiv: 1508.05326,2015年.
[2] Rajpurkar P,Zhang J,Lopyrev K等. 小队: 100,000多个有关文本机器理解的问题[J]. arXiv预印本arXiv: 1606.05250,2016年.
[3] Wang A,Singh A,Michael J等. 胶水: 一个用于自然语言理解的多任务基准测试和分析平台[J]. arXiv预印本arXiv: 1804.07461,2018年.
[4] Reddy S,Chen D,Manning C D. Coqa: 一种会话式问答题[J]. 计算语言学协会学报,2019,7: 249-266.
[5] Wang A,Pruksachatkun Y,Nangia N等. 超级胶水: 通用语言理解系统的粘性基准[J]. arXiv预印本arXiv: 1905.00537,2019.
[6] Joshi M,Choi E,Weld D S等. Triviaqa: 一种用于阅读理解的*敏*感*词*远程监督挑战数据集[J]. 计算机应用,2006,26(6): 1175-1178 arXiv预印本arXiv: 1705.03551,2017年.
[7] Dunn M,Sagun L,Higgins M等. Searchqa: 一个新的问答数据集,其中收录来自搜索引擎的上下文[J]. arXiv预印本arXiv: 1704.05179,2017年.
[8]转到A,Bhayani R,Huang L.基于远程监督的Twitter情感分类[J]. CS224N项目报告,斯坦福,2009,1(12): 2009.
[9]周霞,王文彦. Mojitalk: *敏*感*词*产生情绪反应[J]. 心理学研究,2003,11(2): 109-114 arXiv预印本arXiv: 1711.04090,2017年.
[10] Budzianowski P,Wen TH,Tseng BH,等. 关键词: Multiwoz,面向任务的对话建模的*敏*感*词*多域盎司向导[J]. arXiv预印本arXiv: 1810.00278,2018年.
<p>[11] P Shah,D Hakkani-Tur,G Tur,A Rastogi,Bapna,N Nayak和L Heck. 2018年. 通过对话自演,一夜之间建立对话代理. arXiv预印本arXiv: 1801.04871.