BNU_LIKE 2023-01-12 01:37 采纳率: 0%
浏览 31
已结题

预训练模型ErnieModel怎么能像BertModel获得所有encoder层的hidden_states呢?

img

在用BertModel时是没问题的,但是Ernie就不行,ErnieModel的代码里明明有output_hidden_states这个参数的

  • 写回答

6条回答 默认 最新

  • 哇小侠 2023-01-12 04:33
    关注

    ErnieModel 和 BertModel 是在不同的模型预训练框架上进行训练的,它们在模型结构和输出上可能有所不同。

    在使用 BertModel 时可以直接通过设置 output_hidden_states=True 来获取所有 encoder 层的隐藏状态,但是在 ErnieModel 中并不支持这样的参数。

    那么在使用 ErnieModel 时,获取所有 encoder 层的隐藏状态的方法是什么呢?

    一个方法是在模型预测时,自己手动遍历模型的各层,获取对应的隐藏状态,这种方法稍微有点复杂,需要对模型结构有一定的了解

    另一个更加简单的方法是使用 HuggingFace 的 Transformers 库中的 ErnieModel 类, 它在模型预测时自动提供了所有层的隐藏状态。

    from transformers import ErnieModel, ErnieTokenizer
    
    model = ErnieModel.from_pretrained('ernie-base-cased')
    
    input_ids = tokenizer.encode(text)
    hidden_states = model(input_ids)[-1]
    

    在上面的例子中,“hidden_states”就是所有encoder层的隐藏状态。其中 hidden_states[-1] 就是最后一层的状态,hidden_states[-2] 是倒数第二层的状态,以此类推。

    获取所有层的状态请使用 hidden_states[:-1],这样就可以得到一个List, 数组里面是所有层的状态。
    注:在上面代码中使用 ErnieModel.from_pretrained('ernie-base-cased') 会从预训练模型中加载"ernie-base-cased"这个模型,这个参数可以根据需要更换为其他预训练模型。

    对于 tokenizer 也可以用 ErnieTokenizer.from_pretrained('ernie-base-cased') 来加载预训练好的 tokenizer, 这样就能获得输入文本的id.

    此外,可能需要根据具体的需求来分析选择哪些层的隐藏状态。因此还需要结合具体的场景和目的来使用这些隐藏状态。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 创建了问题 1月12日

悬赏问题

  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)