Уменьшен k до 5-10 и увеличен множитель для большей чувствительности score
This commit is contained in:
@@ -284,17 +284,15 @@ class VectorStore:
|
|||||||
neg_similarities = np.array([])
|
neg_similarities = np.array([])
|
||||||
|
|
||||||
# Используем топ-k ближайших примеров для более чувствительной оценки
|
# Используем топ-k ближайших примеров для более чувствительной оценки
|
||||||
# k выбирается динамически: минимум 10, но не больше 20% от общего количества
|
# Берем небольшое k (5-10) для большей чувствительности к различиям
|
||||||
k_pos = min(max(10, self.positive_count // 10), 50)
|
k_pos = min(10, max(5, len(pos_similarities)))
|
||||||
k_pos = min(k_pos, len(pos_similarities))
|
|
||||||
|
|
||||||
# Топ-k положительных примеров
|
# Топ-k положительных примеров (самые близкие)
|
||||||
top_k_pos_sim = float(np.mean(np.sort(pos_similarities)[-k_pos:]))
|
top_k_pos_sim = float(np.mean(np.sort(pos_similarities)[-k_pos:]))
|
||||||
|
|
||||||
# Для отрицательных: если их меньше k, берем все, иначе топ-k
|
# Для отрицательных: если их меньше k, берем все, иначе топ-k
|
||||||
if len(neg_similarities) > 0:
|
if len(neg_similarities) > 0:
|
||||||
k_neg = min(max(10, self.negative_count // 10), 50)
|
k_neg = min(10, max(5, len(neg_similarities)))
|
||||||
k_neg = min(k_neg, len(neg_similarities))
|
|
||||||
top_k_neg_sim = float(np.mean(np.sort(neg_similarities)[-k_neg:]))
|
top_k_neg_sim = float(np.mean(np.sort(neg_similarities)[-k_neg:]))
|
||||||
else:
|
else:
|
||||||
# Если нет отрицательных примеров, используем нейтральное значение
|
# Если нет отрицательных примеров, используем нейтральное значение
|
||||||
@@ -304,8 +302,12 @@ class VectorStore:
|
|||||||
# Используем более агрессивную нормализацию для малых различий
|
# Используем более агрессивную нормализацию для малых различий
|
||||||
diff = top_k_pos_sim - top_k_neg_sim
|
diff = top_k_pos_sim - top_k_neg_sim
|
||||||
|
|
||||||
|
# Увеличиваем множитель для большей чувствительности к малым различиям
|
||||||
|
# Базовый множитель умножаем на 10-20 для работы с топ-k (которые дают значения 0.95-0.99)
|
||||||
|
base_multiplier = self.score_multiplier * 15.0
|
||||||
|
|
||||||
# Адаптивный множитель: чем больше примеров, тем выше чувствительность
|
# Адаптивный множитель: чем больше примеров, тем выше чувствительность
|
||||||
adaptive_multiplier = self.score_multiplier * (1.0 + min(1.0, (self.positive_count + self.negative_count) / 1000))
|
adaptive_multiplier = base_multiplier * (1.0 + min(0.5, (self.positive_count + self.negative_count) / 2000))
|
||||||
|
|
||||||
score_neg_pos = 0.5 + (diff * adaptive_multiplier)
|
score_neg_pos = 0.5 + (diff * adaptive_multiplier)
|
||||||
score_neg_pos = max(0.0, min(1.0, score_neg_pos))
|
score_neg_pos = max(0.0, min(1.0, score_neg_pos))
|
||||||
|
|||||||
Reference in New Issue
Block a user