6.1.2 零样本/小样本学习
零样本学习(Zero-Shot Learning,ZSL)和小样本学习(Few-Shot Learning,FSL)都是解决标注数据不足问题的重要技术,其中零样本学习通过利用辅助信息实现对未见过类别的识别,而小样本学习通过少量标注样本快速适应新任务。这两种方法在多个领域都有广泛应用,如遥感图像处理、自然语言处理和图像分类等。
1. 零样本学习
(1)定义:零样本学习是一种深度学习问题设置,模型在测试时需要预测训练期间未观察到的类别的样本。零样本学习方法通常通过某种形式的辅助信息(如属性、文本描述等)将训练类和测试类联系起来,从而实现对未见过类别的识别。
(2)原理
零样本学习的核心思想是利用训练类的样本和辅助信息(如语义特征、属性等)来训练模型,使得模型能够将这些辅助信息映射到图像或其他数据的特征空间中。在测试阶段,模型利用这些映射关系和测试类的辅助信息来预测未见过类别的样本。
(3)应用
遥感图像分割:如 LangRS 工具框架,通过零样本学习技术提高对遥感图像中建筑物、植被、车辆等目标的识别效果。
- 机器翻译:适用于低资源语言对的翻译任务,模型仅通过任务描述进行翻译,无需具体示例。
- 情感分析:快速判断新领域文本的情感倾向,无需大量标注数据。
- 知识问答:在没有标注数据的情况下回答问题。
例如下面是一个基于CLIP模型实现了的零样本学习(ZSL)例子。
实例6-2:基于CLIP模型实现了的零样本学习(源码路径:codes\6\Ling.py)
实例文件Ling.py的具体实现代码如下所示。
import torch
from transformers import CLIPProcessor, CLIPModel
from PIL import Image
import os
class ZeroShotAgent:
def __init__(self):
# 加载预训练CLIP模型(视觉-文本跨模态模型)
self.model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
self.processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
def classify_image(self, image_path, class_names):
"""
输入图像路径和类别名称列表,返回预测类别
Args:
image_path (str): 图像路径
class_names (list): 需要分类的类别名称(如["cat", "dog"])
Returns: