使用生成模型进行文本分类

#2025/12/30 #ai

目录

1. 特定任务模型 vs 生成模型

用一句话理解

  • 之前的模型(特定任务模型):
    • 你问它“这是好评还是差评?“,它直接回答“1”(好评)或“0“(差评)
  • 生成模型:比如 GPT
    • 你问它同样的问题,它会用完整的句子回答你“这是一条正面评论“

核心区别

特定任务模型:文本 → 数字(0或1)  
生成模型:文本 → 完整的文字回答  

如下图:

{%}

特定任务模型从词元序列生成数值,而生成模型从词元序列生成词元序列

2. 📚 我们要用的两个生成模型

2.1. 1️⃣ FLAN-T5(开源模型)

特点

  • ✅ 免费使用
  • ✅ 可以在自己电脑上运行
  • ✅ 经过特殊训练,很会“听指令“

怎么训练的

  • 模型先学习了大量"指令+回答"的例子,就像你做作业前老师给你看了很多答题示例一样。

2.1.1. 附 T5

T5(Text-to-Text Transfer Transformer,文本到文本迁移 Transformer)模型是一个有趣的模型系列,它利用了这种架构。如图下图所示,其架构与原始 Transformer 类似,将 12 个解码器和 12 个编码器堆叠在一起

{%}|624

T5 模型与原始 Transformer 模型类似,采用解码器 - 编码器架构

2.2. 2️⃣ GPT-3.5(ChatGPT)(专有模型)

特点

  • 💰 需要付费使用API
  • ☁️ 在云端运行,不占用你的电脑
  • 🎯 效果通常更好

3. 🛠️ 实战:用FLAN-T5给电影评论分类

3.1. 第一步:加载模型

from transformers import pipeline  

# 创建一个"文本生成器"  
pipe = pipeline(  
    model="google/flan-t5-base",  # 模型名称  
    device="cuda:0"  # 用GPU加速  
)  

3.2. 第二步:写一个好的“指令“

这是关键!你需要清楚地告诉模型要做什么:

prompt = """  
请预测下面这条电影评论是正面还是负面的:  
{评论内容}  

只回答"Positive"或"Negative"。  
"""  

为什么这样写

  • 📝 明确任务(“预测”)
  • 📝 说清楚输入是什么(“电影评论”)
  • 📝 限制输出格式(“只回答…”)

3.3. 第三步:让模型回答

评论 = "这部电影太棒了!"  
模型的回答 = pipe(prompt.format(评论内容=评论))  

print(模型的回答)  
# 输出:Positive  

4. 🎯 实战:用ChatGPT(GPT-3.5)分类

4.1. 区别:不需要下载模型,通过网络调用

import openai  

# 1. 设置API密钥(就像你的账号密码)  
client = openai.OpenAI(api_key="你的密钥")  

# 2. 发送请求  
response = client.chat.completions.create(  
    model="gpt-3.5-turbo",  
    messages=[  
        {"role": "system", "content": "你是一个电影评论分析助手"},  
        {"role": "user", "content": "这部电影是正面还是负面:Best movie ever!"}  
    ]  
)  

print(response.choices[0].message.content)  

4.1.1. 附:GPT 的训练过程

OpenAI 分享了关于训练过程的大体情况,其中涉及一个重要组件,即偏好调优(preference tuning)。如下图 所示,OpenAI 首先手动创建了输入提示词(指令数据)的期望输出,并使用这些数据创建了模型的第一个版本。

{%}|624

由指令(提示词)和输出组成的手动标注数据被用于执行微调(指令微调)

5. 📊 效果对比表

模型类型F1分数优点缺点
特定任务模型0.80速度快,直接输出只能做一种任务
嵌入+分类器0.85性能好,灵活需要训练数据
零样本分类0.78不需要训练效果稍差
FLAN-T5未提及免费开源需要本地资源
GPT-3.50.91效果最好收费,无法控制

6. 💡 核心思想总结

6.1. 为什么生成模型能做分类

  • 1️⃣ 它理解自然语言指令
    • 你用人话告诉它“判断这是好评还是差评“,它就能明白
  • 2️⃣ 它见过大量类似例子
    • 训练时已经学过无数条“指令→回答“的配对
  • 3️⃣ 它会用文字回答
    • 虽然我们只需要“好评/差评“,但它用完整句子表达更自然

6.2. 关键技巧

写清楚指令(第6章会详细讲提示工程)
限制输出格式(避免它回答得太啰嗦)
给例子(少样本学习,效果更好)


7. ⚠️ 注意事项

  1. 幻觉问题:模型可能自信地说错话
    • 👉 解决:要求它“不知道就说不知道“
  2. 成本考虑
    • 开源模型(FLAN-T5):免费但需要GPU
    • 专有模型(GPT):按使用量付费
  3. 不是万能的
    • 复杂任务还是建议用微调过的专用模型