工作中遇到一个用文本做回归的问题,原版bert本来有run_reg.py,但不知为什么后来就又移除了,这个版本的y是从0到1,我的需求是从0到几十万,所以需要改改。
在bert基础上,有几点修改:
1、extract_features.py中的read_examples函数读文件,改成自己的输入文件的格式,即“数值y\t文本x”的形式。
2、modeling.py文件的227行改成,用倒数第二层。
3、run_reg_v2.3.1.py在run_reg.py的基础上,做了如下修改:
(1)去掉softmax:让y的范围从0到1变成从0到无穷大。
(2)再加两个relu和全连接:增加模型的拟合能力。
(3)用Xavier给w做初始化:更快、更好的效果。
run_reg.py来自:https://github.com/google-research/bert/pull/503/commits/f005e159ffb40591b7e16d257ab4abc4e137182a
运行和原版一样:
export PY_FILE_DIR=/xxx/xxx/...
export PYTHON_PATH=/xxx/.../bin/python
export VERSION=v8.1.5_2
export BERT_BASE_DIR=/xxx/.../chinese_L-12_H-768_A-12
export FINE_TUNED_MODEL_10_epoch=/xxx/.../fine_tuned_model_10_epoch
$PYTHON_PATH $PY_FILE_DIR/run_reg_v2.3.1.py \
--task_name=regression \
--do_train=true \
--do_eval=true \
--do_predict=true \
--data_dir=$DATA_DIR \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--max_seq_length=256 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=10.0 \
--output_dir=$FINE_TUNED_MODEL_10_epoch > $PY_FILE_DIR/logs/$VERSION/10_epoch.log