import torch.nn as nn from torch import Tensor # Label maps for NER token-level classification NER_ID2LABEL = { 0: "O", 1: "B-PERSON", 2: "I-PERSON", 3: "B-ORGANIZATION", 4: "I-ORGANIZATION", 5: "B-LOCATION", 6: "I-LOCATION", } NER_LABEL2ID = {v: k for k, v in NER_ID2LABEL.items()} class NERHead(nn.Module): """ Token-level classification head for Named Entity Recognition. Labels include: B-PER, I-PER, B-ORG, I-ORG, B-LOC, I-LOC, O """ def __init__(self, d_model: int, num_labels: int): super().__init__() # Linear layer mapping hidden states to label logits self.classifier = nn.Linear(d_model, num_labels) def forward(self, hidden_states: Tensor) -> Tensor: # Input shape: (B, T, d_model) # Returns shape: (B, T, num_labels) return self.classifier(hidden_states)