项目简介
本项目是基于PyTorch框架构建的广告受众基础属性预估系统,围绕赛题展开。赛题以用户91天内的广告点击历史记录作为训练集,目标是预测测试数据集中用户的年龄和性别。项目包含数据下载、预处理、特征提取、模型预训练与训练等环节,借助BERT预训练模型提取文本特征并结合其他特征训练模型,提升预测的准确性与效率。
项目的主要特性和功能
- 运用BERT预训练模型提取文本特征,结合其他特征进行模型训练。
- 提供数据预处理和特征提取脚本,实现数据整合与标准化。
- 采用K折交叉验证训练流程,增强模型泛化能力。
- 提供训练、验证、预测和结果提交脚本,方便生成提交文件。
- 融合不同规模的预训练模型,可按需选择。
安装使用步骤
环境配置
确保已安装Pytorch,操作系统为Linux Ubuntu 16.04(256G内存,4*p100),并通过以下命令安装必要依赖库:
shell
pip install transformers==2.8.0 pandas gensim scikit-learn filelock gdown
数据下载
通过网站下载数据集到data
目录,或运行以下命令:
shell
gdown https://drive.google.com/uc?id=15onAobxlim_uRUNWSMQuK6VxDsmGTtp4
unzip data.zip
rm data.zip
数据预处理
运行python src/preprocess.py
,将所有文件合并,分为点击记录文件(click.pkl
)和用户文件(train_user.pkl/test_user.pkl
)。
特征提取
运行python src/extract_features.py
提取特征。
预训练Word2Vector与BERT
可选择重新预训练或下载预训练好的权重(二者必须一致):
预训练Word2Vector
- 重新预训练:运行
python src/w2v.py
- 下载预训练好的:
shell gdown https://drive.google.com/uc?id=1SUpukAeXR5Ymyf3wH3SRNdQ3Hl2HazQa unzip w2v.zip cp w2v/* data/ rm -r w2v*
预训练BERT
- 重新预训练:
shell cd BERT mkdir saved_models python run.py \ --output_dir saved_models \ --model_type roberta \ --config_name roberta-base \ --mlm \ --block_size 128 \ --per_gpu_train_batch_size 64 \ --per_gpu_eval_batch_size 64 \ --gradient_accumulation_steps 1 \ --learning_rate 5e-5 \ --weight_decay 0.01 \ --adam_epsilon 1e-6 \ --max_grad_norm 1.0 \ --max_steps 100000 \ --mlm_probability 0.2 \ --warmup_steps 10000 \ --logging_steps 50 \ --save_steps 10000 \ --evaluate_during_training \ --save_total_limit 500 \ --seed 123456 \ --tensorboard_dir saved_models/tensorboard_logs rm -r saved_models/bert-base cp -r saved_models/checkpoint-last saved_models/bert-base rm saved_models/bert-base/optimizer.pt cp saved_models/vocab.pkl saved_models/bert-base/vocab.pkl cd..
- 下载预训练好的:
shell gdown https://drive.google.com/uc?id=1ToAJwl_oRAeRNyYF_FK0B2APVXlPFTlq unzip bert-base.zip mv bert-base BERT/ rm bert-base.zip
训练模型
shell
mkdir saved_models
mkdir saved_models/log
for((i=0;i<5;i++));
do
python run.py \
--kfold=5 \
--index=$i \
--train_batch_size=256 \
--eval_steps=5000 \
--max_len_text=128 \
--epoch=5 \
--lr=1e-4 \
--output_path=saved_models \
--pretrained_model_path=BERT/bert-base \
--eval_batch_size=512 2>&1 | tee saved_models/log/$i.txt
done
运行python src/merge_submission.py
合并结果,生成submission.csv
。
低配置资源建议
- 内存不足或只想简单跑完整代码,去掉
src/prepocess.py
的8、15、22行。 - 显存不足,下载BERT-small模型,并调整
batch size
。
运行完整过程
可运行bash run.sh
,运行整个过程并生成结果;也可按上述步骤依次运行。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】