Hugging Face Transformers 支持中文的命名实体识别(NER)任务。你可以使用预训练的中文模型,例如 BERT、RoBERTa、MacBERT 等,它们经过中文数据的微调,可以用于实体识别任务。
1. 常见支持中文 NER 的 Hugging Face 模型
以下是一些适合中文 NER 任务的模型:
(1) bert-base-chinese
- 适用于中文基础任务。
- 未专门针对 NER 微调,需要自定义微调。
(2) uer/roberta-base-finetuned-cluener2020
- 针对 CLUENER2020 数据集微调的 RoBERTa 模型。
- 支持识别中文中的人名、地名、时间等实体。
(3) hfl/chinese-bert-wwm-ext
- 全词掩码预训练的中文 BERT,适合迁移到 NER 任务。
(4) hfl/chinese-roberta-wwm-ext
- 类似于上面的 BERT,全词掩码预训练,适合 NER。
2. 使用 Hugging Face 提取中文 NER
安装依赖
确保安装了 transformers
和 torch
:
pip install transformers torch
代码示例
以 uer/roberta-base-finetuned-cluener2020
为例:
from transformers import pipeline
# 加载预训练 NER 模型
ner_pipeline = pipeline("ner", model="uer/roberta-base-finetuned-cluener2020", tokenizer="uer/roberta-base-finetuned-cluener2020")
# 输入文本
text = "李华昨天去了北京天安门。"
# 执行 NER
results = ner_pipeline(text)
# 打印结果
for entity in results:
print(f"实体: {entity['word']}, 类型: {entity['entity']}, 置信度: {entity['score']:.2f}")
输出示例:
实体: 李华, 类型: B-PER, 置信度: 0.99 实体: 北京, 类型: B-LOC, 置信度: 0.98 实体: 天安门, 类型: I-LOC, 置信度: 0.95
3. 如何微调自己的中文 NER 模型
如果现有模型无法满足需求,可以在 Hugging Face 上微调一个中文 NER 模型:
(1) 数据准备
将数据整理为 BIO
格式,例如:
mathematica
张 O 三 B-PER 昨天 O 去了 O 北京 B-LOC 天安门 I-LOC
(2) 使用 Hugging Face 提供的 Trainer
你可以使用 Hugging Face 的 Trainer
API 进行快速训练:
from transformers import BertForTokenClassification, BertTokenizer, Trainer, TrainingArguments
# 加载模型和分词器
model = BertForTokenClassification.from_pretrained("bert-base-chinese", num_labels=9)
# 标签数根据任务调整
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
# 定义训练参数
training_args = TrainingArguments( output_dir="./results", evaluation_strategy="epoch", learning_rate=2e-5, per_device_train_batch_size=16, num_train_epochs=3, weight_decay=0.01, ) # 使用自定义数据集 trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, # 替换为自定义数据 eval_dataset=eval_dataset, )
# 开始训练
trainer.train()
4. 中文 NER 的 Hugging Face 模型推荐
模型名称 | 特点 | 模型地址 |
---|---|---|
uer/roberta-base-finetuned-cluener2020 | 针对 CLUENER 微调,直接用于中文 NER | 链接 |
bert-base-chinese | 通用中文模型,需进一步微调 | 链接 |
hfl/chinese-bert-wwm-ext | 全词掩码预训练中文模型,适合迁移到 NER | 链接 |
hfl/chinese-roberta-wwm-ext | 类似于上方的 BERT,性能稍高 | 链接 |
5. 总结
- 如果是简单的中文 NER,可以直接使用
uer/roberta-base-finetuned-cluener2020
。 - 如果需要扩展或自定义实体类型,推荐基于
bert-base-chinese
或hfl/chinese-bert-wwm-ext
进行微调。 - 使用 Hugging Face 的
pipeline
接口可以快速搭建 NER 系统,非常方便