bert结构模型的转换及[unusedxx]的不拆token

这篇具有很好参考价值的文章主要介绍了bert结构模型的转换及[unusedxx]的不拆token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前沿

业界主流的模型结构包括tensorflow和pytorch,很多时候两者的模型需要转换成中间格式,比如onnx,另外在tokenized的时候需要保留[unusedx]不被分词,但默认的是会分词的,这里记录一下处理方式。

torch格式转onnc

torch转onnx方法很多,这里介绍两种方式

方法1

# model_path为torch保存的文件,onnx_path为保存的文件路径
def lower_level(model_path, onnx_path="bert_std.onnx"):
    # load model and tokenizer
    added_token = ["[unused%s]" % i for i in range(100)]
    print("added_token:", added_token[:10])
    tokenizer = AutoTokenizer.from_pretrained(model_path, additional_special_tokens=added_token)
    dummy_model_input = tokenizer("hello bert", return_tensors="pt")
    unused_input = tokenizer("hello bert[unused17]", return_tensors="pt")

    print("dummy_model_input", dummy_model_input)
    print("unused_input:", unused_input)
    model = AutoModelForMaskedLM.from_pretrained(model_path)

    # export
    torch.onnx.export(
        model,
        tuple(dummy_model_input.values()),
        f=onnx_path,
        input_names=['input_ids', 'attention_mask'],
        output_names=['logits'],
        dynamic_axes={'input_ids': {0: 'batch_size', 1: 'sequence'},
                      'attention_mask': {0: 'batch_size', 1: 'sequence'},
                      'logits': {0: 'batch_size', 1: 'sequence'}},
        do_constant_folding=True,
        opset_version=13,
    )
    print("over")

方法2

def middle_level(model_path, onnx_path="bert_std.onnx"):
    from pathlib import Path
    import transformers
    from transformers.onnx import FeaturesManager
    from transformers import AutoConfig, AutoTokenizer, AutoModelForSequenceClassification

    # load model and tokenizer
    feature = "sequence-classification"
    model = AutoModelForSequenceClassification.from_pretrained(model_path)
    tokenizer = AutoTokenizer.from_pretrained(model_path)

    # load config
    model_kind, model_onnx_config = FeaturesManager.check_supported_model_or_raise(model, feature=feature)
    onnx_config = model_onnx_config(model.config)

    # export
    onnx_inputs, onnx_outputs = transformers.onnx.export(
        preprocessor=tokenizer,
        model=model,
        config=onnx_config,
        opset=13,
        output=Path(onnx_path)
    )
    print("onnx_inputs:", onnx_inputs)
    print("onnx_outputs:", onnx_outputs)
    print("over")

保留[unused9]不分词

transformers模块

在AutoTokenizer.from_pretrained增加additional_special_tokens参数,如:

    added_token = ["[unused%s]" % i for i in range(100)]
    print("added_token:", added_token[:10])
    tokenizer = AutoTokenizer.from_pretrained(model_path, additional_special_tokens=added_token)

完整代码如下:文章来源地址https://www.toymoban.com/news/detail-488209.html

def lower_level(model_path, onnx_path="bert_std.onnx"):
    # load model and tokenizer
    added_token = ["[unused%s]" % i for i in range(100)]
    print("added_token:", added_token[:10])
    tokenizer = AutoTokenizer.from_pretrained(model_path, additional_special_tokens=added_token)
    dummy_model_input = tokenizer("hello bert", return_tensors="pt")
    unused_input = tokenizer("hello bert[unused17]", return_tensors="pt")

    print("dummy_model_input", dummy_model_input)
    print("unused_input:", unused_input)
    model = AutoModelForMaskedLM.from_pretrained(model_path)
    print("over")

tensorflow模块

		preprocessor = hub.load(bert_preprocess_path)
		okenize = tfm.nlp.layers.BertTokenizer(vocab_file=vocab_path, lower_case=True, 
                tokenizer_kwargs=dict(preserve_unused_token=True, token_out_type=tf.int32))

        bert_pack_inputs = hub.KerasLayer(
            preprocessor.bert_pack_inputs,
            arguments=dict(seq_length=seq_length))  # Optional argument.
       encoder = TFAutoModel.from_pretrained(checkpoint_dir, from_pt=True)

