关于构建NLP数据集的总结

高质量数据集的定义:

一是可以为研究人员提供优质的数据集,推动研究领域的进步。
二是可以使用数据驱动的方法优化业务目标,即解决问题。

如何构建高质量的数据集?

首先明确要解决的问题,基于问题出发去构建数据集,
其次是数据和标签来源的选择以及预处理程度的把握。
此外:迭代闭环的构建和对复杂任务的处理也需要注意。

基本工具的使用:

1、github:构建之前看看是否有相关数据集
2、正则表达式:文本清洗
3、Hadoop/Spark:行业大数据标准开源软件(大型服务器)。
4、vim:分析样本专用
5、awk,grep,cut,wc命令行工具:分析样本专用,ipython中的open,readline太慢了。
6、ipython+screen/tmux:为防止连接中断,将ipython挂在screen或者tmux窗口。

数据与标签来源

数据来源:人工构造、撰写,互联网爬取、公开数据集二次加工
标签:人工标注,远程监督(最经济实用的方法,前提是设定规则,
什么情况下为正样本。掌握逆向思维,“握着标签找数据”)

预处理

过度预处理可能导致:
1、清除了一些跟类别标签相关的有效模式,导致一些本来成立
的X->Y的映射关系因此消失。
2、减少了模型对抗噪声的学习机会,你无法消除所有噪声,
但是却消除了很多模型识别噪声适应噪声的学习机会
预处理的常规操作:滤掉HTML标签、URL、脱敏、去重、截断等
其他情况需处理的情况:1、“标签泄露”,如文本语义判断情感,
需对情感和颜文字进行处理,控制比例。
2、样本过长,连续100个相同的emoji、哈、啊等
3、出现预留功能词(比如BERT中的[UNK],[PAD],[CLS],[SEP]之类的)

验证可用性,构造迭代闭环

构造一个“生成数据集->跑baseline->badcase study->
更新策略->重新生成数据集”的闭环。
baseline最好选择已被普遍验证有效的、有开源代码的、上手轻松的、基本不用调参就效果还可以的模型(比如BERT系列)。
阶段目标
迭代前期:让baseline在数据集上正常收敛。
迭代中期:关注baseline在开发集上的表现,表现太好要留意
标签泄漏或数据泄漏,表现太差调调参。
迭代后期:更多关注badcase了,看看badcase中更多的是样本
问题(标注噪声)还是真的模型能力不够。

以上步骤适合于如文本分类等简单NLP任务,对任务型对话、知识图谱的复杂NLP任务并不太适用,请查阅相关最新paper。
参考文献:

如何打造高质量的机器学习数据集? -知乎

你可能感兴趣的:(NLP,数据集)