Усилен разрыв score: уменьшен k до 3-5, увеличен множитель до 25x, добавлено нелинейное преобразование
This commit is contained in:
@@ -284,15 +284,15 @@ class VectorStore:
|
||||
neg_similarities = np.array([])
|
||||
|
||||
# Используем топ-k ближайших примеров для более чувствительной оценки
|
||||
# Берем небольшое k (5-10) для большей чувствительности к различиям
|
||||
k_pos = min(10, max(5, len(pos_similarities)))
|
||||
# Берем очень небольшое k (3-5) для максимальной чувствительности к различиям
|
||||
k_pos = min(5, max(3, len(pos_similarities)))
|
||||
|
||||
# Топ-k положительных примеров (самые близкие)
|
||||
top_k_pos_sim = float(np.mean(np.sort(pos_similarities)[-k_pos:]))
|
||||
|
||||
# Для отрицательных: если их меньше k, берем все, иначе топ-k
|
||||
if len(neg_similarities) > 0:
|
||||
k_neg = min(10, max(5, len(neg_similarities)))
|
||||
k_neg = min(5, max(3, len(neg_similarities)))
|
||||
top_k_neg_sim = float(np.mean(np.sort(neg_similarities)[-k_neg:]))
|
||||
else:
|
||||
# Если нет отрицательных примеров, используем нейтральное значение
|
||||
@@ -303,13 +303,20 @@ class VectorStore:
|
||||
diff = top_k_pos_sim - top_k_neg_sim
|
||||
|
||||
# Увеличиваем множитель для большей чувствительности к малым различиям
|
||||
# Базовый множитель умножаем на 10-20 для работы с топ-k (которые дают значения 0.95-0.99)
|
||||
base_multiplier = self.score_multiplier * 15.0
|
||||
# Базовый множитель умножаем на 25-30 для работы с топ-k (которые дают значения 0.95-0.99)
|
||||
base_multiplier = self.score_multiplier * 25.0
|
||||
|
||||
# Адаптивный множитель: чем больше примеров, тем выше чувствительность
|
||||
# При 500 примерах: 1.25, при 1000+: 1.5
|
||||
adaptive_multiplier = base_multiplier * (1.0 + min(0.5, (self.positive_count + self.negative_count) / 2000))
|
||||
|
||||
score_neg_pos = 0.5 + (diff * adaptive_multiplier)
|
||||
# Используем нелинейное преобразование для усиления различий
|
||||
# Применяем квадратичную функцию к разнице для большей чувствительности
|
||||
# Если diff положительный - усиливаем, если отрицательный - тоже усиливаем
|
||||
sign = 1.0 if diff >= 0 else -1.0
|
||||
amplified_diff = sign * (abs(diff) ** 0.8) * 1.2 # Слегка нелинейное усиление
|
||||
|
||||
score_neg_pos = 0.5 + (amplified_diff * adaptive_multiplier)
|
||||
score_neg_pos = max(0.0, min(1.0, score_neg_pos))
|
||||
|
||||
# === Вариант 2: pos only (только положительные, топ-k ближайших) ===
|
||||
|
||||
Reference in New Issue
Block a user