[ PROMPT_NODE_22938 ]
few-shot-learning
[ SKILL_DOCUMENTATION ]
# 少样本学习 (Few-Shot Learning) 指南
## 概述
少样本学习使大语言模型能够通过在提示词中提供少量示例(通常为 1-10 个)来执行任务。该技术对于需要特定格式、风格或领域知识的任务非常有效。
## 示例选择策略
### 1. 语义相似度
使用基于嵌入的检索选择与输入查询最相似的示例。
python
from sentence_transformers import SentenceTransformer
import numpy as np
class SemanticExampleSelector:
def __init__(self, examples, model_name='all-MiniLM-L6-v2'):
self.model = SentenceTransformer(model_name)
self.examples = examples
self.example_embeddings = self.model.encode([ex['input'] for ex in examples])
def select(self, query, k=3):
query_embedding = self.model.encode([query])
similarities = np.dot(self.example_embeddings, query_embedding.T).flatten()
top_indices = np.argsort(similarities)[-k:][::-1]
return [self.examples[i] for i in top_indices]
**最适用于**: 问答、文本分类、提取任务
### 2. 多样性采样
最大化不同模式和边缘情况的覆盖范围。
python
from sklearn.cluster import KMeans
class DiversityExampleSelector:
def __init__(self, examples, model_name='all-MiniLM-L6-v2'):
self.model = SentenceTransformer(model_name)
self.examples = examples
self.embeddings = self.model.encode([ex['input'] for ex in examples])
def select(self, k=5):
# 使用 k-means 寻找多样化的聚类中心
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(self.embeddings)
# 选择最接近每个聚类中心的示例
diverse_examples = []
for center in kmeans.cluster_centers_:
distances = np.linalg.norm(self.embeddings - center, axis=1)
closest_idx = np.argmin(distances)
diverse_examples.append(self.examples[closest_idx])
return diverse_examples
**最适用于**: 展示任务多样性、处理边缘情况
### 3. 基于难度的选择
逐步增加示例的复杂性以辅助学习。
python
class ProgressiveExampleSelector:
def __init__(self, examples):
# 示例应具有 'difficulty' 分数 (0-1)
self.examples = sorted(examples, key=lambda x: x['difficulty'])
def select(self, k=3):
# 选择难度线性增加的示例