tensorflow2调用huggingface transformer预训练模型

  • 一点废话
    • huggingface简介
    • 传送门
    • pipline
    • 加载模型
    • 设定训练参数
    • 数据预处理
    • 训练模型
    • 结语

一点废话

好久没有更新过内容了,开工以来就是在不停地配环境,如今调通模型后,对整个流程做一个简单的总结(水一篇)。

现在的NLP行业几乎都逃不过fune-tuning预训练的bert或者transformer这一关,按照传统方法,构建整个模型,在processer里传数据,在util里配路径,在bert_fine_tune.sh里炼丹,说实话很麻烦,面对很多不需要复杂下游任务的任务,直接调用预训练模型是最便捷高效的方法,著名的huggingface正是为此而生的,但它整体面向pytorch,如何有效得在tensorflow2中使用这些模型,对新员工和新入学的盆友们是一件很头疼的事情,那么具体应该做些什么呢?往下看。

huggingface简介

Hugging face原本是一家聊天机器人初创服务商 https://huggingface.co/ 专注于NLP技术,拥有大型的开源社区。尤其是在github上开源的自然语言处理,预训练模型库 Transformers,已被下载超过一百万次,github上超过24000个star。Transformers 提供了NLP领域大量state-of-art的 预训练语言模型结构的模型和调用框架。(https://github.com/huggingface/transformers)

传送门

https://huggingface.co/models
在这里有近年来较为成熟的bert系模型,可以在目录中直接下载预训练的模型使用

pipline

pip install transformers==4.6.1
pip install tensorflow-gpu==2.4.0

需要注意的是,transforers包所需的tensorflow版本至少为2.2.0,而该版本对应的CUDA版本可能不同,如笔者使用的2.4.0版本tensorflow对应的CUDA是11版本,在此祭奠配cuda环境浪费的两天时间……

加载模型

下载好的完整模型是这样的,其中:
config 定义模型参数,如layer_num、batch等
tf_model.h5 tensorflow2模型文件
tokenizer 文本处理模块
vocab 词典

记录好模型所在的目录,然后打开你的编辑器,导入所需的包,这里以序列分类为例,其他下游任务参考官方文档https://huggingface.co/transformers/model_doc/bert.html

import tensorflow as tf
import transformers as ts
from transformer import BertTokenizer, TFBertForSequenceClassification
import pandas as pd

设定训练参数

data_path = 'YOUR_DATA_PATH'
model_path = 'YOUR_MODEL_PATH'
config_path = 'YOUR_CONFIG_PATH'
num_labels = 10
epoch = 10
tokenizer = BertTokenizer.from_pretrained(model_path)

数据预处理

涉及到数据的读入和重组,注意数据格式一定要符合bert模型所需的格式

def data_incoming(path):x = []y = []with open(path, 'r') as f:for line in f.readlines():line = line.strip('\n')line = line.split('\t')x.append(line[0])y.append(line[1])df_row = pd.DataFrame([x, y], index=['text', 'label'])df_row = df_row.Tdf_label = pd.DataFrame({"label": ['YOUR_LABEL'], 'y': list(range(10))})output = pd.merge(df_row, df_label, on='label', how='left')return outputdef convert_example_to_feature(review):return tokenizer.encode_plus(review,max_length=256,pad_tp_max_length=True,return_attention_mask=True,truncation=True)def map_example_to_dict(input_ids, attention_mask, token_type_ids, label):return {"input_ids": input_ids,"token_type_ids": token_type_ids,"attention_mask": attention_mask,}, labeldef encode_example(ds, limit=-1):input_ids_list = []token_type_ids_list = []attention_maks_list = []label_list = []if limit > 0:ds.take(limit)for index, row in ds.iterrows():review = row["text"]label = row['y']bert_input = convert_example_to_feature(review)input_ids_list.append(bert_input["input_ids"])token_type_ids_list.append(bert_input['token_type_ids'])attention_maks_list.append(bert_input['attention_maks'])label_list.append([label])return tf.data.Dataset.from_tensor_slices((input_ids_list, token_type_ids_list, attention_maks_list, label_list)).map(map_example_to_dict)

具体内容就不再赘述了,已经写得很详细了,实在不懂的话……说不定我还有时间看评论

训练模型

def main():train = data_incoming(data_path + 'train.tsv')test = data_incoming(data_path + 'test.tsv')train = encode_example(train).shuffle(100000).batch(100)test = encode_example(test).batch(100)model = TFBertForSequenceClassification(model_path, num_labels=num_labels)optimizer = tf.keras.optimizers.Adam(1e-5)model.compile(optimizer=optimizer, loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))model.fit(train, epochs=epoch, verbose=1, validation_data=test)if __name__ == '__main__':main()