到了这里,关于bert结构模型的转换及[unusedxx]的不拆token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BERT tokenizer 增加全角标点符号

    bert 的词表,哪怕是 bert-base-chinese,对中文全角标点的支持不是很好 因此在微调bert时,需要在 vocab.txt 文件里把这些标点加上。直接替换 [unused] token 即可

    2024年04月26日
    浏览(37)
  • 预训练Bert添加new token的问题

    最近遇到使用transformers的AutoTokenizer的时候,修改vocab.txt中的[unused1]依然无法识别相应的new token。 实例: 我将[unused1]修改为了[TRI],句子中的[TRI]并没有被整体识别,而是识别为了[,T,RI,]。这明显是有问题的。 若去掉[TRI]的方括号,问题就消失了。 所以可以认定,Bert对带有方

    2024年02月09日
    浏览(41)
  • 【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”

    本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题: Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation 链接:Looking to listen at the cocktail party: a speaker-independent audio-visual model for speech separation: ACM Transactions on Graphics: Vol 37, No 4 译者注

    2024年02月14日
    浏览(48)
  • [算法前沿]--019-医学AIGC大模型的构建

    基于主动健康的主动性、预防性、精确性、个性化、共建共享、自律性六大特征[1],华南理工大学未来技术学院-广东省数字孪生人重点实验室开源了中文领域生活空间主动健康大模型基座ProactiveHealthGPT,包括:(1) 经过千万规模中文健康对话数据指令微调的生活空间健康大模

    2024年02月10日
    浏览(41)
  • 【使用 BERT 的问答系统】第 5 章 :BERT模型应用:问答系统

         🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】 ​  🖍forew

    2024年02月01日
    浏览(36)
  • 【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解

    Bert模型的输入 context 张量需要满足以下要求: 张量形状: context 应为二维张量,形状为 [batch_size, sequence_length] ,其中 batch_size 是输入样本的批量大小, sequence_length 是输入序列的长度。 数据类型: context 的数据类型应为整数类型,如 torch.LongTensor 。 值范围: context 中的值应

    2024年02月11日
    浏览(44)
  • 深入理解深度学习——BERT派生模型:ALBERT(A Lite BERT)

    分类目录:《深入理解深度学习》总目录 预训练语言模型的一个趋势是使用更大的模型配合更多的数据,以达到“大力出奇迹”的效果。随着模型规模的持续增大,单块GPU已经无法容纳整个预训练语言模型。为了解决这个问题,谷歌提出了ALBERT,该模型与BERT几乎没有区别,

    2024年02月10日
    浏览(53)
  • ChatGPT:探索人工智能语言模型的前沿技术

    一、ChatGPT的背景和原理 ChatGPT是由OpenAI开发的基于GPT-3.5架构的语言模型。它通过大规模的预训练和微调过程,学习了海量的文本数据,并能够生成连贯、有逻辑的回答。ChatGPT使用了自注意力机制和深度神经网络,能够对上下文进行理解和生成有意义的响应。 二、ChatGPT在自然

    2024年02月16日
    浏览(74)
  • GPT与BERT模型

            NLP任务的核心逻辑是“猜概率”的游戏。BERT和GPT都是基于预训练语言模型的思想,通过大量语料训练得到语言模型。两种模型都是基于Transformer模型。         Bert 类似于Transformer的Encoder部分,GPT类似于Transformer的Decoder部分。两者最明显的在结构上的差异为M

    2024年02月09日
    浏览(36)
  • 语言模型BERT理解

    BERT是由Google在2018年提出的一种预训练语言模型。BERT的创新之处在于采用了 双向Transformer编码器来生成上下文相关的词向量表示 。 传统的单向语言模型只考虑了左侧或右侧的上下文信息,而BERT则同时考虑了左侧和右侧的上下文信息,使得生成的词向量具有更好的语义表达能

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包