摘要:
标题:比较判别式和生成式大模型在NER任务的微调方法
合集:自然语言处理-大语言模型微调
AI问题:大语言模型在文本中的实体识别/NER任务的微调
方案:对于判别式大模型采用为NER任务定制的序列标注,对于生成式大模型采用LoRA微调。
BERT(Bidirectional Encoder Representations from Transformers)判别式大模型(Discriminative Model),例如如RoBERTa、chinese-bert-wwm-ext 和生成式大模型(Generative Model),例如GPT、QWen、T5、LLaMA等,在命名实体识别(NER)任务上的微调有着根本性的区别,主要体现在任务形式、输入输出、微调策略和优缺点上。
一、文本中的实体识别问题
文本中的实体识别问题(通常称为命名实体识别,Named Entity Recognition, NER)是指从非结构化文本中自动识别、定位并分类特定类型实体的任务。这些实体通常包括人名、地名、组织机构名、时间、日期、货币、百分比等具有明确语义意义的词汇或短语。识别文本中的实体任务还包括从大量文本中进行信息检索与抽取。识别文本中的实体属于语言理解类任务,是自然语言处理(NLP)中的一项核心任务。
核心目标:
- 识别实体:从文本中找到具有特定意义的词汇。例如:在句子“巴黎是法国的首都”中,识别出“巴黎”(地点)、“法国”(国家)。
- 分类实体类型:为每个识别出的实体标注其所属的类别。例如:“苹果”可能是水果(如果上下文是饮食)或公司(如果上下文是科技新闻)。
主要分类:
- 信息提取:从新闻、论文、报告中提取关键信息(如人物、地点、事件)。示例:从“马斯克宣布特斯拉将在柏林建厂”中提取“马斯克”(人名)、“特斯拉”(公司)、“柏林”(地点)。
- 信息检索(IR):从大规模文本中检索相关文档(如搜索引擎)。
- 问答系统(QA):回答基于实体的问题,如“谁发明了电话?” → 提取“贝尔”(人名)。
- 知识图谱构建:将文本中的实体及其关系转化为结构化知识(如“姚明 → 篮球运动员 → 中国”)。
- 特定实体的舆情分析:监控特定实体(如品牌、人物)在社交媒体中的提及情况。
二、判别式和生成式大模型
1、核心目标的区别
判别式模型 (Discriminative Model):它的核心目标是学习类别之间的边界。它不关心数据本身是如何生成的,只关心给定一个输入X,如何判断它最可能属于哪个类别Y。一个判别式模型就像是一个鉴定专家。你给他一张画(输入X),他的任务是判断这幅画是“真迹”还是“赝品”(输出Y)。他不需要知道这幅画具体是怎么画出来的,他只需要学会区分真迹和赝品的细微差别。
BERT在NER任务中的角色:给定一个句子(序列X),BERT的任务是为每个token判别并打上“B-PER”、“I-LOC”、“O”等标签(类别Y)。它是在区分不同token的类别。
生成式模型 (Generative Model):它的核心目标是学习数据本身的分布,即学习数据X和其标签Y的联合概率P(X, Y)。它有能力“想象”或“生成”新的数据样本。一个生成式模型就像是一个仿造大师。他不仅需要能鉴别真伪,更重要的是他深入研究了真迹的每一笔每一画,学到了绘画的风格和技法,以至于他自己也能画出一幅足以乱真的仿作(生成X)。像GPT、LLaMA这样的模型,它们通过预测下一个词的方式,学会了语言的分布,因此能够生成流畅的、全新的文本。
因此,尽管BERT和GPT都属于“大模型”范畴,且都基于Transformer架构,但它们的核心思想、架构和用途截然不同。BERT是一个专注于理解和判别,而GPT是一个专注于生成和创造。
2、架构的区别
BERT(Bidirectional Encoder Representations from Transformers)是基于生成式 Transformer 架构的经典自然语言处理(NLP)模型,两者的关系可以总结为:
a)BERT 是 Transformer 的变体
BERT 仅使用生成式 Transformer 的 Encoder 部分,并针对预训练任务进行了优化:
- 双向上下文建模:通过掩码语言模型(MLM)和下一句预测(NSP)任务,学习文本的双向表征。
- 堆叠多层 Encoder:BERT-base 有 12 层 Encoder,BERT-large 有 24 层。
关键改进:
- 无需像原始 Transformer 那样依赖 Decoder(因 BERT 不直接生成文本)。
- 通过大规模预训练 + 微调(Fine-tuning)适应下游任务(如分类、问答)。
b)核心区别
特性 | Transformer | BERT |
---|---|---|
结构 | Encoder + Decoder | 仅 Encoder |
训练目标 | 机器翻译(需 Seq2Seq) | MLM + NSP(预训练通用表征) |
上下文方向 | 单向(Decoder)或双向(Encoder) | 完全双向 |
典型应用 | 文本生成、翻译 | 实体识别、文本理解、分类、问答等 |
- BERT 是 Transformer 的“子集”:它基于 Transformer 的 Encoder,但通过预训练目标和数据规模革新了 NLP 领域。
- Transformer 更通用:适合生成任务(如 GPT 系列用 Decoder),而 BERT 更适合理解任务。
三、微调方法的区别
判别式和生成式大模型在实现NER实体识别微调时有显著区别,主要体现在架构设计、实现方式和适用场景上:
1、技术架构差异
SimpleTransformers (序列标注) 在技术架构层面上的数据流如下所示:
[Input] → [BERT Encoder] → [Linear Classifier] → [B-PER, I-PER, O...]
PEFT + Transformers (文本生成) 在技术架构层面上的数据流如下所示:
[Input] → [LLM] → ["{'entity': 'John', 'label': 'PERSON'}"]
2、判别式模型的NER微调
对于不同的自然语言处理任务,判别式模型的微调使用不同的专有开发包来解决。例如SimpleTransformers (NERModel) 开发包的特点包括:
- 高级封装:基于Transformers的极简封装,专门为NER任务设计。
- 即插即用:几行代码即可完成微调,适合快速原型开发。
- 内置评估:自动计算precision、recall、F1等NER指标。
- 传统方法:使用线性分类头进行实体标签预测。
典型用法如下:
from simpletransformers.ner import NERModel, NERArgs
# 配置参数
model_args = NERArgs()
model_args.num_train_epochs = 3
model_args.learning_rate = 4e-5
# 创建模型
model = NERModel(
"bert", "bert-base-cased",
args=model_args,
labels=["O", "B-PER", "I-PER", "B-ORG", "I-ORG", "B-LOC", "I-LOC"]
)
# 训练和评估
model.train_model(train_data)
result, model_outputs, predictions = model.eval_model(eval_data)
参考案例:CCF-BDCI-2021银行产品用户评论数据集和观点提取 – 甲壳虫AI(竞赛)案例精选
测试数据样例:test_public.csv
id text
0 共享一个额度,没啥必要,四个卡不要年费吗?你这种人头,银行最喜欢,广发是出了名的风控严,套现就给你封...
1 炸了,就2000.浦发没那么好心,草
2 挂了电话自己打过去分期提额可以少分一点的
...
输出数据样例:submit.csv
其中id为原始文本id,BIO_anno为BIO格式的实体标注预测结果,class为情感分类预测结果(1:正面,0:负面,2:中立)。对于id为0的文本,识别出银行实体:广发。对于id为1的文本,识别出银行实体:浦发。对于id为2的文本,识别出银行产品实体:分期。
id | BIO_anno | class |
---|---|---|
0 | O O O O B-COMMENTS_N I-COMMENTS_N O O O O O O O O B-PRODUCT O O B-COMMENTS_N I-COMMENTS_N O O O O O O O O O O O I-COMMENTS_ADJ I-COMMENTS_ADJ O B-BANK I-BANK O O O O O B-COMMENTS_N I-COMMENTS_N B-COMMENTS_ADJ O O O O O O O O O O | 1 |
1 | O O O O O O O O O B-BANK I-BANK O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O | 0 |
2 | O O O O O O O O O B-PRODUCT I-PRODUCT B-COMMENTS_N I-COMMENTS_N O O O O O O O | 2 |
… | … | … |
3、生成式模型的NER微调
PEFT(parameter efficient fine tuning)是一系列用于微调大型预训练模型(如 LLMs:Large Language Models)的技术集合。它的核心思想是:在微调过程中,只更新或引入极少量(通常 <1%)的模型参数,同时冻结原始预训练模型的大部分甚至全部参数。
特点:
- 参数高效微调:使用LoRA等技术,只训练少量参数。
- 灵活性强:可以自定义模型架构和训练流程。
- 资源友好:大幅减少显存占用,适合大模型微调。
- 生成式方法:将NER作为文本生成任务来处理。
典型用法:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("qwen/Qwen2-1.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen2-1.5B-Instruct")
# 配置LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
target_modules=["q_proj", "v_proj"],
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# 应用LoRA
model = get_peft_model(model, lora_config)
# 自定义训练流程...
参考:Qwen2.5模型在NER任务上的LoRA微调 – 甲壳虫AI(竞赛)案例精选
QWen2大模型在NER任务微调后的目标举例:
你是一个文本实体识别领域的专家,你需要从给定的句子中提取:
地点; 人名; 地理实体; 组织实体。
以 json 格式输出, 如 {"entity_text": "南京", "entity_label": "地理实体"}
注意:
1. 输出的每一行都必须是正确的 json 字符串.
2. 找不到任何实体时, 输出"没有找到任何实体".
句子为:菲律宾总统埃斯特拉达2号透过马尼拉当地电台宣布说,
在仍遭到激进的回教阿卜沙耶夫组织羁押在非国南部和落岛的16名人质当中,
军方已经营救出了11名菲律宾人质。
输出:
{"entity_text": "菲律宾", "entity_label": "地理实体"}
{"entity_text": "埃斯特拉达", "entity_label": "人名"}
{"entity_text": "马尼拉", "entity_label": "地理实体"}
{"entity_text": "阿卜沙耶夫组织", "entity_label": "组织"}
{"entity_text": "非国南部", "entity_label": "地理实体"}
4、适用场景对比
特性 | SimpleTransformers | PEFT + Transformers |
---|---|---|
易用性 | ⭐⭐⭐⭐⭐ (极简API) | ⭐⭐ (需要更多代码) |
灵活性 | ⭐⭐ (固定范式) | ⭐⭐⭐⭐⭐ (完全可定制) |
参数效率 | ❌ (全参数微调) | ✅ (参数高效微调) |
适合模型 | BERT/RoBERTa/chinese-bert-wwm-ext等编码器 | 生成式模型(GPT、Qwen等) |
任务范式 | 为NER任务定制的序列标注 | 文本生成 |
资源需求 | 较高 | 较低 |
输出格式 | BIO标签序列 | 结构化文本/JSON。需要自定义输出格式。 |
根据你的具体需求选择合适的工具:追求NER微调训练后的效果选SimpleTransformers,追求NER微调灵活性和参数效率选PEFT。