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
- Host: GitHub
- URL: https://github.com/pyramidheadshark/adaptive_search_pg
- Owner: pyramidheadshark
- Created: 2025-12-20T21:21:09.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-12-23T18:41:13.000Z (5 months ago)
- Last Synced: 2025-12-31T10:46:38.779Z (5 months ago)
- Topics: docker, fastapi, feedback-loop, machine-learning, nlp, pgvector, postgresql, python, ranking-algorithms, semantic-search, sentence-transformers, student-project
- Language: Python
- Homepage:
- Size: 11 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# π§ Adaptive Semantic Search Engine






> **ΠΡΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ**: ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ Π‘Π£ΠΠ 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.

**ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄:** Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ **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
```