bert
-
bert
是有一个固定的词表(不把words
当成tokens
,而是将wordpieces
(是一种subword
)当做tokens
)中的,预训练模型中有词表中的embedding
和所有层的参数。 -
base
的是12
层的encoder
,和transformer
中的encoder
只有在模型输出部分不一样,其他地方全都一样。
- 在分类任务中,输入的第一个符号是
[CLS]
,我们只用将这个位置的embedding(768维)
传递给用于分类的单层前向神经网络即可,因为是fine-turn
所以用于分类的网络要尽可能的简单。
masked language model
- 按理说因为有
self-attention
的原因,每个单词都能看到其他单词的信息,因此transformer
不能当做语言的encoder
的(根据中心词预测其他词,或者根据其他词预测中心词),因此作者想到的解决方法是mask
掉这个词的位置,然后预测出这个mask
掉的词。
双句子任务
- 有一些任务的输入时两个句子(比如说是判断两个句子是不是互为复述),因此需要训练过程中加入两个句子来训练的任务,
bert
使用的方法是两个句子中间加入[sep]
进行分割,预训练的任务也是,预测A
句子是否在B
句子的前面,这有就能捕获两个句子之间的依赖关系了。
- 同时要注意的是为了适用于双语的句子,
bert
加入了segment embeddings
,句子1
的segment embedding
是0
,句子2
的segment embedding
是1
,如果输入只有一种句子,那么就只用一种segment embedding
其他的使用bert的方式
- 使用
encoder
的不同的位置用于不同的任务。
- 也可以使用
bert
提取了句子中每个词的表示,然后用于你自己的任务中,就像命名实体识别一样。
- 但是使用哪些
embedding
是最好的?还是无法得知的,论文中给出了命名实体识别任务中的6
种使用embedding
的方式,可以看到,concat
最后四层的embedding
的效果是最好的。
fineturn时候的参数
- 这些参数再所有
task
上都表现的不错-
Batch Size
:16, 32
-
Learning Rate
:5e-5
,3e-5
,2e-5
-
Number of epochs
:3, 4
-
lr 3e-5,epoch 4 ,bs 32
-
finetune
的脚本
export BERT_BASE_DIR=/downloaded_model_path/bert
export GLUE_DIR=/downloaded_data_path/glue
export BERT_OUTPUT_DIR=/trained/model/bert/
python run_classifier.py \
--task_name=MRPC \
--do_train=true \
--do_eval=true \
--data_dir=$GLUE_DIR/MRPC \
--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=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=$BERT_OUTPUT_DIR
用bert提取单词的表示(像elmo一样)
echo 'Who was Jim Henson ? ||| Jim Henson was a puppeteer' > input.txt
python extract_features.py \
--input_file=input.txt \
--output_file=$BERT_OUTPUT_DIR/output.jsonl \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--layers=-1,-2,-3,-4 \
--max_seq_length=128 \
--batch_size=8
- 得到的文件里面就是对应单词的各个层的参数。
- features
- token: Token value (e.g. Who)
- layers
- index: Layer number (from -1 to -4) per token
- values: Vector values. Default model dimension is 768
- 一些超参数,使用
bert
训练自己的模型的时候可能会用到-
data_dir
: Data directionary -
task_name
: Specific what task do you use. Specific tasks processors are ready for use. Possible task_name are“cola”
,“mnli”
,“mrpc”
and“xnli”
. You can implement your own data processor by extendingDataProcessor class
. -
do_train
: Include training step. Any one ofdo_train
,do_eval
ordo_test
have to been enabled.
一些补充
-