06_Bert预加载模型与迁移学习

在这里插入图片描述

博文配套视频课程:自然语言处理与知识图谱


Bert预处理模型

前面说过在深度学习中层次搭建,每层多少个神经元到目前为止没有标准答案。只能根据拿到的数据不断尝试。而且在NLP中语料库也是一个难点 (中英文、不同行业)。Google开源的Bert给了我们比较好的解决方案:让训练好的模型直接拿来就用避免重复造轮子。并且可以在原有的基础上通过"微调"方式来进行训

Bert可以完成几乎所有的自然语言处理功能,单击官网索取模型与API。常见的自然语言处理功能有如下三个方向:

  1. 句子级别的任务:句子情感分析,分类
  2. 单句子标注任务:实体识别
  3. 问答任务:通过问题检索段落中正确回答的位置和长度

Bert官网演示

在这里插入图片描述

Hello Bert

from_pretrained函数用来加载各种已经编译好的预处理模型,可以通过上面官网提供的名称索取。

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
input_ids = tokenizer.encode('欢迎来到Bert世界', return_tensors='tf')
print(input_ids)

采用Bert重构评论分类

  1. 当数据量比较大时可以采用tqdm来加载进度条
  2. 第一次使用Bert的预处理框架需要通过官网下,需要少许时间
from tqdm import tqdm  # 循环中添加进度条
import time

# for i in tqdm([1,2,3,4,5]):
#     time.sleep(0.5)

x = [1,2,3]
print(x[:10] + [0] * -20)

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

labels = []
train_list = []

with open("../data/ChnSentiCorp.txt",mode='r',encoding='UTF-8') as file:
    for line in tqdm(file.readlines()):  # 读取txt文件
        line = line.strip().split(",")   # 将每行数据与','进行分隔
        labels.append(int(line[0]))   # 读取分类label
        text = line[1]  # 获取每行文本
        token = tokenizer.encode(text)   # 80长度对句子进行截取
        token = token[:80] + [0] * (80-len(token))
        print(len(token),token)
        train_list.append(token)

import numpy as np
labels = np.array(labels)
train_list = np.array(train_list)

# 使用Bert框架完成评论分类
from transformers import TFBertForSequenceClassification
model = TFBertForSequenceClassification.from_pretrained("bert-base-chinese",num_labels=2)
model.compile(loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.summary()

result = model.fit(x=train_list,y=labels,epochs=10)
print(result.history)
# model.evaluate()

由于Bert默认训练好的神经元达到上亿,因此训练和测试结果可能需要二十几个小时,大家可以适当调整循环次数这样可以尽快出结果。代码执行完毕输出结果如下:


Downloading: 100%|██████████| 478M/478M [03:00<00:00, 2.65MB/s]
Model: "tf_bert_for_sequence_classification"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
bert (TFBertMainLayer)       multiple                  102267648 
_________________________________________________________________
dropout_37 (Dropout)         multiple                  0         
_________________________________________________________________
classifier (Dense)           multiple                  1538      
=================================================================
Total params: 102,269,186
Trainable params: 102,269,186
Non-trainable params: 0
_________________________________________________________________

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值