SetFit 文档
SetFit 采样策略
并获得增强的文档体验
开始使用
SetFit 采样策略
SetFit 在 TrainingArguments 中支持各种对比对采样策略。在本概念指南中,我们将学习以下四种采样策略:
"oversampling"
(默认)"undersampling"
"unique"
"num_iterations"
建议先阅读 SetFit 概念指南,了解对比学习和正负对的背景知识。
运行示例
在本概念指南中,我们将使用以下示例场景:
- 3 个类别:“happy”、“content” 和 “sad”。
- 共 20 个样本:8 个“happy”样本、4 个“content”样本和 8 个“sad”样本。
考虑到句子对 (X, Y)
和 (Y, X)
会产生相同的嵌入距离/损失,我们只想考虑这两种情况中的一种。此外,我们不希望出现两个句子相同的情况,例如没有 (X, X)
。
最终的正负对可以在下表中可视化。+
和 -
分别表示正对和负对。此外,h-n
表示第 n 个“happy”句子,c-n
表示第 n 个“content”句子,s-n
表示第 n 个“sad”句子。请注意,对角线以下区域未使用,因为 (X, Y)
和 (Y, X)
会产生相同的嵌入距离,并且对角线未使用,因为我们对两个句子相同的对不感兴趣。
h-1 | h-2 | h-3 | h-4 | h-5 | h-6 | h-7 | h-8 | c-1 | c-2 | c-3 | c-4 | s-1 | s-2 | s-3 | s-4 | s-5 | s-6 | s-7 | s-8 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
h-1 | + | + | + | + | + | + | + | - | - | - | - | - | - | - | - | - | - | - | - | |
h-2 | + | + | + | + | + | + | - | - | - | - | - | - | - | - | - | - | - | - | ||
h-3 | + | + | + | + | + | - | - | - | - | - | - | - | - | - | - | - | - | |||
h-4 | + | + | + | + | - | - | - | - | - | - | - | - | - | - | - | - | ||||
h-5 | + | + | + | - | - | - | - | - | - | - | - | - | - | - | - | |||||
h-6 | + | + | - | - | - | - | - | - | - | - | - | - | - | - | ||||||
h-7 | + | - | - | - | - | - | - | - | - | - | - | - | - | |||||||
h-8 | - | - | - | - | - | - | - | - | - | - | - | - | ||||||||
c-1 | + | + | + | - | - | - | - | - | - | - | - | |||||||||
c-2 | + | + | - | - | - | - | - | - | - | - | ||||||||||
c-3 | + | - | - | - | - | - | - | - | - | |||||||||||
c-4 | - | - | - | - | - | - | - | - | ||||||||||||
s-1 | + | + | + | + | + | + | + | |||||||||||||
s-2 | + | + | + | + | + | + | ||||||||||||||
s-3 | + | + | + | + | + | |||||||||||||||
s-4 | + | + | + | + | ||||||||||||||||
s-5 | + | + | + | |||||||||||||||||
s-6 | + | + | ||||||||||||||||||
s-7 | + | |||||||||||||||||||
s-8 |
如前表所示,我们有 28 个“happy”的正对,6 个“content”的正对,以及另外 28 个“sad”的正对。总共有 62 个正对。此外,我们有“happy”和“content”之间的 32 个负对,“happy”和“sad”之间的 64 个负对,以及“content”和“sad”之间的 32 个负对。总共有 128 个负对。
过采样
默认情况下,SetFit 对其对比对应用过采样策略。此策略会采样相等数量的正训练对和负训练对,过采样少数对类型以匹配多数对类型。由于负对的数量通常大于正对的数量,因此这通常涉及过采样正对。
在我们的运行示例中,这将涉及将 62 个正对过采样到 128 个,从而在一个 epoch 中产生 128 + 128 = 256 对。总而言之:
- ✅ 采样了相等数量的正对和负对。
- ✅ 使用了所有可能的对。
- ❌ 存在一些数据重复。
欠采样
与过采样类似,此策略也采样相等数量的正训练对和负训练对。但是,它欠采样多数对类型以匹配少数对类型。这通常涉及欠采样负对以匹配正对。
在我们的运行示例中,这将涉及将 128 个负对欠采样到 62 个,从而在一个 epoch 中产生 62 + 62 = 124 对。总而言之:
- ✅ 采样了相等数量的正对和负对。
- ❌ 并非所有可能的对都已使用。
- ✅ 没有数据重复。
唯一
第三,唯一策略不会采样等量的正负训练对。相反,它只是精确地采样所有可能的对一次。这里不使用任何形式的过采样或欠采样。
在我们的运行示例中,这将涉及对所有负对和正对进行采样,从而在一个 epoch 中产生 62 + 128 = 190 对。总而言之:
- ❌ 未采样等量的正对和负对。
- ✅ 使用了所有可能的对。
- ✅ 没有数据重复。
num_iterations
最后,SetFit 仍可与涉及 num_iterations
训练参数的已弃用采样策略一起使用。与其他采样策略不同,此策略不涉及可能对的数量。相反,它为每个训练样本采样 num_iterations
个正对和 num_iterations
个负对。
在我们的运行示例中,如果假设 num_iterations=20
,那么我们将为每个训练样本采样 20 个正对和 20 个负对。由于有 20 个样本,这将涉及 (20 + 20) * 20 = 800 对。由于只有 190 个唯一对,这肯定会涉及一些数据重复。但是,它不保证使用了所有可能的对。总而言之:
- ✅ 不采样等量的正对和负对。
- ❌ 未必使用所有可能的对。
- ❌ 存在一些数据重复。