基于 BERT 的 NER 模型在反序列化时给出不一致的预测

2024-02-10

我正在尝试在 Colab 云 GPU 上使用 HuggingFace 变压器库训练 NER 模型,对其进行 pickle 并将模型加载到我自己的 CPU 上以进行预测。

Code

模型如下:

from transformers import BertForTokenClassification

model = BertForTokenClassification.from_pretrained(
    "bert-base-cased",
    num_labels=NUM_LABELS,
    output_attentions = False,
    output_hidden_states = False
)

我正在使用此代码片段将模型保存在 Colab 上

import torch

torch.save(model.state_dict(), FILENAME)

然后使用以下命令将其加载到我的本地 CPU 上

# Initiating an instance of the model type

model_reload = BertForTokenClassification.from_pretrained(
    "bert-base-cased",
    num_labels=len(tag2idx),
    output_attentions = False,
    output_hidden_states = False
)

# Loading the model
model_reload.load_state_dict(torch.load(FILENAME, map_location='cpu'))
model_reload.eval()

用于标记文本并进行实际预测的代码片段在 Colab GPU 笔记本实例和我的 CPU 笔记本实例上都是相同的。

预期行为

经过 GPU 训练的模型行为正确,并且可以完美地对以下标记进行分类:

O       [CLS]
O       Good
O       morning
O       ,
O       my
O       name
O       is
B-per   John
I-per   Kennedy
O       and
O       I
O       am
O       working
O       at
B-org   Apple
O       in
O       the
O       headquarters
O       of
B-geo   Cupertino
O       [SEP]

实际行为

当加载模型并使用它在我的 CPU 上进行预测时,预测完全错误:

I-eve   [CLS]
I-eve   Good
I-eve   morning
I-eve   ,
I-eve   my
I-eve   name
I-eve   is
I-geo   John
B-eve   Kennedy
I-eve   and
I-eve   I
I-eve   am
I-eve   working
I-eve   at
I-gpe   Apple
I-eve   in
I-eve   the
I-eve   headquarters
I-eve   of
B-org   Cupertino
I-eve   [SEP]

有谁知道为什么它不起作用?我错过了什么?


我修复了,有两个问题:

  1. 令牌的索引标签映射是错误的,由于某种原因list()函数在 Colab GPU 上的工作方式与我的 CPU 上的工作方式不同 (??)

  2. 用于保存模型的代码片段不正确,对于基于 Huggingface-transformers 库的模型,您无法使用model.save_dict()稍后加载它,您需要使用save_pretrained()模型类的方法,稍后使用from_pretrained().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 BERT 的 NER 模型在反序列化时给出不一致的预测 的相关文章

