Сервис оценки семантической близости предметных областей на основе ансамбля методов SBERT и TF-IDF.
Проект позволяет автоматически формировать корпус терминов из научных источников, рассчитывать семантическую близость предметных областей и строить графы их взаимосвязей.
-
автоматический сбор терминов из arXiv;
-
автоматический сбор терминов из Wikipedia;
-
загрузка терминов через API;
-
вычисление близости предметных областей с использованием:
- SBERT;
- TF-IDF;
- ансамблевой модели;
-
построение графа близости предметных областей;
-
REST API со Swagger-интерфейсом;
-
кеширование результатов в Redis.
Для первого запуска рекомендуется выполнить сборку образов:
docker compose up --buildПри последующих запусках достаточно:
docker compose upПосле запуска сервис будет доступен по адресу:
Swagger UI
http://localhost:8000/docs
Проверка работоспособности
http://localhost:8000/health
docker compose downПроверить, что контейнеры остановлены:
docker psДля MacBook с процессорами Apple Silicon проект запускается в CPU-режиме.
В docker-compose.yml используется
DEVICE=cpuи отключена поддержка NVIDIA GPU.
Такой режим является рекомендуемым для macOS.
Для использования GPU необходимо установить NVIDIA Container Toolkit.
В docker-compose.yml нужно раскомментировать строки
runtime: nvidiaи
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]а также заменить
DEVICE=cpuна
DEVICE=cudaПосле этого контейнеры будут использовать видеокарту NVIDIA для вычисления эмбеддингов.
backend/ FastAPI
frontend/ Web-интерфейс
scripts/ Скрипты формирования корпуса терминов
data/ Датасеты и результаты вычислений
Проект поддерживает автоматический сбор терминов.
Сбор терминов из аннотаций статей:
python3 scripts/harvest_arxiv.py \
--output data/terms.csv \
--limit 300Параметр --limit задаёт количество статей для каждой предметной области.
Сбор терминов из статей Wikipedia:
python3 scripts/harvest_wikipedia.pyПосле формирования корпуса необходимо перезапустить backend:
docker compose restart backendGET /api/v1/domains
GET /api/v1/domains/{domain1}/similarity/{domain2}
GET /api/v1/similarity/ensemble/{domain1}/{domain2}
Возвращает:
- итоговую близость;
- оценку SBERT;
- оценку TF-IDF;
- веса моделей.
GET /api/v1/graph/similarity
- FastAPI
- SentenceTransformers (SBERT)
- scikit-learn
- Redis
- Celery
- Docker Compose
- Swagger UI
При первом запуске автоматически загружается модель
ai-forever/sbert_large_nlu_ru
Размер модели составляет около 2 ГБ, поэтому первый запуск может занимать несколько минут.
Модель сохраняется в Docker Volume huggingface_cache, поэтому повторные запуски происходят значительно быстрее.
Реализовано:
- автоматический сбор терминов из arXiv;
- автоматический сбор терминов из Wikipedia;
- построение корпуса терминов;
- вычисление близости SBERT;
- вычисление близости TF-IDF;
- ансамблевая модель оценки;
- построение графа сходства предметных областей;
- REST API;
- Swagger UI;
- Docker-развёртывание.
Проект находится в стадии активной разработки.