Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 11

Хибридно търсене

Ключови думи и смисъл заедно: къде всеки от двата подхода се проваля сам и как резултатите им се обединяват в едно класиране.

Всеки подход се проваля по свой начин

Само ключови думиСамо вектори
Проваля се присиноними, перифрази, друга форма на думататочни кодове, имена, номера
Пример за провал„как да сваля температура“ не намира „лечение на треска“„грешка E-4021“ намира „общи проблеми при работа“
Отрицаниеразпознава думата „не“често го подминава
Нова терминологиянамира я, ако е изписана точноможе да не е в обучението на модела

Хибридно търсене

Изпълнение и на двете търсения върху една заявка и обединяване на резултатите в едно класиране.

заявкапо ключови думиточни съвпадения, кодовепо смисълсиноними, перифразиобщо класиране
Две търсения, един резултат — така се покриват и двата вида провал.

Търсене по ключови думи в базата

PostgreSQL има вградено пълнотекстово търсене. То не е просто LIKE — прилага нормализиране на думите и класиране по честота.

ALTER TABLE parcheta ADD COLUMN tsv tsvector
    GENERATED ALWAYS AS (to_tsvector('simple', tekst)) STORED;

CREATE INDEX ON parcheta USING GIN (tsv);

SELECT id, tekst, ts_rank(tsv, plainto_tsquery('simple', $1)) AS ocenka
FROM parcheta
WHERE tsv @@ plainto_tsquery('simple', $1)
ORDER BY ocenka DESC
LIMIT 10;

Български език

Речниците за стеминг на български не са вградени навсякъде. Ако липсват, се използва simple — тогава „урок“ и „уроци“ са различни думи. Точно тази слабост покрива смисловото търсене.

Как се обединяват класиранията

Проблемът

Двете търсения дават несравними числа: близост между 0 и 1 и оценка за релевантност с произволен мащаб. Директното им събиране е безсмислено.

Обединяване по ранг (RRF)

Най-простото надеждно решение: игнорираме числата и използваме само местата. Всеки резултат получава точки 1 / (k + място) от всяко класиране, а точките се събират.

място 1 → 1/61 = 0.0164     (при k = 60)
място 2 → 1/62 = 0.0161
място 3 → 1/63 = 0.0159

Документ на 2-ро място в едното и 3-то в другото:
0.0161 + 0.0159 = 0.0320  — изпреварва документ, който е 1-ви само в едното.
  • Не изисква настройка на тегла между несравними мащаби.
  • Награждава резултати, които и двете търсения намират.
  • Работи и когато едното търсене не върне нищо.

Претегляне

Алтернатива: и двете оценки се привеждат към 0–1 и се смесват с тегло. По-гъвкаво, но изисква измерване, за да се избере теглото — иначе е гадаене.

Пренареждане

Трета стъпка, която дава голямо подобрение: взимат се първите 20–50 резултата от хибридното търсене и се подават на по-скъп модел, който оценява всеки спрямо заявката поотделно.

  1. Търсене — бързо, върху цялата колекция, дава 50 кандидата.
  2. Пренареждане — бавно, но само върху 50, дава по-добър ред.
  3. Показват се първите 5.

Защо е разумно

Скъпият модел се прилага върху 50 записа вместо върху милион. Това е същият принцип като в базите: груб филтър, после точна проверка.