huggingFace 中文模型实战——中文文本分类

学习了哔哩哔哩up主——兰斯诺特 视频后做的学习笔记
代码网址 https://github.com/lansinuote/Huggingface_Toturials
upz主推荐书:《基于Bert的自然语言处理模型实战》

hugging face是一个开源社区提供了开源的nlp模型数据集和其他的工具
http//huggingface.co/datasets 数据集地址
http//huggingface.co/models 代码地址
http//huggingface.co/docs 官方文档
包含热门的数据集比如glue imdb wikitext等
主要的模型
自回归 GPT2 Transformer-XL XLNet
自编码:BERT ALBERT ROBERT ELECTRA
seq to seq :BARE Pegasus T5
安装环境: 需要安装transformers datasets
1.字典和分词工具:tokenizer 加载tokenizer时要传入一个name
(1)如何加载预训练字典和分词方法
tokenizer = BertTokenizer.from_pretrained( pretrained_model_name_or_path=‘thunlp/Lawformer’, cache_dir=None, force_download=False,)预训练字典分词模型就加载进去了
#这里的pretrained_model要用huggingface中有的网址https://huggingface.co/models
sents = [ ‘’,]
tokenizer, sents
(2)简单的编码函数
#编码两个句子
out = tokenizer.encode( text=sents[0], text_pair=sents[1], truncation=True, padding=‘max_length’, add_special_tokens=True, max_length=30, return_tensors=None
print(out)
tokenizer.decode(out)

(3)增强编码函数:前面一样 加入return_token_type_ids=True, #返回attention_mask return_attention_mask=True, #返回special_tokens_mask ,return_special_tokens_mask=True, for k, v in out.items(): print(k, ‘:’, v) tokenizer.decode(out[‘input_ids’])
(4)批量编码 out = tokenizer.batch_encode_plus(batch_text_or_text_pairs=[(sents[0], sents[1]), (sents[2], sents[3])],…)
(5)字典操作 #获取字典 zidian = tokenizer.get_vocab(),#添加新词tokenizer.add_tokens(new_tokens=[‘月光’, ‘希望’])
#添加新符号 tokenizer.add_special_tokens({‘eos_token’: ‘[EOS]’})
2.数据集的操作
(1)加载数据集 from datasets import load_datasets #加载数据dataset = load_dataset(path=‘seamew/ChnSentiCorp’, split=‘train’)
(2)操作函数 排序和打乱 #sort sorted_dataset = dataset.sort(‘label’)print(sorted_dataset[‘label’][:10])print(sorted_dataset[‘label’][-10:])
#shuffle#打乱顺序shuffled_dataset = sorted_dataset.shuffle(seed=42)
#select dataset.select([0, 10, 20, 30, 40, 50])
#filterdef f(data): return data[‘text’].startswith(‘选择’) start_with_ar = dataset.filter(f) len(start_with_ar), start_with_ar[‘text’]
#train_test_split, 切分训练集和测试集dataset.train_test_split(test_size=0.1)
from datasets import load_from_disk
dataset = load_dataset(path=‘seamew/ChnSentiCorp’, split=‘train’)
#保存和加载dataset.save_to_disk(“./”)
dataset = load_from_disk(“./”)
#导出为其他格式
#dataset.to_csv(‘./datasets.csv’)
#dataset.to_json(‘./datasets.json’)
实战任务:用bert实现中文分类问题
第一步首先要定义数据集
本次实战应用的数据集是ChnSentiCrop 情感分类数据集可以通过huggingface网站上导入具体实现过程是通过定义了一个Dataset的类来继承torch加载数据集的方法
通过load_dataset 将huggingface上的ChnSentiCorp数据集加载进入我们的模型,这里我们返回的是dataset的长度 还有text 和label
在这里插入图片描述
第二步加载tokenizer 来加载字典和分词工具本次任务使用的分词工具是bert-base-chinese 和我们的预训练模型相匹配
在这里插入图片描述
第三步 定义了一个批处理函数collate_fn,因为在训练和测试的时候我们需要对数据集中的数据一批一批的处理这些数据在这个函数中我们要进行分词和编码,然后把分词以后的结果input_ids, attention_mask, token_type_ids, labels取出来,用于后续处理这些数据 这里这个函数返回的是input_ids, attention_mask, token_type_ids, labels这些数据
在这里插入图片描述
第四步定义一个数据加载器 并查看数据样例,每个批次有16个数据把批处理函数放入数据加载器,
这里input_ids, attention_mask维度是16500(之前定义分词最大长度是500句子长度 不够的在后面补0)这里loader长度为600是因为一共有9600个数据分为16批次以后数据被分成了600组 需要加载600次
在这里插入图片描述
第五步加载中文模型 这里我们用的中文模型是bert-base-Chinese这里我们先不进行训练不计算梯度把预训练模型给冻结住,只训练下游任务模型对模型预训练本身参数不做调整( param.requires_grad_(False))
计算的结果是一个16
500(分词长度)768(词编码维度把每一个词编码为维度768维度的向量)
在这里插入图片描述
第六步我们定义一下下游任务模型 这个Model非常简单,只应用到了一个全连接神经网络torch.nn.Linear(768, 2)768接上游任务的输出16
500768,我们拿预训练模型进行一个计算抽取数据当中的特征input_ids=input_ids,attention_mask,
token_type_ids,然后把抽取出来的特征放到全连接神经网络中进行计算,这个特征结果只需要用第零个特征[cls]因为在bert中cls通过transformer attention 机制已经包含了一个句子所有的特征[cls]可用于分类任务,输出是维度一个16
2的结果 也就是说模型把句子分为了两类 1 /0
在这里插入图片描述

最后一步训练下游任务模型 然后在测试集上进行测试,这里优化器我们选择的是AdamW 损失函数应用的是CrossEntropyLoss()把输出的out预测值和标签值labels进行CrossEntropyLoss计算,然后进行反向传播梯度计算
在这里插入图片描述
训练数据实验结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【资源介绍】 课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip课程作业-基于Huggingface文本分类python源码.zip 课程作业-基于Huggingface文本分类python源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
好的,我很乐意为你解答关于huggingface中文模型实战的问题。 Hugging Face是一个知名的自然语言处理工具库,提供了丰富的预训练模型和API接口,方便用户进行各种NLP任务的实现。下面是一些关于huggingface中文模型实战的建议: 1. 了解huggingface中文模型的种类和使用方式。目前huggingface中提供了BERT、GPT等多种中文预训练模型,可以根据具体任务需要选择合适的模型进行使用。同时,huggingface也提供了Python API接口和命令行工具,方便用户进行模型的加载和使用。 2. 准备数据集并进行预处理。在进行中文模型实战之前,需要准备好对应的数据集,并进行数据清洗、分词、标注等预处理工作,以便于模型的训练和测试。 3. 进行模型的训练和微调。根据具体任务需要,可以选择使用已经预训练好的模型进行微调,也可以从头开始对模型进行训练。在进行模型训练和微调时,需要注意调整好超参数、选择合适的优化器和损失函数,以取得更好的效果。 4. 进行模型的评估和推理。在模型训练完成后,需要对模型进行评估和推理,以验证模型的性能和效果。可以通过计算损失函数、计算准确率等方式进行模型评估,也可以通过与真实数据进行对比,观察模型的输出结果。 总的来说,huggingface提供了便捷的中文NLP工具,并且在中文模型的预训练和微调方面也有丰富的资源和经验。如果你想要进行中文NLP任务的实践,可以尝试使用huggingface来快速实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值