Recherche sémantique de tags OpenStreetMap en langage naturel français.
Transforme des requêtes comme "où manger", "parking vélo", "pharmacie ouverte" en tags OSM correspondants (amenity=restaurant, amenity=bicycle_parking, amenity=pharmacy).
Pipeline en 2 étapes :
- Embedding search - Recherche sémantique avec
intfloat/multilingual-e5-base - Reranking - Affinement avec cross-encoder
BAAI/bge-reranker-v2-m3
Performance : 98.8% recall sur 100 cas de test.
uv syncConstruire les index (nécessite GPU) :
switcherooctl launch uv run create-index.pyRecherche interactive :
switcherooctl launch uv run search.pyÉvaluation :
uv run test/evaluate.py├── search.py # CLI de recherche
├── create-index.py # Génération des index FAISS
├── utils/
│ ├── embedding_search.py # Recherche par embedding
│ ├── rerank_with_crossencoder.py # Reranking
│ └── query_expansion.py # Expansion de requête (expérimental)
├── data/
│ ├── osm_wiki_tags_cleaned.json # Tags OSM enrichis
│ ├── poi.index / attributes.index # Index FAISS
│ └── search_cases.json # Cas de test
└── test/
└── evaluate.py # Script d'évaluation
- API REST (FastAPI)
- Détection automatique POI vs attribut
- Support multilingue