File size: 2,069 Bytes
46cc63a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# Phase 5: Expert Aggressive — Toxic-BERT (head-only) + bottleneck LR + tuned threshold
# Goals: F1-toxic > 0.75, |Train F1 - Test F1| < 0.05

pipeline:
  random_state: 42
  test_size: 0.2
  val_size: 0.15
  cv_folds: 5
  max_train_test_gap: 0.05

data:
  raw_path: data/raw/youtoxic_english_1000.csv
  target_binary: IsToxic
  text_column: Text

augmentation:
  enabled: true
  strategy: back_translation
  source_lang: en
  pivot_lang: de  # higher diversity vs Spanish pivot
  min_words: 3
  max_words: 60
  rate_limit_every: 50
  rate_limit_sleep_sec: 1.0
  dedup:
    enabled: true
    cosine_threshold: 0.95
    embedding_model: sentence-transformers/all-MiniLM-L6-v2

transformer:
  model_id: unitary/toxic-bert
  max_length: 128
  freeze_mode: head_only  # entire backbone frozen; classifier only
  learning_rate: 2.0e-5
  weight_decay: 0.01
  max_epochs: 10
  batch_size: 8
  warmup_ratio: 0.1
  head_dropout: 0.3
  label_smoothing: 0.05
  early_stopping:
    patience: 3
    metric: f1_toxic
    gap_stop_enabled: false
    max_train_val_gap: 0.05
    gap_check_min_epoch: 2
  metric_for_best: f1_toxic
  threshold_tuning:
    enabled: true
    metric: f1_toxic
    min_threshold: 0.05
    max_threshold: 0.95
    step: 0.01

logistic_regression:
  C: 0.05
  max_iter: 2000
  class_weight: balanced
  solver: lbfgs
  gap_search:
    enabled: true
    max_gap: 0.05
    use_original_train_for_gap: true
    param_grid:
      - {C: 0.05, max_features: 250, min_df: 3}
      - {C: 0.03, max_features: 250, min_df: 5}
      - {C: 0.02, max_features: 250, min_df: 5}
      - {C: 0.01, max_features: 250, min_df: 8}
      - {C: 0.005, max_features: 250, min_df: 10}
  tfidf:
    max_features: 250
    ngram_range: [1, 2]
    sublinear_tf: true
    min_df: 3

ensemble:
  method: soft_vote
  bert_weight: 0.7
  lr_weight: 0.3
  threshold_tuning:
    enabled: true
    metric: f1_toxic

output:
  transformer_dir: models/expert_toxic_bert
  lr_path: models/expert_lr_tfidf.joblib
  ensemble_meta_path: models/expert_ensemble_meta.json
  reports_dir: reports/expert