SetFit 文件

SetFit 取樣策略

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

SetFit 取樣策略

SetFit 在 TrainingArguments 中支援各種對比對取樣策略。在本概念指南中,我們將學習以下四種取樣策略:

  1. "oversampling"(預設)
  2. "undersampling"
  3. "unique"
  4. "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 個唯一對,這肯定會涉及一些資料重複。但是,它不保證使用了所有可能的對。總而言之:

  • 取樣等量的正對和負對。
  • ❌ 未必使用所有可能的對。
  • ❌ 存在一些資料重複。
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.