随机推荐

  • Python 没有权限访问此服务器/从 ZIP 返回城市/州

    我想做的是从邮政编码中检索城市和州 这是我到目前为止所拥有的 def find city zip code zip code str zip code url http www unitedstateszipcodes org zip co
  • 包含其他标头的单个标头

    最近 我遇到了这种管理标头的方法 在互联网上找不到有关其问题的太多信息 因此决定在这里询问 想象一下你有一个程序main c 以及其他来源和标题 例如 person c person h settings c settings h main
  • 基音频率检测互相关函数的实现

    对于我的声音处理项目 特别是音调检测 我需要实现互相关函数 但我在结果方面遇到了麻烦 我有 400 帧 所有帧都有 512 个样本 帧有 50 的重叠这是互相关的公式 https i stack imgur com yaUUj jpg我已经
  • 如何从 lync 客户端 2013 通信中检索 IM 消息

    我正在使用 lync 2013 sdk 我需要在通话结束时创建一个包含对话 IM 消息的任务 我想要一些方法 conversation getIMmessage etc 我该如何实施呢 因此 假设您使用的是 Lync 客户端 SDK 您将需
  • 首页加载缓慢 - ASP.NET MVC

    我对我的页面使用了 miniprofiler 因为我认为我的第一页和其他一些页面的加载时间很长 我从 miniprofiler 开始 但我认为它是非常好的工具 我有这个结果 http localhost 50783 192 2 0 0 从数
  • 在实践中,对象构造是否保证所有线程都能看到初始化的非最终字段?

    The Java内存模型 https docs oracle com javase specs jls se8 html jls 17 html jls 17 4保证对象的构造和终结器之间的发生之前关系 从构造函数的末尾有一个发生在边缘 对
  • jquery-ui 对话框显示关闭图标和错误文本

    jquery ui 对话框显示关闭图标和 关闭 错误文本 jquery Ui 版本 1 12 1 和代码 function callDialog dialog confirm dialog closeOnEscape false resiz
  • 带有管道模式的 IIS 7.0 = Integrated 不会在 ASP .NET 中加载任何图像/CSS

    我有一个在 IIS 5 1 中工作的完整系统 我使用经典管道模式迁移到 IIS 7 0 一切正常 但使用管道集成时 我的图像 css 未加载 我正在将 ASP NET 3 5 与 Web 应用程序一起使用 有什么帮助吗 在 IIS 7 中
  • 如何实现多行文本加载动画?

    我正在尝试仅使用来实现文本加载动画CSS 我所拥有的是黑色文本 然后当页面加载时 文本将在几秒钟内开始填充红色 我面临的问题是文本加载动画工作正常 但是当文本结束并以新行开始时 动画文本仍然在同一行上继续 我怎样才能解决这个问题 body
  • 通过显式排序避免死锁

    我想明确提供有关 MySql InnoDB 应如何获取行锁的顺序 如果可能的话 就不应该出现任何死锁 如果我们遵循惯例 首先 数据库应该按升序锁定表 models 中找到的所有行 然后第二个表 颜色 中的所有行都应按升序锁定 有没有办法控制
  • Numpy:多轴上的 argmax 无循环

    我有一个 N 维数组 名为 A 对于A的第一轴的每一行 我想获得A的其他轴上的最大值的坐标 然后我将返回一个二维数组 其中包含第一轴的每一行的最大值的坐标A 的 我已经使用循环解决了我的问题 但我想知道是否有更有效的方法来做到这一点 我当前
  • 读取包含日期和时间的 csv

    我正在 R 中工作并阅读 csv 其第一列中有日期和时间 我想先在R中导入这个csv文件 然后将其转换为zoo对象 我正在使用 R 中的代码 EURUSD lt as xts read zoo myfile csv sep tz heade
  • 优先选择同步而不是易失性

    我读过这个answer https stackoverflow com a 3488771 2786156最后写下以下内容 任何你能用 易失性 实现的事情都可以用同步完成 但是 反之则不然 目前还不清楚 JLS 8 3 1 4 https
  • Swift 2 未使用的持续警告

    我收到一条警告 说我的常量未使用 从未使用过不可变值 myConst 的初始化 考虑替换为 的赋值或将其删除 if someVal value nil let myConst someVal value 那么重命名会怎样let myCons
  • 如何使用 C# API 将 BigQuery 行转换为 JSON?

    我使用下面的 C 代码从 BigQuery 表中提取一些数据 BigQueryClient client BigQueryClient Create
  • Ruby on Rails - 搜索结果分页

    我有 2 个模型 Post 和 Location 其中 location has many posts 和 post owns to location 搜索工作正常 分页也工作正常 除了total entries 结果显示超过 10 条 查
  • 以编程方式更改 UIImageView Xcode Swift 的高度和宽度

    嘿 出于某种原因 我正在努力尝试设置我的图像视图之一的高度和宽度 我想将其设置为高度仅占屏幕的 20 我知道要定期设置它 您可以执行以下操作 图像 0 0 50 50 但我需要高度不是一个静态数字 像 image 0 0 frame hei
  • 为什么 val_loss 和 val_acc 不显示?

    训练开始时 运行窗口中仅显示loss和acc 缺少val loss和val acc 仅在最后才会显示这些值 model add Flatten model add Dense 512 activation relu model add Dr
  • jQuery + Gravity Forms:在错误验证时执行 jQuery

    我在当前的重力形式上使用了一些 jQuery 然而 当我提交表单并返回错误验证时 我丢失了一些 jQuery 目标 我很好奇如何更换 document ready function 一旦字段因错误验证而重新加载 就会调用我的 jQuery
  • 基于 BERT 的 NER 模型在反序列化时给出不一致的预测

    我正在尝试在 Colab 云 GPU 上使用 HuggingFace 变压器库训练 NER 模型 对其进行 pickle 并将模型加载到我自己的 CPU 上以进行预测 Code 模型如下 from transformers import B