文章目录[隐藏]
技巧1:快速读取数据
现在很多Kaggle比赛,数据集都比较大,大于3GB是非常常见的事情。在读取数据集时,可能会遇到一些困难。
你可以尝试以下的方法加速数据读取:
- 在pandas读取时手动设置变量类型
- 使用cudf代替pandas完成读取
- 转为parquet或feather再进行读取
技巧2:扩充数据集
当比赛数据集非常小时,外部数据集就非常关键了。此时可以寻找相似的外部数据集来完成预训练。
例如对于QA任务,可以选择以下的数据完成预训练。
- https://rajpurkar.github.io/SQuAD-explorer/
- http://nlpprogress.com/english/question_answering.html
当然也可以从伪标签和数据扩增和回译来增加数据样本。
技巧3:深入文本数据
文本分析
EDA有助于更好地理解数据。在开始开发机器学习模型之前,应该阅读/做大量的数据文本,这有助于特征工程和数据清洗。
- 文本长度规律
- 语种规律
- 标点符号规律
- 特殊字符规律
文本清洗
文本清理是NLP赛题中的重要组成部分。文本数据总是需要一些预处理和清理,然后我们才能用合适的形式表示它。
- Remove HTML tags
- Remove extra whitespaces
- Convert accented characters to ASCII characters
- Expand contractions
- Remove special characters
- Lowercase all texts
- Convert number words to numeric form
- Remove numbers
- Remove stopwords
- Lemmatization
技巧4:文本表示
文本表示方法影响文本的表示形式,也决定了模型的精度。基础的词向量包括:
- PretrainedGlovevectors
- Pretrainedfasttextvectors
- Pretrainedword2vecvectors
- PretrainedParagramvectors
- Universal Sentence Encoder
也可以考虑组合上述词向量以减少OOV的情况,当然同一个单词也可以拼接或平均多种词向量。
也可以直接考虑直接使用高阶嵌入方法:
- Bert
- Roberta Bert
- XLNET
技巧5:模型构建
损失函数
- 二分类Binary cross-entropy
- 多分类Categorical cross-entropy
- 二分类Focal loss
- 多分类Weighted focal loss
- 多分类Weighted kappa
优化器
- SGD
- RMSprop
- Adagrad
- Adam
- Adam with warmup
Callback
- Model checkpoint
- Learning rate scheduler
- Early Stopping