Semantic Search
Ráépül: Hybrid Search
A szemantikus keresés algoritmikusan egyszerű (felhasználói szempontból), mégis hatékony eszköz különböző információegységek összegyűjtésére.
Adott: Szöveges chunk-ok egy \(\mathcal{D}\) halmaza, egy \(q\) kérdés.
Feladat: Keressük meg \(q\) segítségével azon \(\mathcal{D}\)-beli chunk-okat, melyek tartalmazzák a pontos válaszadáshoz szükséges információt.
A szemantikus keresés ezt a feladatot szemantikus beágyazásokkal próbálja meg kezelni. Egy szöveg szemantikus beágyazása egy olyan vektor, ami valamilyen módon megtartja a szöveges hasonlóságot; ha két szöveg „hasonló“ jelentéssel bír, akkor a beágyazásuk is „hasonló“ lesz. Az eljáráshoz ki kell választanunk egy beágyazási modellt (embedding), ezt fogva az eljárás pedig a következő
Szemantikus keresés
-
Vektorokká alakítjuk \(\mathcal{D}\) minden elemét (ezt elegendő egyszer megcsinálnunk!).
-
Vektorrá alakítjuk a \(q\) kérdést.
-
Összehasonlítjuk \(q\) vektorát minden \(\mathcal{D}\)-beli vektorával koszinusz hasonlóság segítségével, rendezzük a chunk-okat, és visszaadjuk a néhány leghasonlóbb találatot.
A semantic search egy sűrű beágyazás alapú bi-encoder. Ezek a fogalmak, bár bonyolultnak tűnhetnek, pontosan annyit írnak le jelenlegi esetben, mint amit ez a 3 lépés. A beágyazásokról és encoder-ekről több információt találhatunk a megfelelő koncepcióoldalon.
Egyetlen szöveges bemenet kell
Míg a chunk-keresést eredetileg \((q, C)\) keresési párra írjuk fel, a szemantikus keresés esetén csak egy \(q\) szöveges bemeneti lehetőségünk van. Így ha ki akarjuk egészíteni a kérdést kontextussal, azt bele kell fogalmaznunk abba.
A használt beágyazási modellt az application.yml fájl project.openai.models.embedding-model.model-name mezője tartalmazza, ez jelenleg az OpenAI text-embedding-3-large. A small-model mező használaton kívüli. A szemantikus keresés végrehajtását a SemanticSearchService, a chunk-ok vektorrá alakítását pedig az EmbeddingCreateService (illetve nyomokban a DocumentManagementEmbeddingService) végzi. A szemantikus keresés önmagában egy elemi keresési módszer, így itt nem paraméterezett, hanem a használati helyeken találjuk a paraméterezést.
Megjegyzések
Ismert hiba, hogy a text-embedding-3-large nem képes megfelelően kezelni HTML táblázatokat, ha ilyen vektorral keresünk, a találatok nagyon gyengék lesznek. Próbálunk ezért minden táblázatot markdown formában küldeni.