天池零基础入门NLP竞赛实战:Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类

Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类

因为天池这个比赛的数据集是脱敏的,无法利用其它已经预训练好的模型,所以需要针对这个数据集自己从头预训练一个模型。

我们利用Huggingface的transformer包,按照自己的需求从头开始预训练一个模型,然后将该模型应用于下游任务。

完整代码见:NLP-hands-on/天池-零基础入门NLP at main · ifwind/NLP-hands-on (github.com)

注意:利用Huggingface做预训练需要安装wandb包,如果报错可参考:[wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(key=[your_api_key\])_](https://blog.youkuaiyun.com/hhhhhhhhhhwwwwwwwwww/article/details/116124285)

预训练模型

利用Huggingface的transformer包进行预训练主要包括以下几个步骤:

  1. 用数据集训练Tokenizer;
  2. 加载数据及数据预处理;
  3. 设定预训练模型参数,初始化预训练模型;
  4. 设定训练参数,加载训练器;
  5. 训练并保存模型。

用数据集训练Tokenizer

Tokenizer是分词器,分词方式有很多种,可以按照空格直接切分、也可以在按词组划分等,可以查看HuggingFace关于tokenizers的官方文档。

Huggingface中,Tokenizer的训练方式为:

  1. 根据tokenizers.models实例化一个Tokenizer对象tokenizer
  2. tokenizers.trainers中选模型相应的训练器实例化,得到trainer
  3. tokenizers.pre_tokenizers 选定一个预训练分词器,对tokenizer的预训练分词器实例化;
  4. 利用tokenizer.train()结合trainer对语料(注意,语料为一行一句)进行训练;
  5. 利用tokenizer.save()保存tokenizer

因为天池这个比赛的数据集是脱敏的,词都是用数字进行表示,没有办法训练wordpiece等复杂形式的分词器,只能用空格分隔,在wordlevel进行分词。

因此,我们利用tokenizers.models中的WordLevel模型,对应tokenizers.trainers中的WordLevelTrainer,选择预训练分词器为Whitespace训练分词器。

另外,在训练Tokenizer时,可以利用上全部的语料(包括训练集和最终的测试集)。

完整代码如下:

import joblib
from config import *
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
import os
def data_preprocess():
    rawdata = pd.read_csv(data_file, sep='\t', encoding='UTF-8')
    #用正则表达式按标点替换文本
    import re
    rawdata['words']=rawdata['text'].apply(lambda x: re.sub('3750|900|648',"",x))
    del rawdata['text']

    #预测
    final_test_data = pd.read_csv(final_test_data_file, sep='\t', encoding='UTF-8')
    final_test_data['words'] = final_test_data['text'].apply(lambda x: re.sub('3750|900|648',"",x))
	del final_test_data['text']
    all_value= rawdata['words'].append(final_test_data['words'])
    all_value.columns=['text']
    all_value.to_csv('../alldata.csv',index=False)

data_preprocess()

from tokenizers import Tokenizer
from tokenizers.models import BPE,WordLevel
tokenizer= Tokenizer(WordLevel(unk_token=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值