注意事项
(1)之前只是粗浅地学了点理论,如XGBoost用二阶近似损失函数,LightGBM提出单边梯度采样和互斥特征绑定,一二月的打卡是LightGBM的实战和文本相似度。 (2)在第二部分的打卡顺便熟悉paddle和白嫖GPU。 (3)具体内容后面更新。
一、题目及介绍
打卡要求:
(1)所有任务可以写到一个jupyter notebook中; (2)打卡过程记录思考过程,包括尝试和资料记录等;
二、LightGBM实战(项目一)
LightGBM(Light Gradient Boosting Machine)是微软开源的一个实现 GBDT 算法的框架,支持高效率的并行训练。LightGBM 提出的主要原因是为了解决 GBDT 在海量数据遇到的问题。本次学习内容包括使用LightGBM完成各种操作,包括竞赛和数据挖掘中的模型训练、验证和调参过程。
任务名称 | 难度 | 所需技能 |
---|
任务1:模型训练与预测 | 低、1 | LightGBM | 任务2:模型保存与加载 | 低、1 | LightGBM | 任务3:分类、回归和排序任务 | 高、3 | LightGBM | 任务4:模型可视化 | 低、1 | graphviz | 任务5:模型调参(网格、随机、贝叶斯) | 中、2 | 模型调参 | 任务6:模型微调与参数衰减 | 中、2 | LightGBM | 任务7:特征筛选方法 | 高、3 | 特征筛选方法 | 任务8:自定义损失函数 | 中、2 | 损失函数&评价函数 | 任务9:模型部署与加速 | 高、3 | Treelite |
三、具体任务
任务1:模型训练与预测
- 步骤1 :导入
LightGBM 库 - 步骤2 :使用
LGBMClassifier 对iris进行训练。 - 步骤3 :将预测的模型对iris进行预测。
任务2:模型保存与加载
- https://github.com/microsoft/LightGBM/blob/master/examples/python-guide/advanced_example.py
- 步骤1 :将任务1训练得到的模型,使用
pickle 进行保存。 - 步骤2 :将任务1训练得到的模型,使用
txt 进行保存。 - 步骤3 :加载步骤1和步骤2的模型,并进行预测。
任务3:分类、回归和排序任务
- https://github.com/microsoft/LightGBM/blob/master/examples/python-guide/sklearn_example.py
- https://github.com/microsoft/LightGBM/blob/master/examples/python-guide/simple_example.py
- 步骤1 :学习
LightGBM 中sklearn接口的使用,导入分类、回归和排序接口。 - 步骤2 :学习
LightGBM 中原生train接口的使用。 - 步骤3:二分类任务
- 步骤4:多分类任务
- 步骤5:回归任务
任务4:模型可视化
- 步骤1:安装graphviz
- https://blog.csdn.net/m0_55099488/article/details/118685625
- 如果在AI Studio平台可以使用
pip install graphviz 完成安装,重启Notebook即可使用。 - 步骤2 :将树模型预测结果进行可视化,https://blog.csdn.net/kyle1314608/article/details/111245782
- 步骤3(可选) :在任务2中我们保存了
json 版本的树模型,其中一家包含了每棵树的结构,你可以手动读取后,试试吗?
任务5:模型调参(网格、随机、贝叶斯)
import pandas as pd, numpy as np, time
from sklearn.model_selection import train_test_split
data = pd.read_csv("https://cdn.coggle.club/kaggle-flight-delays/flights_10k.csv.zip")
data = data[["MONTH","DAY","DAY_OF_WEEK","AIRLINE","FLIGHT_NUMBER","DESTINATION_AIRPORT",
"ORIGIN_AIRPORT","AIR_TIME", "DEPARTURE_TIME","DISTANCE","ARRIVAL_DELAY"]]
data.dropna(inplace=True)
data["ARRIVAL_DELAY"] = (data["ARRIVAL_DELAY"]>10)*1
cols = ["AIRLINE","FLIGHT_NUMBER","DESTINATION_AIRPORT","ORIGIN_AIRPORT"]
for item in cols:
data[item] = data[item].astype("category").cat.codes +1
train, test, y_train, y_test = train_test_split(data.drop(["ARRIVAL_DELAY"], axis=1), data["ARRIVAL_DELAY"], random_state=10, test_size=0.25)
- 步骤2 :构建
LightGBM 分类器,并设置树模型深度分别为[3,5,6,9] ,设置训练集和验证集,分别记录下验证集AUC精度。 - 步骤3:构建LightGBM分类器,在fit函数中将category变量设置为categorical_feature,训练并记录下分别记录下验证集AUC精度。
- https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html#lightgbm.LGBMClassifier.fit
- https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.train.html#lightgbm.train
- 步骤4 :学习网格搜索原理,使用
GridSearchCV 完成其他超参数搜索,其他超参数设置可以选择learning_rate 、num_leaves 等。 - 步骤5 :学习随机搜索原理,使用
GridSearchCV 完成其他超参数搜索,其他超参数设置可以选择learning_rate 、num_leaves 等。 - 步骤6 :学习贝叶斯调参原理,使用BayesianOptimization完成超参数搜索,具体过程可以参考https://blog.csdn.net/qq_42283960/article/details/88317003
任务6:模型微调与参数衰减
- 步骤0 :读取任务5的数据集,并完成数据划分。
- 步骤1 :学习使用
LightGBM 微调的步骤逐步完成1k数据分批次训练,训练集分批次验证集不划分,记录下验证集AUC精度。 - 步骤2 :学习使用
LightGBM 学习率衰减的方法,使用指数衰减&阶梯衰减,记录下验证集AUC精度。
任务7:特征筛选方法
- 步骤0 :读取任务5的数据集,并完成数据划分。
- 步骤1 :使用
LightGBM 计算特征重要性,并筛选最重要的3个特征。 - 步骤2:学习排列重要性,并通过排列重要性计算出最重要的3个特征,要求你手动实现其过程。
- https://scikit-learn.org/stable/modules/permutation_importance.html
- https://www.kaggle.com/dansbecker/permutation-importance
- 步骤3:学习null importance重要性,并手动实现其过程,计算出最重要的3个特征。
- https://www.kaggle.com/ogrellier/feature-selection-with-null-importances
任务8:自定义损失函数
- https://gitee.com/mirrors/lightgbm/blob/master/examples/python-guide/advanced_example.py
- 步骤0 :读取任务5的数据集,并完成数据划分。
- 步骤1 :自定义损失函数,预测概率小于0.1的正样本(标签为正样本,但模型预测概率小于0.1),梯度增加一倍。
- 步骤2 :自定义评价函数,阈值大于0.8视为正样本(标签为正样本,但模型预测概率大于0.8)。
任务9:模型部署与加速(可选)
- https://treelite.readthedocs.io/en/latest/tutorials/import.html
- 步骤1 :训练模型,将模型保存为txt
- 步骤2 :使用treelite加载模型,导出为so,并进行预测。
四、中文文本相似度(项目二)
千言数据集介绍:面向NLP和生成任务的中文开源数据集。 文本相似度旨在识别两段文本在语义上是否相似。文本相似度在自然语言处理领域是一个重要研究方向,同时在信息检索、新闻推荐、智能客服等领域都发挥重要作用。
本次评测的文本相似度数据集包括公开的三个文本相似度数据集,分别为哈尔滨工业大学(深圳)的 LCQMC 和 BQ Coupus,以及谷歌的 PAWS-X(中文):
LCQMC(A Large-scale Chinese Question Matching Corpus), 百度知道领域的中文问题匹配数据集,目的是为了解决在中文领域大规模问题匹配数据集的缺失。该数据集从百度知道不同领域的用户问题中抽取构建数据。
BQ Corpus(Bank Question Corpus), 银行金融领域的问题匹配数据,包括了从一年的线上银行系统日志里抽取的问题pair对,是目前最大的银行领域问题匹配数据。
PAWS (Paraphrase Adversaries from Word Scrambling),谷歌发布的包含 7 种语言释义对的数据集,包括PAWS(英语) 与 PAWS-X(多语)。数据集里包含了释义对和非释义对,即识别一对句子是否具有相同的释义(含义),特点是具有高度重叠词汇,对于进一步提升模型对于强负例的判断很有帮助。
各个数据集的任务均一致,即判断两段文本在语义上是否相似的二分类任务:
类型 | 句子1 | 句子2 | 标签(label) |
---|
相似文本 | 看图猜一电影名 | 看图猜电影 | 1 | 不相似文本 | 无线路由器怎么无线上网 | 无线上网卡和无线路由器怎么用 | 0 |
打卡的任务:
任务名称 | 难度 | 所需技能 |
---|
任务1:报名比赛,下载比赛数据集并完成读取 | 低、1 | Pandas | 任务2:对句子对提取TFIDF以及统计特征,训练和预测 | 高、2 | TDIDF | 任务3:加载中文词向量,自己训练中文词向量 | 高、2 | gensim | 任务4:使用中文词向量完成mean/max/sif句子编码 | 高、3 | mean/max/sif-pooling | 任务5:搭建SiamCNN/LSTM模型,训练和预测 | 高、3 | SiamCNN/SiamLSTM | 任务6:搭建InferSent模型,训练和预测 | 高、3 | InferSent | 任务7:搭建ESIM模型,训练和预测 | 高、3 | ESIM | 任务8:使用BERT或ERNIE完成NSP任务 | 高、3 | BERT | 任务9:Bert-flow、Bert-white、SimCSE | 高、3 | SimCSE |
五、具体任务
任务1:读取数据集
- 步骤1 :登录&报名比赛:https://aistudio.baidu.com/aistudio/competition/detail/45/0/task-definition
- 步骤2 :下载比赛数据集
- 步骤3 :使用
Pandas 完成数据读取。
任务2:对句子对提取TFIDF以及统计特征,训练和预测
- 参考代码:https://www.kaggle.com/anokas/data-analysis-xgboost-starter-0-35460-lb
- 步骤1:对句子对(句子A和句子B统计)如下特征:
- 句子A包含的字符个数、句子B包含的字符个数
- 句子A与句子B的编辑距离
- 句子A与句子B共有单词的个数
- 句子A与句子B共有字符的个数
- 句子A与句子B共有单词的个数 / 句子A字符个数
- 句子A与句子B共有单词的个数 / 句子B字符个数
- 步骤2 :计算TFIDF,并对句子A和句子B进行特征转换
- 步骤3 :计算句子A与句子B的TFIDF向量的内积距离
- 步骤4 :将上述特征送入分类模型,训练并预测,将结果预测提交到比赛网站。
任务3:加载中文词向量,自己训练中文词向量
任务4:使用中文词向量完成mean/max/sif句子编码
- 步骤1 :单词通过word2vec编码为100维向量,则句子编码为N?100N?100的矩阵,N为句子单词个数。
- 步骤2 :将N*100的矩阵进行
max-pooling 编码,转为100维度。 - 步骤3 :将N*100的矩阵进行
mean-pooling 编码,转为100维度。 - 步骤4 :将N*100的矩阵与单词的IDF进行矩阵相乘,即按照单词的词频进行加权,进行
tfidf-pooling 编码,转为100维度。 - 步骤5:学习SIF编码的原理,进行sif编码,转为100维度。
- https://github.com/PrincetonML/SIF/blob/master/src/SIF_embedding.py#L30
- https://openreview.net/pdf?id=SyK00v5xx
- 步骤6(可选) :通过上述步骤2-步骤5的编码,计算相似句子的相似度 vs 不相似句子的相似度, 绘制得到分布图,哪一种编码最优?
任务5:搭建SiamCNN/LSTM模型,训练和预测
- 步骤1 :将训练好的word2vex作为深度学习embeeding层的初始化参数。
- 步骤2 :搭建SiamCNN(Word2Vec句子编码 + 1D CNN +FC)的孪生网络结构,完成训练和预测,提交测试集预测结果。
- 步骤3 :搭建SiamLSTM(Word2Vec句子编码 + LSTM + FC)的孪生网络结构,完成训练和预测,提交测试集预测结果。
任务6:搭建InferSent模型,训练和预测
- 步骤1 :将训练好的word2vex作为深度学习embeeding层的初始化参数。
- 步骤2 :搭建InferSent模型,尝试不同的交叉方法。
- 步骤3 :训练InferSent模型,提交测试集预测结果。
任务7:搭建ESIM模型,训练和预测
- 步骤1 :将训练好的word2vex作为深度学习embeeding层的初始化参数。
- 步骤2 :搭建ESIM模型,尝试不同的交叉方法。
- 步骤3 :训练ESIM模型,提交测试集预测结果。
任务8:使用BERT或ERNIE完成NSP任务
- 参考代码:
- https://aistudio.baidu.com/aistudio/projectdetail/3168859
- bert-nsp代码
- 步骤1 :学习Bert模型的使用。
- 步骤2 :使用Bert完成NSP任务的训练和预测,提交测试集预测结果。
任务8:Bert-white、SimCSE(可选)
- 步骤1 :学习Bert-white原理和实现
- 步骤2 :学习SimCSE原理和实现
Reference
- https://lightgbm.readthedocs.io/en/latest/index.html
- https://github.com/Microsoft/LightGBM
- https://zhuanlan.zhihu.com/p/266865429
- https://ai.baidu.com/ai-doc/AISTUDIO/Dk3e2vxg9
- coggle
- Notebook环境:https://ai.baidu.com/ai-doc/AISTUDIO/sk3e2z8sb
|