赞
踩
比赛数据是脱敏后得数据,所以无法用网上公开得权重去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
## 读取数据
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
##训练集和测试集造字典
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 =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。