Замена 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,7 +1,7 @@
"""
FastAPI приложение RAG сервиса.
FastAPI приложение Embedding сервиса.
Сервис для векторного скоринга текстов с использованием ruBERT.
Сервис для векторного скоринга текстов с использованием sentence-transformers.
"""
import asyncio
@@ -90,7 +90,7 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
global _autosave_task
setup_logging()
logger.info(f"RAG Service v{__version__} запускается...")
logger.info(f"Embedding Service v{__version__} запускается...")
settings = get_settings()
logger.info(f"Настройки: model={settings.model_name}, vectors_path={settings.vectors_path}")
@@ -112,7 +112,7 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
# logger.info("Прогрев модели при запуске...")
# await service.warmup()
logger.info("RAG Service готов к работе")
logger.info("Embedding Service готов к работе")
yield
@@ -125,21 +125,21 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
pass
# При остановке сохраняем векторы
logger.info("RAG Service останавливается, финальное сохранение векторов...")
logger.info("Embedding Service останавливается, финальное сохранение векторов...")
try:
service.save_vectors()
logger.info("Векторы сохранены")
except Exception as e:
logger.error(f"Ошибка сохранения векторов: {e}")
logger.info("RAG Service остановлен")
logger.info("Embedding Service остановлен")
# Создание приложения
app = FastAPI(
title="RAG Service",
title="Embedding Service",
description="""
Сервис векторного скоринга текстов с использованием ruBERT.
Сервис векторного скоринга текстов с использованием sentence-transformers.
## Возможности
@@ -150,10 +150,10 @@ app = FastAPI(
## Алгоритм скоринга
1. Текст преобразуется в вектор через ruBERT (768 измерений)
2. Вычисляется косинусное сходство с положительными примерами
3. Вычисляется косинусное сходство с отрицательными примерами
4. Финальный скор = разница между сходствами, нормализованная в [0, 1]
1. Текст преобразуется в вектор через sentence-transformers/all-MiniLM-L12-v2 (384 измерения)
2. Вычисляется косинусное сходство с положительными примерами (топ-k ближайших)
3. Вычисляется косинусное сходство с отрицательными примерами (топ-k ближайших)
4. Финальный скор = (diff * multiplier + 1) / 2, где diff = avg_pos - avg_neg, нормализованный в [0, 1]
""",
version=__version__,
lifespan=lifespan,