Training BERT


Process

  • Create Tokenizer
  • Make Dataset
  • NSP(Next Sentence Prediction)
  • Masking
  • Training


    前に習った内容とはちょっと逆なので書いておきましょう
    ドメイン専門化タスクでは、事前に訓練されたモデルを最適化するよりも、ドメイン専門化データのみを使用してパフォーマンスを再学習するほうが優れています.

    ref: https://huggingface.co/microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract
    これは最大PubMedのデータを用いて生理学雑誌のアーカイブからBERTを再学習した論文である.

    これはBERTたちの生理学に関する任務のScoreです.例えば、BC 5-chemは化学に関連する個体名識別タスクである.fine-tuningと比較して,生理学的関連データのみを用いてBERTを最初から学習した方が性能がよい.

    Data



    Dataset


    データをモデルにアクセスできる形式に変換します.
    BERTでは、次のようにデータを再生成し、モデルに格納します.
  • input ids:Token Embeddingで生成されたVocab Id.
  • token type ids:セグメント埋め込みにより作成されたセグメントId.
  • 位置符号化情報
  • target_seq_length


    https://github.com/huggingface/transformers/blob/5e3b4a70d3d17f2482d50aea230f7ed42b3a8fd0/src/transformers/data/datasets/language_modeling.py#L247
    GithubのBERTコード.ここで、BERTのEmbedding sizeを次のように調整します.
  • max num tokens:BERTに入れる最大token数
  • target_seq_length = max_num_tokens
    if random.random() < self.short_seq_probability:
         target_seq_length = random.randint(2, max_num_tokens)
    short seq確率によれば,確率上target seq確率はランダム値を有する.
    このように調節する理由は、モデルの汎用性のためです.max num tokenに従ってすべてのデータを学習すると、入力したtoken数がmax num tokenでない場合、モデルが正しく処理されない可能性があります.
    従って,確率的に最大埋め込みサイズを調整することによって柔軟なモデルを作成することを望んでいる.

    ぶんかつちょうせい


    https://github.com/huggingface/transformers/blob/5e3b4a70d3d17f2482d50aea230f7ed42b3a8fd0/src/transformers/data/datasets/language_modeling.py#L258
    258号線からはセグメントのコードを調整するためです.
    Datasetは、最大埋め込みサイズを満たすデータの作成に努力します.すなわち、「文1[SEP]文2」のtokensizeが欠けている場合、「文1+文2[SEP]文3+文4」も作成される.「もちろん、Segmentは2つです」文1+文2'はSegmentになります.
    このとき,コードはSegment A(第1セグメント)の長さをランダムに遮断する.その名の通り、ランダムな整数値が得られ、Segmentとして使用される.

    Truncation


    https://github.com/huggingface/transformers/blob/5e3b4a70d3d17f2482d50aea230f7ed42b3a8fd0/src/transformers/data/datasets/language_modeling.py#L293
    「SegmentA[SEP]SegmentB」は、最大埋め込みサイズを超える場合があります.これは、操作を遮断する必要がある条件です.
    次の操作を繰り返します.
  • セグメントAおよびBのいずれかをランダムに選択する.
  • 段の一番後ろのtokenを取り除きます.
  • token個数をチェックし、切り直す必要がある場合は1を返します.
  • Dataloader


    モデルにデータを渡す方法を決定します.
    BERTにとって、これはどのように化粧をするかの問題です.