结语

呐,就是这么简单的一小块代码,足以让你的gpu煎鸡蛋了,然鹅笔者再摸鱼可能就要被组长裹进鸡蛋里煎了,就先到这吧,下一期……有没有还不晓得,996不配有空闲

tensorflow2调用huggingface transformer预训练模型相关推荐

  1. 国内HuggingFace,预训练模型镜像使用

    Hugging Face Transformers 是自然语言处理领域的重要开源项目,提供了基于通用架构(如 BERT,GPT-2,RoBERTa)的数千个预训练模型,并提供了 PyTorch 和 T ...

  2. 多模态语义检索 | 基于 MetaSpore 快速部署 HuggingFace 预训练模型

    首先,附上 Github 链接MetaSpore:https://github.com/meta-soul/MetaSpore,可搜索公众号元灵数智,在底部菜单了解我们 - 用户交流获取官方技术交流群 ...

  3. 2021 AI技术盘点:预训练模型5大进展

    [专栏:前沿进展]2021年已进入尾声,回顾一年来人工智能领域的发展历程,有众多瞩目的技术事件发展.其中,预训练模型无疑是2021年的重点发展领域.年初的Switch Transformer开启万亿参 ...

  4. 一大批中文(BERT等)预训练模型等你认领!

    作者丨Zhe Zhao 机构丨RUC DBIIR & Tencent Research 研究方向丨自然语言处理 项目简介 预训练模型已经成为了 NLP 领域最重要的资源之一.当我们拿到一个 N ...

  5. Day03『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取

    Day03 词法分析作业辅导 本教程旨在辅导同学如何完成 AI Studio课程--『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取 课后作业. 1. 更换预训练模型 在PaddleNLP ...

  6. 8种优秀预训练模型大盘点,NLP应用so easy!

    https://www.toutiao.com/a6674855848902132235/ 大数据文摘出品 编译:李雷.蔡婕 如今,自然语言处理(NLP)可谓遍地开花,可以说正是我们了解它的好时机. ...

  7. 深入探究ConvNets vs. Transformers,哪种预训练模型的可迁移性更好?

    关注公众号,发现CV技术之美 本文为52CV粉丝投稿. 论文:ConvNets vs. Transformers: Whose Visual Representations are More Tran ...

  8. 预训练模型应用工具 PaddleHub情感分析、对话情绪识别文本相似度

    文章目录 1. 预训练模型的应用背景 1.1 多任务学习与迁移学习 1.2 自监督学习 2. 快速使用PaddleHub 2.1 通过Python代码调用方式 使用PaddleHub 2.1.1 CV ...

  9. PaddlePaddle模型资源之一:预训练模型应用工具 PaddleHub

    文章目录 1. 预训练模型的应用背景 1.1 多任务学习与迁移学习 1.2 自监督学习 2. 快速使用PaddleHub 2.1 通过Python代码调用方式 使用PaddleHub 2.1.1 CV ...

最新文章

  1. 效率思维模式与Zombie Scrum
  2. JS动态加载脚本及对动态脚本内方法的调用
  3. Bootstrap树控件(Tree控件组件)使用经验分享
  4. MySQL在单表上创建视图
  5. python简单目标检测代码_Python Opencv实现单目标检测的示例代码
  6. Hadoop生态hive(三)Hive QL介绍
  7. docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像
  8. 《社交网站界面设计(原书第2版)》——1.12 传感器在交互中的作用
  9. docker 下使用 Hyperf(win10)
  10. Windows系统安装Redis(详细)
  11. Excel VBA函数和过程调用方法总结(跨文件调用函数和过程)
  12. css —— 写炫酷动画
  13. 使用medusa进行ssh爆破
  14. 史上最全的数据库面试题,面试前刷一刷!
  15. 从零开始Tableau | 10.表计算-基础
  16. 装在笔记本里的私有云环境:网络存储篇(中)
  17. win11 Azure DK环境
  18. Java实现邮箱发送验证码(以QQ邮箱为例)
  19. 马氏距离 vs 欧氏距离
  20. 计算机毕业设计SSM道路桥梁工程知识文库系统【附源码数据库】

热门文章

  1. overleaf服务端_部署私有在线Latex编辑器:Overleaf/sharelatex,写毕设神器
  2. 2019-12-06 数字信号处理的学科结构
  3. python2.7+pyqt4实现记事本基本功能
  4. CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
  5. 从源代码角度分析ViewStub 疑问与原理
  6. 0421 版本适配和本地化
  7. IOS面试题--001
  8. JavaScript公共运行库
  9. 初学者学MvcMovie遇到的问题解决办法
  10. 去培训机构参加IT培训值不值