Kihagyás

Semantic Search

text-embedding-3-large

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.

Chunk-keresés

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

  1. Vektorokká alakítjuk \(\mathcal{D}\) minden elemét (ezt elegendő egyszer megcsinálnunk!).

  2. Vektorrá alakítjuk a \(q\) kérdést.

  3. Ö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.