You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

微调BERT NER模型后预测结果缺失start/end位置的问题求助

解决微调BERT NER模型后预测结果无实体起止位置的问题

问题根源

你遇到的start/end为None的问题,核心是预测时tokenizer没有返回文本偏移映射(offset_mapping),导致NER pipeline无法将token级的实体结果映射回原文的起止位置。基础模型正常是因为它的tokenizer默认配置支持返回偏移映射,而你微调后可能没保留或正确配置这个参数。

解决方案步骤

1. 确保加载正确的Tokenizer配置

如果已经保存了微调后的tokenizer,直接加载并开启偏移映射;如果没保存,加载base tokenizer时显式指定参数:

# 替换为你的微调模型路径/名称
tokenizer = BertTokenizer.from_pretrained("your-finetuned-ner-model", return_offsets_mapping=True)
model = BertForTokenClassification.from_pretrained("your-finetuned-ner-model")

2. 修正NER Pipeline初始化代码

初始化pipeline时,要确保tokenizer的偏移映射参数生效,显式配置相关选项:

from transformers import pipeline, BertTokenizer, BertForTokenClassification

# 加载自定义模型和tokenizer
tokenizer = BertTokenizer.from_pretrained("your-finetuned-ner-model", return_offsets_mapping=True)
model = BertForTokenClassification.from_pretrained("your-finetuned-ner-model")

# 初始化NER pipeline,确保偏移映射能被正确获取
pipe = pipeline(
    task="ner",
    model=model.to("cpu"),
    tokenizer=tokenizer,
    grouped_entities=True,
    return_offsets_mapping=True
)

# 测试预测
result = pipe("this is a Abc Corp. Ltd")
print(result)

3. 训练时的参数说明

训练NER模型时,不需要手动传入offset_mapping给模型——这个参数是tokenizer生成的,用于后续将token级结果映射回原文,而非模型训练的输入。训练时只需要确保预处理数据时,tokenizer生成了正确的input_ids、attention_mask和对应标签即可。

额外注意事项

  • 如果直接使用base模型的tokenizer,必须在加载时始终显式设置return_offsets_mapping=True,否则pipeline无法获取偏移信息。
  • grouped_entities=True依赖offset_mapping合并被拆分的子token(比如Abc Corp. Ltd可能被拆成多个子token),所以必须保证tokenizer能返回该映射才能正常计算实体起止位置。

内容的提问来源于stack exchange,提问作者Amit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:13:13