Замена RuBERT на sentence-transformers/all-MiniLM-L12-v2, упрощение формулы расчета, поддержка загрузки из отдельных .npy файлов

This commit is contained in:
2026-01-28 20:19:13 +03:00
parent f3e31e4310
commit beca61bd90
11 changed files with 178 additions and 248 deletions

View File

@@ -1,5 +1,5 @@
"""
Pydantic схемы для API RAG сервиса.
Pydantic схемы для API Embedding сервиса.
"""
from typing import Any, Dict, Optional
@@ -65,7 +65,7 @@ class ScoreResponse(BaseModel):
"meta": {
"positive_examples": 500,
"negative_examples": 350,
"model": "DeepPavlov/rubert-base-cased",
"model": "sentence-transformers/all-MiniLM-L12-v2",
"timestamp": 1706270000
}
}
@@ -111,14 +111,14 @@ class StatsResponse(BaseModel):
model_config = {
"json_schema_extra": {
"example": {
"model_name": "DeepPavlov/rubert-base-cased",
"model_name": "sentence-transformers/all-MiniLM-L12-v2",
"model_loaded": True,
"device": "cpu",
"vector_store": {
"positive_count": 500,
"negative_count": 350,
"total_count": 850,
"vector_dim": 768,
"vector_dim": 384,
"max_examples": 10000
}
}
@@ -180,39 +180,21 @@ class ScoringParamsResponse(BaseModel):
score_multiplier: float = Field(
...,
description=(
"Базовый множитель для усиления разницы в скорах. "
"Используется как основа для расчета финального множителя. "
"Множитель для масштабирования разницы в скорах. "
"Используется в формуле: score = (diff * score_multiplier + 1) / 2, "
"где diff = avg_pos - avg_neg (разница средних сходств топ-k примеров). "
"Чем больше значение, тем сильнее влияние разницы между положительными и отрицательными примерами на итоговый score. "
"Рекомендуемое значение: 5.0"
)
)
k_min: int = Field(
k: int = Field(
...,
description=(
"Минимальное количество ближайших примеров для расчета среднего сходства. "
"Количество ближайших примеров для расчета среднего сходства. "
"Алгоритм берет топ-k самых похожих примеров из каждого типа (положительные/отрицательные) "
"и вычисляет среднее косинусное сходство. "
"Меньшее значение k делает алгоритм более чувствительным к различиям, но может быть менее стабильным. "
"Рекомендуемое значение: 5"
)
)
k_max: int = Field(
...,
description=(
"Максимальное количество ближайших примеров для расчета среднего сходства. "
"Алгоритм выбирает k в диапазоне [k_min, k_max] в зависимости от количества доступных примеров. "
"Большее значение k делает алгоритм более стабильным, но менее чувствительным к различиям. "
"Должно быть >= k_min. Рекомендуемое значение: 10"
)
)
base_multiplier_factor: float = Field(
...,
description=(
"Множитель для базового score_multiplier. "
"Финальный множитель рассчитывается как: score_multiplier * base_multiplier_factor * адаптивный_коэффициент. "
"Этот параметр усиливает влияние разницы между положительными и отрицательными примерами. "
"Чем больше значение, тем больше диапазон итогового score (от 0 до 1). "
"Рекомендуемое значение: 15.0"
"Рекомендуемое значение: 3"
)
)
@@ -220,9 +202,7 @@ class ScoringParamsResponse(BaseModel):
"json_schema_extra": {
"example": {
"score_multiplier": 5.0,
"k_min": 5,
"k_max": 10,
"base_multiplier_factor": 15.0
"k": 3
}
}
}
@@ -234,42 +214,22 @@ class UpdateScoringParamsRequest(BaseModel):
None,
gt=0,
description=(
"Базовый множитель для усиления разницы в скорах. "
"Используется как основа для расчета финального множителя. "
"Множитель для масштабирования разницы в скорах. "
"Используется в формуле: score = (diff * score_multiplier + 1) / 2, "
"где diff = avg_pos - avg_neg (разница средних сходств топ-k примеров). "
"Чем больше значение, тем сильнее влияние разницы между положительными и отрицательными примерами на итоговый score. "
"Должен быть > 0. Рекомендуемое значение: 5.0"
)
)
k_min: Optional[int] = Field(
k: Optional[int] = Field(
None,
ge=1,
description=(
"Минимальное количество ближайших примеров для расчета среднего сходства. "
"Количество ближайших примеров для расчета среднего сходства. "
"Алгоритм берет топ-k самых похожих примеров из каждого типа (положительные/отрицательные) "
"и вычисляет среднее косинусное сходство. "
"Меньшее значение k делает алгоритм более чувствительным к различиям, но может быть менее стабильным. "
"Должно быть >= 1. Рекомендуемое значение: 5"
)
)
k_max: Optional[int] = Field(
None,
ge=1,
description=(
"Максимальное количество ближайших примеров для расчета среднего сходства. "
"Алгоритм выбирает k в диапазоне [k_min, k_max] в зависимости от количества доступных примеров. "
"Большее значение k делает алгоритм более стабильным, но менее чувствительным к различиям. "
"Должно быть >= 1 и >= k_min. Рекомендуемое значение: 10"
)
)
base_multiplier_factor: Optional[float] = Field(
None,
gt=0,
description=(
"Множитель для базового score_multiplier. "
"Финальный множитель рассчитывается как: score_multiplier * base_multiplier_factor * адаптивный_коэффициент. "
"Этот параметр усиливает влияние разницы между положительными и отрицательными примерами. "
"Чем больше значение, тем больше диапазон итогового score (от 0 до 1). "
"Должен быть > 0. Рекомендуемое значение: 15.0"
"Должно быть >= 1. Рекомендуемое значение: 3"
)
)
@@ -277,9 +237,7 @@ class UpdateScoringParamsRequest(BaseModel):
"json_schema_extra": {
"example": {
"score_multiplier": 5.0,
"k_min": 5,
"k_max": 10,
"base_multiplier_factor": 15.0
"k": 3
}
}
}