From 671ee4657a74e4726c220bcf9f0794081bff0403 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 28 Jan 2026 00:30:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=81=D0=B8=D0=BB=D0=B5=D0=BD=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D1=80=D1=8B=D0=B2=20score:=20=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8C=D1=88=D0=B5=D0=BD=20k=20=D0=B4=D0=BE=203-5,=20?= =?UTF-8?q?=D1=83=D0=B2=D0=B5=D0=BB=D0=B8=D1=87=D0=B5=D0=BD=20=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=D0=B6=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=20=D0=B4=D0=BE=2025x?= =?UTF-8?q?,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=D0=BD=D0=B5=D0=B9=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/storage/vector_store.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/storage/vector_store.py b/app/storage/vector_store.py index 7ee7d4e..c99dfbb 100644 --- a/app/storage/vector_store.py +++ b/app/storage/vector_store.py @@ -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 ближайших) ===