[paper] Zero-Shot Learning with Semantic Output Codes [NIPS 2009]

本文介绍了Zero-Shot Learning的概念,它在已知领域训练高性能分类器后,尝试解决新领域的分类问题,即使新领域样本稀少或不存在。该方法基于迁移学习,通过构建语义输出码分类器利用知识库进行类别外推。核心思想是定义一种使用Y的语义属性知识库的分类器,以抽象出新类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zero-Shot Learning with Semantic Output Codes [NIPS 2009]


zero-shot和one-shot:

在分类场景下(或序列标注或NLU),在已知的几个topic或domain内(domain A,B,C),已经训练出了性能较好的分类器。此时想解决针对新的domain D的分类问题,然而D domain的样本非常少(one-shot),或者没有(zero-shot)。此时如何根据ABC类别的样本,或MACHINE,生成D domain的machine,就是zero-shot model要解决的问题。

其实是transfer-learning的一种。

tansfer-learning核心思想:source-domain->pivot->general Feature Space->target-domain

典型应用场景:如图像检测,y的value太多,很难见到全部y和全部x。

成功案例:如语音识别,能识别OOV的词


核心问题:

omitted from the training set


核心思想:

define the notion of a semantic output code classifier (SOC) which utilizes a knowledge base of semantic properties of Y to extrapolate to novel classes

基于representation learning,通过一个中间层semantic output code classifier进行转换,


模型详述:

1、语义特征空间

从基本特征中抽象出一层抽象特征(名曰语义特征),作为新的特征空间,名曰语义特征空间

2、

在机器学习领域,**Few-shot Learning(少样本学习)** 和 **Zero-shot Learning(零样本学习)** 是两种针对数据稀缺场景下的学习范式,它们的核心目标都是在有限或无可见样本的情况下实现对新类别的识别能力。 ### Few-shot Learning Few-shot Learning 旨在通过极少量的样本(通常每个类别仅包含几个样本)来训练模型以识别新类别。其核心挑战在于如何从有限的数据中提取足够的信息以支持泛化能力。该方法通常依赖于元学习(Meta-learning)框架,例如基于原型网络(Prototypical Networks)、匹配网络(Matching Networks)或关系网络(Relation Networks)等结构[^2]。 例如,在 C-way K-shot 问题中,C 表示类别数量,K 表示每个类别的样本数量,这意味着模型需要在仅有 K 个样本的情况下区分 C 个类别[^4]。 ```python # 示例:简单的原型网络计算类原型的伪代码片段 def compute_prototypes(support_set): prototypes = {} for cls in support_set: features = [extract_features(sample) for sample in support_set[cls]] prototype = np.mean(features, axis=0) prototypes[cls] = prototype return prototypes ``` ### Zero-shot Learning Zero-shot Learning 则更进一步,它假设在训练阶段完全没有见过目标类别的样本,而是通过辅助信息(如属性描述、文本嵌入等)来建立视觉特征空间与语义描述之间的映射。这种学习方式常用于图像识别、自然语言处理等领域,尤其是在新类别不断出现的动态环境中[^3]。 例如,若模型已经能够识别马、老虎和熊猫,并希望它也能识别斑马,那么可以通过提供关于“斑马是像马一样但有黑白条纹的动物”的描述信息来实现识别功能,而无需实际展示斑马的图像。 ```python # 示例:构建视觉-语义映射的伪代码片段 class ZeroShotClassifier: def __init__(self, semantic_embeddings): self.semantic_embeddings = semantic_embeddings # 类别语义向量 def predict(self, image_feature): similarities = [cosine_similarity(image_feature, emb) for emb in self.semantic_embeddings.values()] predicted_class = list(self.semantic_embeddings.keys())[np.argmax(similarities)] return predicted_class ``` ### 区别总结 | 特性 | Few-shot Learning | Zero-shot Learning | |------|-------------------|--------------------| | 样本需求 | 每类有少量样本(如1~5个) | 完全没有目标类样本 | | 依赖信息 | 实例样本 + 标签 | 语义描述 / 属性信息 | | 应用场景 | 新类别数据有限但仍可获取少量样本 | 新类别样本完全不可得,仅能通过语义定义 | ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值