transformer的擴(kuò)展

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,句子1segment embedding0,句子2segment embedding1,如果輸入只有一種句子,那么就只用一種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 extending DataProcessor class.
    • do_train: Include training step. Any one of do_train , do_eval or do_test have to been enabled.
      一些補(bǔ)充
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容