bert
-
bert是有一個(gè)固定的詞表(不把words當(dāng)成tokens,而是將wordpieces(是一種subword)當(dāng)做tokens)中的,預(yù)訓(xùn)練模型中有詞表中的embedding和所有層的參數(shù)。 -
base的是12層的encoder,和transformer中的encoder只有在模型輸出部分不一樣,其他地方全都一樣。
- 在分類任務(wù)中,輸入的第一個(gè)符號是
[CLS],我們只用將這個(gè)位置的embedding(768維)傳遞給用于分類的單層前向神經(jīng)網(wǎng)絡(luò)即可,因?yàn)槭?code>fine-turn所以用于分類的網(wǎng)絡(luò)要盡可能的簡單。
masked language model
- 按理說因?yàn)橛?code>self-attention的原因,每個(gè)單詞都能看到其他單詞的信息,因此
transformer不能當(dāng)做語言的encoder的(根據(jù)中心詞預(yù)測其他詞,或者根據(jù)其他詞預(yù)測中心詞),因此作者想到的解決方法是mask掉這個(gè)詞的位置,然后預(yù)測出這個(gè)mask掉的詞。
雙句子任務(wù)
- 有一些任務(wù)的輸入時(shí)兩個(gè)句子(比如說是判斷兩個(gè)句子是不是互為復(fù)述),因此需要訓(xùn)練過程中加入兩個(gè)句子來訓(xùn)練的任務(wù),
bert使用的方法是兩個(gè)句子中間加入[sep]進(jìn)行分割,預(yù)訓(xùn)練的任務(wù)也是,預(yù)測A句子是否在B句子的前面,這有就能捕獲兩個(gè)句子之間的依賴關(guān)系了。
- 同時(shí)要注意的是為了適用于雙語的句子,
bert加入了segment embeddings,句子1的segment embedding是0,句子2的segment embedding是1,如果輸入只有一種句子,那么就只用一種segment embedding
其他的使用bert的方式
- 使用
encoder的不同的位置用于不同的任務(wù)。
- 也可以使用
bert提取了句子中每個(gè)詞的表示,然后用于你自己的任務(wù)中,就像命名實(shí)體識別一樣。
- 但是使用哪些
embedding是最好的?還是無法得知的,論文中給出了命名實(shí)體識別任務(wù)中的6種使用embedding的方式,可以看到,concat最后四層的embedding的效果是最好的。
fineturn時(shí)候的參數(shù)
- 這些參數(shù)再所有
task上都表現(xiàn)的不錯(cuò)-
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
- 得到的文件里面就是對應(yīng)單詞的各個(gè)層的參數(shù)。
- 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
- 一些超參數(shù),使用
bert訓(xùn)練自己的模型的時(shí)候可能會用到-
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_evalordo_testhave to been enabled.
一些補(bǔ)充
-








