比较判别式和生成式大模型在NER任务的微调方法

摘要:

标题:比较判别式和生成式大模型在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)中的一项核心任务。

核心目标:

  1. 识别实体:从文本中找到具有特定意义的词汇。例如:在句子“巴黎是法国的首都”中,识别出“巴黎”(地点)、“法国”(国家)。
  2. 分类实体类型:为每个识别出的实体标注其所属的类别。例如:“苹果”可能是水果(如果上下文是饮食)或公司(如果上下文是科技新闻)。

主要分类:

  • 信息提取:从新闻、论文、报告中提取关键信息(如人物、地点、事件)。示例:从“马斯克宣布特斯拉将在柏林建厂”中提取“马斯克”(人名)、“特斯拉”(公司)、“柏林”(地点)。
  • 信息检索(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)核心区别

特性TransformerBERT
结构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的文本,识别出银行产品实体:分期。

idBIO_annoclass
0O 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 O1
1O O O O O O O O O B-BANK I-BANK O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O0
2O O O O O O O O O B-PRODUCT I-PRODUCT B-COMMENTS_N I-COMMENTS_N O O O O O O O2

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、适用场景对比

特性SimpleTransformersPEFT + Transformers
易用性⭐⭐⭐⭐⭐ (极简API)⭐⭐ (需要更多代码)
灵活性⭐⭐ (固定范式)⭐⭐⭐⭐⭐ (完全可定制)
参数效率❌ (全参数微调)✅ (参数高效微调)
适合模型BERT/RoBERTa/chinese-bert-wwm-ext等编码器生成式模型(GPT、Qwen等)
任务范式为NER任务定制的序列标注文本生成
资源需求较高较低
输出格式BIO标签序列结构化文本/JSON。需要自定义输出格式。

根据你的具体需求选择合适的工具:追求NER微调训练后的效果选SimpleTransformers,追求NER微调灵活性和参数效率选PEFT。

发表评论