An open API service indexing awesome lists of open source software.

https://github.com/pyramidheadshark/adaptive_search_pg

Adaptive Semantic Search Engine based on PostgreSQL (pgvector) & FastAPI. Implements a Feedback Loop to dynamically re-rank results using Log-Decay algorithms
https://github.com/pyramidheadshark/adaptive_search_pg

docker fastapi feedback-loop machine-learning nlp pgvector postgresql python ranking-algorithms semantic-search sentence-transformers student-project

Last synced: about 2 months ago
JSON representation

Adaptive Semantic Search Engine based on PostgreSQL (pgvector) & FastAPI. Implements a Feedback Loop to dynamically re-rank results using Log-Decay algorithms

Awesome Lists containing this project

README

          

# 🧠 Adaptive Semantic Search Engine

![Python](https://img.shields.io/badge/python-3.11-blue.svg)
![FastAPI](https://img.shields.io/badge/FastAPI-0.125-009688.svg)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791.svg)
![Pgvector](https://img.shields.io/badge/Extension-pgvector-orange.svg)
![Docker](https://img.shields.io/badge/Docker-Compose-2496ED.svg)
![License](https://img.shields.io/badge/license-MIT-green.svg)

> **ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚**: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сСмантичСского поиска ΠΈ статистичСского ранТирования Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ рСляционной Π‘Π£Π‘Π” PostgreSQL

---

### πŸ‘¨β€πŸŽ“ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

* **Авторы:** Π‘ΠΌΠΈΡ€Π½ΠΎΠ² Никита ([@pyramidheadshark](https://github.com/pyramidheadshark)), ΠšΠΈΡ€ΠΈΠ»Π» МСльников ([@Chaberis](https://github.com/Chaberis))
* **УнивСрситСт:** Π Π’Π£ МИРЭА, 3 курс
* **Дисциплина:** ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ срСдства манипулирования Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

---

## πŸ“– Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ поиск (Vector Search / Cosine Similarity) статичСн. Он Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° основС сСмантичСской близости тСкста. Если модСль считаСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹ΠΌ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΠΏΠ΅ всСгда, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ½Π°Ρ‡Π΅.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ **ДинамичСскоС Π Π΅-Ρ€Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Dynamic Re-ranking)**. БистСма "ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚" ΠΊΠ»ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ вСса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ранТирования.

### πŸ“Š Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²

НиТС прСдставлСн Π°Π½Π°Π»ΠΈΠ· эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ранТирования (Linear vs Log-Decay vs Sigmoid), ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ…ΠΎΠ΄Π΅ симуляции Π½Π° датасСтС NFCorpus.

![Benchmark Results](data/old/dashboard_img_results.png)

**ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄:** БтратСгия **Log-Decay** (ЛогарифмичСскоС Π·Π°Ρ‚ΡƒΡ…Π°Π½ΠΈΠ΅) ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, обСспСчивая быстрый рост рСлСвантности (MRR) Π±Π΅Π· риска пСрСобучСния ΠΈ Π½Π°ΠΊΡ€ΡƒΡ‚ΠΊΠΈ.

---

## πŸ›  ВСхничСский стСк

* **Core:** Python 3.11, FastAPI
* **Database:** PostgreSQL 16 + `pgvector`
* **ML:** `sentence-transformers` (модСль `all-MiniLM-L6-v2`)
* **Analytics:** Pandas, Plotly
* **Infrastructure:** Docker Compose, uv

---

## πŸš€ Установка ΠΈ запуск

### ВрСбования

* Docker & Docker Compose
* Π’ΠΎΠΊΠ΅Π½ HuggingFace (для скачивания датасСта)

### Пошаговая инструкция

1. **Настройка окруТСния:**
Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `.env` ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ваш Ρ‚ΠΎΠΊΠ΅Π½:

```bash
cp .env.example .env
# Π’ΠΏΠΈΡˆΠΈΡ‚Π΅ HF_TOKEN=... Π²Π½ΡƒΡ‚Ρ€ΠΈ .env
```

2. **Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:**

```bash
make build
make up
```

*ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π±ΡƒΠ΄Π΅Ρ‚ скачана ML-модСль.*

3. **Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… (ETL):**
Π‘ΠΊΡ€ΠΈΠΏΡ‚ скачаСт датасСт NFCorpus, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ сохранит Π² Postgres.

```bash
make load
```

4. **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ API:**

```bash
curl -X POST "http://localhost:8000/api/v1/search" \
-H "Content-Type: application/json" \
-d '{"query": "vitamin c benefits", "limit": 3}'
```

---

## πŸ§ͺ ВоспроизвСдСниС исслСдования

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ симуляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эмулируСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (ΠΊΠ»ΠΈΠΊΠΈ, ΡˆΡƒΠΌ, ошибки) ΠΈ сравниваСт матСматичСскиС стратСгии.

1. **Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ (3 сцСнария: ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΡˆΡƒΠΌ, насыщСниС):**

```bash
docker compose exec app python -m src.scripts.benchmark
```

2. **Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ HTML-ΠΎΡ‚Ρ‡Π΅Ρ‚:**

```bash
docker compose exec app python -m src.scripts.visualize
```

3. **Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:** ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `data/final_advanced_dashboard_ru.html`.

---

## πŸ“‚ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

* `src/database.py` β€” Π‘Ρ…Π΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (`Document`, `Interaction`) ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π‘Π”
* `src/search.py` β€” Π―Π΄Ρ€ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ: матСматичСскиС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Ρ€Π΅-ранТирования
* `src/ml.py` β€” Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈ.
* `src/main.py` β€” API Ρ€ΠΎΡƒΡ‚Ρ‹ ΠΈ конфигурация
* `src/scripts/` β€” Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ ETL ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ

---

## βœ… ВСстированиС

Запуск ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСстов (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Feedback Loop):

```bash
make test
```