AutoNLP2019赛事总结

1,978 阅读4分钟

赛题介绍

AutoNLP2019赛事的主要目的是对自然语言问题的分类任务设计一套general的解决方案,线上线下一共提供了10个数据集,涉及多种nlp任务,本次比赛一共提供了3种baseline方法:

  • SVM:传统机器学习方法,以tf-idf特征为输入
  • TextCNN:来自于2014年的一篇论文,利用词向量将句子转为矩阵,利用不同size的1D卷积核提取文本特征(可看作n-gram语义信息),经MaxPool后使用全连接层进行分类(sigmoid for 2 and softmax for multi)
  • FastText:在TextCNN基础上增加FastText pre-trained word embedding作为Embedding层

以**ALC(Area under Learning Curve)**作为评价指标:

  • s(t)表示最近的一次预测的auc
  • 使用\hat{t}(t) = \frac{\log (1 + t / t_0)}{\log(1+T / t_0)} \text{, where } T \text{ is the time budget and } t_0 \text{ is a reference time amount (of default value 60 seconds)}
  • \text{ALC} = \frac{1}{\log(1+T/t_0)} \int_0^T \frac{s(t)}{t+t_0} \, dt
  • 根据权重\frac{1}{t + t_0},初始的权重是最重要的

数据概览

因为是AutoML系列的比赛,参赛者需要提供通用的solution,所以往往会提供多种数据集以检验方案的泛化能力,本次比赛一共提供5(offline)+5(online)+5(stage2)+5(private),20个数据集:

  • 多语言:涉及英文、中文
  • 多分类:不同数据集可能有2、8、10、30+个类别
  • 多种类:数据集中包含情感分析、垃圾邮件识别、新闻分类、论文分类、微博信息分类等多种问题
  • 大规模:虽然offline数据集很小,但是online数据集规模较大,最大约有50w+
  • 不平衡:大部分数据集类别不平衡现象很严重,某个数据集正反例可达1000:1

因此可以得出以下几点:

  • 类别不平衡严重,需要重视采样方法
  • 由于评价指标ALC根据时间加权,并且用log函数进行加权,需要尽早出结果
  • AUC不可微,无法直接作为损失函数进行优化,可以使用crossentropy作为替代

Solution

通用的nlp步骤如下:

  1. 文本预处理
    • 清洗数据、进行分词等
  2. 特征工程
    • 传统ML特征(如tf-idf特征, 主要集中于提取关键词)
    • 语法、语义信息(词向量word embedding,句向量等)
  3. 建立模型
    • 使用半监督学习的方式利用分类结果

数据预处理

  1. 采样:针对类别不平衡问题
    • 根据kaggle竞赛类别不平衡处理方案Result( blending(pred过采样,pred降采样,pred不处理,pred权重) ) > pred不处理
    • 总结:针对多类进行欠采样,针对少类进行过采样,一般与不处理的结果进行融合往往有提升
    • 其中Tomek link欠采样方式复杂度过高,如果没做任何优化就是O(n^2),建议数据集非常大+类别不平衡时先欠采样再做
  2. 数据清洗
    • 英文:去除标点与特殊字符、统一小写
    • 中文:去除特殊符号与乱码
      • 对于中文,其实不一定需要分词,因为某种情况下以词/字为粒度效果差距可能不是很大,但是效率差距非常大
    • 这边印象深刻的是DeepBlueAI对预处理做的非常细
      • 对于数字的处理,1024和1025经过清洗后转为词向量很容易具有差异非常大的语义,因此可采用实现将数字进行分桶的方式进行处理
      • 对于email中邮箱号的处理,xx.mail.com容易被分割,因此需要对邮箱的数据结构进行特殊处理
  3. 停用词处理
    • 根据不同语言选择不同的停用词词典
    • 控制文本长度,过短文本保留停用词,过长文本(如数据集中的论文等)直接截断根据最大长度保留前面的部分

对于效率有要求可以使用Cython提高效率

特征工程

  • 传统机器学习方法
    • Tf-idf 特征
      • N gram
      • Word or character n gram
      • 这边一定要多尝试,不同参数效果差距AUC可能差3个百分点
    • 词频特征
  • 深度学习方法
    • Embedding,如果有效率要求,可以先对Embedding Layer freeze,下一轮再fine tuning
    • Bi-lstm提取语义语法信息

模型 & 集成

由于某些原因,我们尝试了非常多种类的模型,但事实证明简单/复杂模型之间的差距并不大,可能最大就1个百分点左右,AutoNLP比赛的第四名benf队伍以往比赛一直采用LinearSVM这次他们使用了LR模型取得了第四

  • 模型选择
    • LienarSVM
    • TextCNN
    • TextRNN, Attention等
  • 集成学习
    • 使用blending方式进行集成
    • 由于数据集本身规模较大并且比赛对效率有要求,往往需要进行采样,那么可以按8:2的比例划分验证集,对每轮训练得到的模型效果进行测试,由此对集成中模型的权重进行调整
  • 半监督学习
    • 利用上一轮预测信息,将logit大于一个置信度(根据轮数递减)的测试集加入到下一轮训练集中
    • 置信度的选择非常重要,不然可能越训练越坏