跳到内容

Token Classification 用法

摘要

  • 模型用法:token classification
  • Pooling 任务:token_classify
  • 离线 API
    • LLM.encode(..., pooling_task="token_classify")
  • 在线 API
    • 池化 API (/pooling)

(序列)分类和令牌(token)分类之间的关键区别在于输出粒度:(序列)分类为整个输入序列生成单个结果,而令牌分类则为序列中的每个单独令牌生成结果。

许多分类模型同时支持(序列)分类和 token 分类。关于(序列)分类的更多详细信息,请参阅此页面

注意

Pooling 多任务支持已被弃用,并将在 v0.20 中移除。当默认的 Pooling 任务(classify)不是您所需时,您需要通过离线设置 PoolerConfig(task="token_classify") 或在线设置 --pooler-config.task token_classify 来手动指定它。

典型用例

命名实体识别 (NER)

实现示例请见:

离线: examples/pooling/token_classify/ner_offline.py

在线: examples/pooling/token_classify/ner_online.py

强制对齐

强制对齐以音频和参考文本作为输入,并生成单词级别的时间戳。

离线: examples/pooling/token_classify/forced_alignment_offline.py

稀疏检索(词汇匹配)

BAAI/bge-m3 模型利用 token 分类进行稀疏检索。更多信息,请参阅此页面

支持的模型

架构 模型 示例 HF 模型 LoRA PP
BertForTokenClassification 基于 BERT boltuix/NeuroBERT-NER(见备注)等。
ErnieForTokenClassification 基于 BERT 的中文 ERNIE gyr66/Ernie-3.0-base-chinese-finetuned-ner
ModernBertForTokenClassification 基于 ModernBERT disham993/electrical-ner-ModernBERT-base
Qwen3ForTokenClassificationC 基于 Qwen3 bd2lcco/Qwen3-0.6B-finetuned
*ModelC, *ForCausalLMC 生成式模型 不适用 * *

C 通过 --convert classify 自动转换为分类模型。(详情)* 特性支持与原始模型相同。

如果您的模型不在上述列表中,我们将尝试使用 as_seq_cls_model 自动转换该模型。默认情况下,类概率是从对应于最后一个令牌的 softmax 后的隐藏状态中提取的。

多模态模型

注意

有关多模态模型输入的更多信息,请参阅此页面

架构 模型 输入 示例 HF 模型 LoRA PP
Qwen3ASRForcedAlignerForTokenClassification Qwen3-ForcedAligner T + A+ Qwen/Qwen3-ForcedAligner-0.6B(见备注) ✅︎

注意

强制对齐的使用需要 --hf-overrides '{"architectures": ["Qwen3ASRForcedAlignerForTokenClassification"]}'。请参阅 examples/pooling/token_classify/forced_alignment_offline.py

作为奖励模型

使用 token 分类模型作为奖励模型。关于奖励模型的详细信息,请参阅 奖励模型 (Reward Models)

架构 模型 示例 HF 模型 LoRA PP
InternLM2ForRewardModel 基于 InternLM2 internlm/internlm2-1_8b-reward, internlm/internlm2-7b-reward 等。 ✅︎ ✅︎
Qwen2ForRewardModel 基于 Qwen2 Qwen/Qwen2.5-Math-RM-72B 等。 ✅︎ ✅︎
*ModelC, *ForCausalLMC 生成式模型 不适用 * *

C 通过 --convert classify 自动转换为分类模型。(详情)

如果您的模型不在上述列表中,我们将尝试使用 as_seq_cls_model 自动转换模型。

离线推理

池化参数

支持以下池化参数

    use_activation: bool | None = None

LLM.encode

encode 方法适用于 vLLM 中的所有池化模型。

使用 LLM.encode 进行 token 分类模型处理时,请设置 pooling_task="token_classify"

from vllm import LLM

llm = LLM(model="boltuix/NeuroBERT-NER", runner="pooling")
(output,) = llm.encode("Hello, my name is", pooling_task="token_classify")

data = output.outputs.data
print(f"Data: {data!r}")

在线服务

请参阅 Pooling API 并使用 "task":"token_classify"

更多示例

更多示例可在此处找到: examples/pooling/token_classify

支持的功能

Token 分类的特性应与(序列)分类保持一致。更多信息,请参阅此页面