Семантичний пошук по 5 000+ статтях законодавства: embeddings, chunking та Qdrant
Ключові слова знаходять те, що ви вже знаєте. Семантичний пошук знаходить те, що вам потрібно. Ми розбили 12 українських кодексів на 5 191 статтю, векторизували кожну через VoyageAI embeddings, і тепер запит "відповідальність за неякісний ремонт" знаходить статті, які не містять жодного з цих слів.
Семантичний пошук по 5 000+ статтях законодавства
Ключові слова знаходять те, що ви вже знаєте. Семантичний пошук знаходить те, що вам потрібно.
Проблема з ключовими словами
Юрист шукає "відповідальність за неякісний ремонт квартири". Класичний пошук шукає ці слова. Але стаття 858 ЦК говорить про "недоліки роботи" та "вимоги замовника до підрядника". Жодного збігу ключових слів — але це саме та стаття.
Семантичний пошук розуміє значення, а не слова.
Як ми це побудували
Крок 1: Секціонування законодавства
12 українських кодексів — це не 12 документів. Це 5 191 стаття, кожна з яких є самостійною одиницею знання. Наш SemanticSectionizer розбиває кодекси на логічні секції:
- Стаття — основна одиниця (90% випадків)
- Частина статті — коли стаття занадто велика (>2000 токенів)
- Глава/Розділ — для контексту при пошуку
Кожна секція зберігається з метаданими: кодекс, номер статті, назва, ієрархічний шлях (Книга → Розділ → Глава → Стаття).
Крок 2: Векторизація
Кожна секція проходить через VoyageAI voyage-3.5:
- Вхід: текст статті + назва + контекстний шлях
- Вихід: вектор розміром 1024
- Зберігання: Qdrant з метаданими для фільтрації
Крок 3: Пошук
Запит користувача → embedding → cosine similarity в Qdrant → топ-N результатів з порогом релевантності > 0.75.
Фільтрація за метаданими — юрист може звузити до конкретного кодексу, глави, або типу норми.
Реальні приклади
| Запит | Ключовий пошук знайде | Семантичний пошук знайде |
|---|---|---|
| "відповідальність за неякісний ремонт" | Нічого | Ст. 858 ЦК (недоліки роботи підрядника) |
| "коли можна не платити аліменти" | Нічого | Ст. 188, 190, 196 СК (звільнення від сплати) |
| "захист від незаконного звільнення" | Ст. із словом "звільнення" | + Ст. 235 КЗпП (поновлення на роботі), Ст. 237-1 (відшкодування) |
Кеш та актуальність
- Тексти завантажуються з офіційного API Верховної Ради
- TTL кешу: 30 днів
- При зміні статті — автоматичне переіндексування
- 5 191 стаття × 1024 dimensions = ~21MB у Qdrant
Семантичний пошук не замінює точний — він доповнює. Разом вони дають повну картину.