1 讨论分析赛题内容
1.1 初赛赛题分析
(1)17个区域,最多17个输入,但不固定,17类label,每个label0-1分类,提交需要计算每个label的概率
样本数量为10份数据集小
训练集10000
4|,|623 328 399 698 493 338 266 14 177 415 511 647 693 852 60 328 380 172 54 788 591 487 |,|16
测试集3000
2|,|751 335 834 582 717 583 585 693 623 328 107 380 698 808 549 14 455 415 381
(2)初赛是一个文本二分类问题,复赛是一个文本多分类问题
sklearn中的两个函数来计算预测结果和预测概率
- predict():返回预测标签结果
-
1.2 赛题处理思路
(1)分析赛题
(2)数据预处理 缺失值填充(pandas包)
- 异常值处理
- 是否有噪音,是否需要数据清洗
- 数据分布(Label类别分布、句子长度分布、统计特征的分布异常值、统计字段的缺失比例)+不均衡分布处理
- 句子长度分布
- 是按最长做标准,加的zeros padding
- 还是选择某个长度,短补长切
- Label类别分布
- 过采样
- 欠采样
- 句子长度分布
- (3)特征工程(特征值抽取)
- 脱敏数据特征提取(查资料)
- 文本的向量处理(参考天池的新闻文本分类也是处理文本向量)
- 抽取的角度(需要头脑风暴)
- 特征处理(归一化、特征、标签编码)
- 不同类别的文章长度不同,可以把长度作为一个Feature,以供机器学习模型训练
- 由于数据的不均衡,需要使用StratifiedKFold来划分。StratifiedKFold比起一般的Kfold能够确保采样后的训练集和验证集的样本分类比例和原始数据集大致一致
- 逗号出现的一般是最多的,其次是句号,剩余的几个出现次数很多的可以先保留记录成字符集合A,因为也有可能是一些真实的文字,然后再对文本的最后一个字符进行统计,基于之前的字符集合A,出现的最多的可能就是问号和感叹号等等。
(3)脱敏数据需要训练词向量
因为本次比赛的数据经过脱敏,因此无法使用外部已经实现好的词向量,需要我们自己训练,比如Word2Vec, GloVe, Fasttext, Bert等等。
Word2Vec我采用的gensim的word2vec进行了相应的训练,fasttext用的facebook的开源的包进行了训练,GloVe我用stanford的开源的脚本修改了sh文件,提取了对应的GloVe vector。(最后关于meta embedding,我选择将200dim的word2vec(skip-gram和CBow没什么特别大的区别啦,我就直接用的CBoW)+200dim的GloVe进行concat作为最后的表达,我并没有选择Fasttext,因为Fasttext和Word2Vec可能相关性会高一些,会弱化word2vec的表达)
参考:Rank4分享
(4)分类模型
- 分类算法:NB(Naive Bayes),决策树、SVM、KNN、LR(Logistic Regression)等
- 集成学习:RF(Random Forest)、GBDT、Adaboost、XGBoost、LightGBM、GatBoot等
- 神经网络:DL模型如CNN、LSTM、RNN等
(5)优化
- 算法优化
- 参数优化
甲状腺、癌症、糖尿病
1 1 0
2 准备工作
(1)查找相关和类似赛题(关键词:文本分类、多分类、文本向量处理、文本向量神经网络、异常检测)
- 文本分类:天池新闻文本赛题 第二名分享
- 二分类:Kaggle泰坦尼克号二分类问题
- 文本多分类:FlyAI医疗文本分类 2018 DC 达观-文本智能处理挑战
- 脱敏数据的处理赛题:2018 腾讯广告算法大赛、2018 高校大数据挑战赛—快手活跃用户预测、2018JD Dialog Challenge 任务导向型对话系统挑战赛(比赛信息汇总)
- 异常检测算法
- 相关数据处理赛题二分类:天猫重复购买预测
(2)查找适合处理文本向量的模型
- 文本处理的DL模型
- 文本处理的分类算法
- 多分类算法
- 模型融合
(3)查找未知理论的文献支撑
- 探讨出关键字-搜索类似的例题和论文、模型
- 查资料确定明确具体是什类别的问题
3 任务汇总及分配
- 了解队友技能
- 任务思路汇总
- 分配任务
4 学习的知识体系
(1)调试(新闻文本分类)模型(lstm+bert)
(2) 脱敏数据特征提取(查资料)
脱敏数据,需要训练词向量
(3)跑一遍+阅读理解Baseline类似问题的源码
(4)查找前沿的模型的资料(搜集,集中看,集中讨论)
(5)通用框架(TensorFlow 2.x,暂时,看别人源码用什么再说)
(6)2月16号开会讨论、汇总进展
5 小明资料汇总
一、经典模型:
Word Embedding: word2vec, glove, fasttext
Classification: RNN(LSTM, GRU), TextCNN, ELMo, Bert
可以参考天池新闻文本分类比赛Baseline:
https://tianchi.aliyun.com/competition/entrance/531810/forum
二、改进模型:
相关论文:
1. How to fine tune Bert for text classification?(介绍Bert的调参经验)
2. Train No Evil: Selective Masking for Task-Guided Pre-Training.(介绍不同的Mask策略)
3. Convolutional Neural Networks for Sentence Classification
4. Language Models are Few Short Learners (GPT3)
5.
三、其他资料:
1.天池公益赛“新冠疫情相似句对判定大赛”top方案:
https://mp.weixin.qq.com/s/Np7NkrtQ2HE8ToMFd21INg
2.CCF2020问答匹配比赛top1方案:
https://mp.weixin.qq.com/s/2ou401dwEwAQlorL4JG7lg
6. NLP数据增强方法:https://zhuanlan.zhihu.com/p/145521255
7. 大致介绍NLP: https://mp.weixin.qq.com/s/LwhWcnoWw13Cpm2-c7kexQ
8. Bert实操介绍:https://mp.weixin.qq.com/s/JLP4-5IR6HPK4SRQoC9FAQ
9. 介绍Bertd的MLM模型:https://blog.csdn.net/c9yv2cf9i06k2a9e/article/details/108914882
2月22-2月25任务分配
任务分配
(1)数据分析和探索
(2)文本多分类模型汇总及学习待做
(3)用Sklearn工具包下的现成的分类算法模型进行测试刘檬
- 逻辑回归分类
- K邻近分类
- 高斯贝叶斯分类
- 决策树分类
- 集成学习分类
(4)深度学习baseline学习,及初次实现
- Bert
- TextCNN小明
- FastText
- …
(5)待解决
数据分析报告:小明
- label分布
- 句子长度分布
- 词频统计
- 最高5个
- 最低5个
- 正负样本分布
提交的数据的概率意思是什么?每个 label的概率的含义
- 小明的Baseline讲解 小明
- Bert baseline模型套数据集 胜男
- 机器模型套数据集
进度
(1)小明
- 思路:是分别做17个标签的训练,汇总最后的概率
- 深度学习处理,TextCNN模型,实现了第一个标签的预测,AUC评估由98%以上。还剩下16个标签预测
(2)刘檬
- 机器学习预处理,做完特征工程,分成三个文件样本集、label集、测试集,测试
使用了[DecisionTreeClassifier](http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier)的模型,简单测试了数据集,准确率只有0.52
- label的编码分类有问题,17这个类是否需要还需要继续思考;已解决(无问题,因为无异常是空值,需要用17去填充)
(3)胜男
(2)小明
- 做完剩下的16个标签的预测结果,准备提交结果
- 搞清楚深度学习进行多标签分类的套路 2.进行词向量训练 3.模型修改
(3)胜男
-
进度
刘檬
由于做了Stacking后,本地验证损失相对于machine_baseline降低了到了很低值,但是线上提交了分数反倒降低了。
- 做了三个模型的Stacking,LGB、XGB、LogisticRegression、TextCNN 的Stacking,发现,三个模型和四个模型,效果不明显,所以三个就够了
- 筛选了LGB、XGB、LogisticRegression三种模型,Lregression效果最佳
- 增加了Top10字符,反而效果不佳
- 增加了数据归一化,稍有效果
- 实现了Mlogloss,用machine_baseline验证了能达到0.13
- 重新做了文本特征+无文本主题+句子长度+Stacking(LRegression+TextCNN)mlogloss = 0.0025
- 还可以对句子长度的数值进行提取特征max、mean
提高点:
- 句子:max、mean
- 模型集成
- 调参(多标签+多分类)
max_depth = [1,2,3] len train_splita(0.2) Mlogloss=
3月6-3月12任务进度
刘檬
(1)进展
- 做了IDTDF提取特征数量的调参,从初始的100个,调参到500,窗口改为(1,2)
- 做了去两个高频字符
- 做了XGB、LGB、LgistcRegression三个模型的Ensemble和Stacking,Stacking本地训练效果不如Ensemble,只在线上提交了Ensemble的结果
- 做了XGB、LGB的模型调参,参数太多,太耗时,调参失败
结果从0.80+提高到了0.83+
(2)下一步计划
做机器学习和深度学习模型的Ensemble或Stacking 准备先从TextCNN下手
3月12-3月20任务进度
刘檬
(1)尝试改进TextCNN
- Glove+word2vc的词向量合并,每个维度64,能提升0.1.词向量维度需要调参,目前尝试了100,效果不佳
- Adam收敛非常快,但效果不佳,还是选择SGD
- 在训练集中去掉前两个高频字符和疑似句号的381,效果不佳。
- 使用交叉验证划分训练,模型能得到提升
- 以上最佳得分0.84+
(2)修改达观文本比赛baseline
- 刚调试完模型数据输入,在多标签二分类上还没来得及做