当前位置:   article > 正文

使用transformers从头训练Bert_重头预训练bert

重头预训练bert

比赛数据是脱敏后得数据,所以无法用网上公开得权重去finetune,于是自己从头训练一个BERT,为什么选择用transformers,因为它实在太酷了。如果不了解transformers,请看链接所以我不想再从github上找BERT代码,还有一个原因是这次比赛中也许要预训练好多模型,所以使用transformers预训练bert模型后,花费较少成本预训练其他模型了。
本次预训练模型主要解决两个问题,一个是transformer使用哪个API去预训练,一个是自己构建词典。直接放代码吧。由于代码太多,把一部分放在了百年不用的github上,finetune代码(https://github.com/BlackHorseQ/Use-transformers-train-Bert-from-scratch)


import pandas as pd
from pathlib import Path
from torch import nn
from tokenizers import ByteLevelBPETokenizer
from tqdm import tqdm
from transformers import BertConfig, BertForPreTraining
from torch.utils.data import Dataset, DataLoader
import random
import numpy as np
import torch
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
## 读取数据
train = pd.read_csv('gaiic_track3_round1_train_20210228.tsv',sep='\t', names=['text_a', 'text_b', 'label'])
test = pd.read_csv('gaiic_track3_round1_testA_20210228.tsv',sep='\t', names=['text_a', 'text_b', 'label'])
test['label'] = 0
  • 1
  • 2
  • 3
  • 4
##训练集和测试集造字典
from collections import defaultdict
def get_dict(data):
    words_dict = defaultdict(int)
    for i in tqdm(range(data.shape[0])):
        text = data.text_a.iloc[i].split() + data.text_b.iloc[i].split()
        for c in text:
            words_dict[c] += 1
    return words_dict
test_dict = get_dict(test)
train_dict = get_dict(train)
word_dict = list(test_dict.keys()) + list(train_dict.keys())
word_dict =
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/200337
推荐阅读
相关标签
  

闽ICP备14008679号