Boostcamp week11 day2 MRC with BERT, T5


Extraction based MRC with BERT
サンプルのKorQuadデータに対してBERTのコードを微調整し,必要に応じて任意の数の学習データを選択できる.
Point 1. Huggingfaceのクイズモデルをチェック
Autoclassの
  • Huggingfaceでのロール
  • qa出力形式
  • 前処理フロー
    (特にspanのインポート部分と答えがspanを超えているかどうかを確認します)
  • utils_qa.pyの後処理関数
  • Point 2. 学習したモデルを読み込み、モデルを評価
  • HuggingFace Transformerは学習したモデル
  • をどのように読み込みますか?
  • 型番評価
  • Extra Mission. 提供されるベースラインコードは、学習大会で使用されるKLUE MRCデータのBERT部分を含む.大会で使用したKLUE MRCデータに対してBERTチューニングを行い,性能を比較した.△EM 46.6%/F 1が59.9%に近づくと、これは正常な学習です.
    Generation based MRC with T5
    GenerationベースのMRCは,指紋に正解が存在する必要はなく,指紋から正解を見つけたExtractionとは異なり,正解を生成する方式である.代表的なSeq 2 SeqモデルT 5を用いて、生成されたMRCおよびT 5に基づく.
    Code Review
  • 需要の設定
    Postprocessにnltkのpunktを導入します.
  • # Requirements
    !pip install tqdm==4.48.0 -q
    !pip install datasets==1.4.1 -q
    !pip install transformers==4.5.0 -q
    !pip install sentencepiece==0.1.95 -q
    !pip install nltk -q
    
    import nltk
    nltk.download('punkt')
  • データセットをダウンロードし、Metric
  • をダウンロードします.
    from datasets import load_dataset
    from datasets import load_metric
    
    datasets = load_dataset("squad_kor_v1")
    metric = load_metric("squad")
  • モデルの読み込み
    seq 2 seqモデルなので、max_train_samplesを使用します.
  • # T5는 seq2seq 모델이므로 model을 불러올 때 AutoModelForSeq2SeqLM을 사용해야 함
    config = AutoConfig.from_pretrained(
        model_name,
        cache_dir=None,
    )
    tokenizer = AutoTokenizer.from_pretrained(
        model_name,
        cache_dir=None,
        use_fast=True,
    )
    model = AutoModelForSeq2SeqLM.from_pretrained(
        model_name,
        config=config,
        cache_dir=None,
    )
  • 前処理
    T 5は、AutoModelFroSeq2SeqLMをEOSトークンとして使用する.そこで、入力値にend tokenを加える前処理を実行する.
  • inputs = [f"question: {q}  context: {c} </s>" for q, c in zip(examples["question"], examples["context"])]
    targets = [f'{a["text"][0]} </s>' for a in examples['answers']]

  • 次に、Tokenizerを使用して文をマークします.パラメータとしてMaxlengthまたはpaddingまたはカットオフを決定します.結果として、</s>example_idの値を有する辞書形式のmodel inputsが返される.

  • 最後に、上記で定義した前処理関数をデータセットに適用します.(train, validation both)

  • data collator
    HuggingfaceのlabelおよびdatacollatorおよびTrainerが呼び出される.
    data collatorの場合、talk nameオブジェクトやモデル、trainingArgumentsなどをパラメータとします.

  • Postprecessing, Compute_metrics
    入力値はlabel_pad_token_idpredsです.つまり、私が予測したAnswerテキストと実際の正解テキストを入力します.
  • まずstripでスペースを削除し、nltkのsend tokenize関数を使用して各文を「/n」(改行)
  • に加算します.
  • Metricの場合、labels(preds,labels)として受信され、batch decode関数を使用してマークされた入力値が復号される.このようなdecoded predsおよびdecodeラベルを使用して、上にロードされたメトリックの計算計算によって結果を計算および返します.