Space库命名实体识别(NER)损失函数及相关技术咨询
Space库在NER任务中的损失函数说明
标准推荐损失函数
Space库针对通用命名实体识别(NER)任务,默认推荐使用交叉熵损失(Cross-Entropy Loss),具体为适配序列标注场景的逐token交叉熵损失。该损失会自动忽略padding token的计算,适配BIO/BIOES等主流标注体系,适用于大多数常规NER任务场景。
特定场景备选损失函数
针对不同的NER细分场景,库内提供以下备选损失函数:
- 加权交叉熵损失(Weighted Cross-Entropy Loss):用于解决实体类别样本不均衡问题,允许为稀有实体类别设置更高的损失权重,提升模型对小众实体的识别能力。
- 多标签交叉熵损失(Multi-Label Cross-Entropy Loss):专门适配嵌套实体识别场景,支持单个token对应多个实体标签的损失计算,满足嵌套实体的标注需求。
- 边界感知损失(Boundary-Aware Loss):针对实体边界模糊、难以精准识别的场景,强化实体起始(B-)和结束(E-)位置的损失权重,帮助模型更好地定位实体边界。
损失函数定制支持
Space库完全支持自定义损失函数,有两种实现方式:
- 继承库内的
LossBase基类,重写compute_loss方法,实现自定义的损失计算逻辑; - 直接将自定义的损失函数对象(需符合框架的损失函数接口要求)传入训练器的
loss_fn参数,替换默认损失函数。
库内实现方式
所有内置损失函数均封装在space.losses模块下,以类的形式实现(继承自主流深度学习框架的损失模块类,如PyTorch的nn.Module):
- 标准交叉熵损失对应
CrossEntropyLossForNER类,内部通过mask机制过滤padding token,仅计算有效token的损失; - 加权交叉熵损失通过在初始化时接收
class_weights参数,在损失计算阶段为不同类别分配对应权重; - 多标签损失调整了损失计算的维度逻辑,支持对每个token的多个标签分别计算损失后求和。
内容的提问来源于stack exchange,提问作者Kaiser
相关产品推荐
相关产品推荐

