Code Monkey home page Code Monkey logo

tencent2020_rank1st's Introduction

赛题介绍-广告受众基础属性预估

比赛将为参赛者提供一组用户在长度为 91 天(3 个月)的时间窗口内的广告点击历史记录作为训练数据集。每条记录中包含了日期 (从 1 到 91)、用户信息 (年龄,性别),被点击的广告的信息(素材 id、广告 id、产品 id、产品类目 id、广告主 id、广告主行业 id 等),以及该用户当天点击该广告的次数。测试数据集将会是另一组用户 的广告点击历史记录。提供给参赛者的测试数据集中不会包含这些用户的年龄和性别信息。 本赛题要求参赛者预测测试数据集中出现的用户的年龄和性别。

1. 环境配置

  • Pytorch
  • Linux Ubuntu 16.04, 256G内存,4*p100
  • pip install transformers==2.8.0 pandas gensim scikit-learn filelock gdown

2. 模型介绍

avatar avatar avatar avatar

3. 低配置资源建议

1)内存不足或者只是想简单跑下完整代码,请只使用初赛数据:

去掉src/prepocess.py的8, 15, 22行

2)如果显存不足,请下载10中的bert-small模型,并调整batch size

4. 运行完整过程

可运行以下脚本,运行整个过程并生成结果。或按照3-7节的说明依次运行。

bash run.sh

5. 数据下载

通过该网站下载数据集到data目录,或运行下面的命令进行下载

gdown https://drive.google.com/uc?id=15onAobxlim_uRUNWSMQuK6VxDsmGTtp4
unzip data.zip 
rm data.zip

6. 数据预处理

合并所有文件,并分为点击记录文件(click.pkl),用户文件(train_user.pkl/test_user.pkl)

python src/preprocess.py

7. 特征提取

python src/extract_features.py

8. 预训练 Word2Vector 与 BERT

这里提供两种方式获得预训练权重: 重新预训练或下载预训练好的权重

注: Word2Vector和BERT权重必须一致,即要么全部重新预训练,要么全部下载

1) 预训练Word2Vector

预训练word2vector

python src/w2v.py

或下载预训练好的W2V

gdown https://drive.google.com/uc?id=1SUpukAeXR5Ymyf3wH3SRNdQ3Hl2HazQa
unzip w2v.zip 
cp w2v/* data/
rm -r w2v*

2) 预训练BERT

预训练BERT (如果GPU是v100,可以安装apex并在参数上加--fp16进行加速)

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 ..

或下载预训练好的BERT-base

gdown https://drive.google.com/uc?id=1ToAJwl_oRAeRNyYF_FK0B2APVXlPFTlq
unzip bert-base.zip
mv bert-base BERT/
rm bert-base.zip

9. 训练模型

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  

合并结果,结果为submission.csv

python src/merge_submission.py

10. 不同规模的预训练模型

由于此次比赛融合了不同规模大小的预训练模型,在此也提供不同规模的预训练模型:

BERT-small, BERT-base, BERT-large, BERT-xl

其中bert-base效果最好

#bert-small
gdown https://drive.google.com/uc?id=1bDneO-YhBs5dx-9qC-WrBf3jUc_QCIYn
#bert-base
gdown https://drive.google.com/uc?id=1ToAJwl_oRAeRNyYF_FK0B2APVXlPFTlq
#bert-large
gdown https://drive.google.com/uc?id=1yQeh3O6E_98srPqTVwAnVbr1v-X0A7R-
#bert-xl
gdown https://drive.google.com/uc?id=1jViHtyljOJxxeOBmxn9tOZg_hmWOj0L2

tencent2020_rank1st's People

Contributors

guoday avatar guody5 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tencent2020_rank1st's Issues

vocab_dim_v1

请教一下,vocab_dim_v1=64是什么维度

package的版本

想请教下,你们当时运行这份代码使用的包的版本!感谢!

我这边在运行的时候,会因为包的版本报一些错误,例如gensim

请问模型config中的vocab_size=5表示什么意思?

我看到在预训练和训练模型的encoder中都有config.vocab_size=5这个参数,请问这个表示什么意思和什么作用?在后面找了很久也没有找到用到这个的地方,而且输入encoder的直接是embeding向量吧,所以也没有用到bert encoder里面的embeding。那么这个vocab_size似乎是没用到?

尊敬的作者,请问提供的bert-small是否经过预训练?

非常感谢您愿意开源,感谢您精彩的工作,请问您的bert-small是否经过预训练(因为您的注解里面提到bert-small需要经过预训练)
不知道能否浪费您宝贵的时间,麻烦您发送一下经过预训练的bert-small,菜鸡的配置比较低(内存比较64G,显存24G)[email protected]
再次感谢您出色的工作
另能否小声提个建议,您上传资源能否选择国内的运营商,因为Google drive需要科学上网

请问python的版本

hello,您好。我使用python 3.6 加载下载的w2v的table会报错如下:
File "run.py", line 94, in
args.embeddings_tables[x[0]] = gensim.models.KeyedVectors.load_word2vec_format(x[0], binary=False)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/models/keyedvectors.py", line 1549, in load_word2vec_format
limit=limit, datatype=datatype)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/models/utils_any2vec.py", line 276, in _load_word2vec_format
header = utils.to_unicode(fin.readline(), encoding=encoding)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/utils.py", line 368, in any2unicode
return unicode(text, encoding, errors=errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

将load_word2vec_format 函数改成load 的时候,加载data/sequence_text_user_id_product_id.128d时报错:
File "run.py", line 95, in
args.embeddings_tables[x[0]] = gensim.models.KeyedVectors.load(x[0])
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/models/keyedvectors.py", line 1553, in load
model = super(WordEmbeddingsKeyedVectors, cls).load(fname_or_handle, **kwargs)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/models/keyedvectors.py", line 228, in load
return super(BaseKeyedVectors, cls).load(fname_or_handle, **kwargs)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/utils.py", line 435, in load
obj = unpickle(fname)
File "/Users/dwing/anaconda3/lib/python3.6/site-packages/gensim/utils.py", line 1398, in unpickle
return _pickle.load(f, encoding='latin1')
OSError: [Errno 22] Invalid argument

Word2Vector和BERT权重必须一致是什么意思

恭喜大佬再次喜提冠军, Word2Vector和BERT权重必须一致是什么意思?


这里提供两种方式获得预训练权重: 重新预训练或下载预训练好的权重

注: Word2Vector和BERT权重必须一致,即要么全部重新预训练,要么全部下载

关于最后的结果

请问,最终要预测的年龄看起来是个连续的整数,但是看模型最后输出的是20个类别的概率,请问这是怎么对应上的

预训练词向量频次过滤问题

您好,我看 src/w2v.py预训练中没有通过词频对出现的各种id进行过滤,直接min_count=1,请问这是因为min_count=1的结果最好还是为了与后续bert训练保持词表一致?或者还是其他的原因?然后请教下这个min_count参数的设置有什么经验吗?谢谢!!!

有关模型细节的几个疑问

有几个疑问希望郭大能答疑解惑一下!

  1. Bert预训练时产生的输入端词典和输出端词典都是至多保留10W个ID,并且在分类时也是使用的相同词典,是不是可以理解为只使用了高频的ID进行预训练和分类。

  2. Bert预训练时,MASK、PAD、UNK 所对应的 embedding 是否都是 全0 。如果是的话,这三个 special token 成为等价的话,会不会影响预训练。

  3. Bert预训练时,输入端拼接了 word2vec 和 一个 16 维的 embeddings,这个16维的embeddings 是起到一个什么作用。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.