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