Kihagyás

Beágyazások, encoder-ek

A következő leírás a beágyazásokról, és az azokhoz szorosan kapcsolódó „encoder“ struktúrákról szól. Először a beágyazásokat definiáljuk, kimagasló figyelmet fordítva a szemantikus beágyazásra. Ezek után rátérünk a hasonlóság vizsgálatára encoder-ek használatával.

Fontos, hogy a szócikk nem gépi tanulási algoritmusokként tekint az alábbi módszerekre, hanem feladat-szinten definiálja azokat. Ez az encoder-eknél olyan szempontból lényeges, hogy a legtöbb leírás a BERT modell irányából közelíti meg a témát, viszont mi ettől eltekintünk.

Általánosítások a szócikkben

Elöljáróban megjegyezzük, hogy bár próbálunk általánosak lenni, a definíciók teljes általánossággal való szabatos leírása a szócikk olvashatatlanságához vezetne. Ugyanakkor a szócikk során tárgyalunk általánosítási irányokat az ilyen típusú mezőkben.

Beágyazások – Hasonló jelentés, hasonló vektorok

Mik azok a beágyazások?

Egy RAG pipeline építésekor sokszor felmerül, hogy valamiféle bemenetet tartalmilag szeretnénk összehasonlítani néhány opcióval, majd kiválasztani ezek közül a legjobb(ak)at. Ilyen lehet például egy döntés („milyen típusú kérdést ez?“), de információszegmensek összegyűjtése is alkalmazható egy ilyen módszer (melyek a leghasonlóbb szövegek a bemenethez?). Ilyen eljárásoknál számos esetben alapvető elvárás, hogy az összehasonlítás gyors legyen, akár megfelelő előfeldolgozást alkalmazva.

A beágyazások ezt az igényt vektorterek és vektorhasonlóságok segítségével próbálják kezelni.

Beágyazások

Adott: Egy \(\mathbb{X}\) bemeneti séma és egy \(\mathcal{V}\) vektortér, illetve valamilyen módszer, hogy \(\mathbb{X}\) sémájú elemek viszonylagos hasonlóságát eldöntsük (azaz ilyet tudunk mondani: „\(x_2\) hasonlóbb \(y\)-hoz, mint \(x_1\)“).

Feladat: Adjunk meg egy \(E:\mathbb{X} \rightarrow \mathcal{V}\) beágyazó eljárást és egy \(s:\mathcal{V}\times\mathcal{V} \rightarrow \mathbb{R}\) hasonlóságfüggvényt, hogy \(\mathbb{X}\) formátumú \(x_1\), \(x_2\) és \(y\) bemenetekre \(s(E(x_1), E(y)) < s(E(x_2), E(y))\) akkor és csak akkor, ha \(x_2\) „hasonlóbb“ \(y\)-hoz, mint \(x_1\).

Ez a definíció elsőre bonyolultabbnak tűnhet amilyen, aminek részben az általánosság az oka. Szabadszavasan tulajdonképpen a feladat annyiról szól, hogy tetszőleges bemenetet szeretnénk elkódolni egy vektorban úgy, hogy utána az így kapott vektorokat érdemileg össze tudjuk hasonlítani (valamiféle \(s\) vektorhasonlósági mérték alapján).

Hasonlóság vs. távolság

A beágyazási feladatot úgy is definiálhatnánk, hogy egy hasonlóságfüggvény helyett egy távolságfüggvény áll rendelkezésünkre; ekkor nyilván két elem annál hasonlóbb, minél kisebb a távolságuk. Következik, hogy ha egy távolságfüggvényt negálunk, abból megfelelő hasonlóságfüggvényt kaphatunk. Több gyakran használt hasonlóságfüggvény is ezzel a logikával képződött.

A beágyazási feladat leírásával kapcsolatban néhány dolgot fontos konkretizálnunk, mert ilyen általánosságban ritkán kell gondolnunk a feladatra. Az első, hogy általában \(\mathcal{V}\) az \(\mathbb{R}^n\) (azaz egy vektor egy \(n\) hosszú, valós számokból álló tömb). A második, hogy célszerű feltennünk, hogy \(s\) szimmetrikus („\(x\) olyan hasonló \(y\)-hoz, mint \(y\) \(x\)-hez“); később kitérünk specifikus \(s\)-ként alkalmazott függvényekre. Ugyanakkor azt is fontos megemlítenünk, hogy a „hasonlóság“ fogalma az feladatra specifikus, így ezen nem tudunk pontosítani.

Végül megjegyezzük, hogy a szakaszban definiált beágyazási feladatot szokás szimmetrikus beágyazási feladatnak nevezni; ennek indoklására a következő szakaszban térünk ki. A gyakorlatban jelenleg szimmetrikus beágyazási algoritmusokat használunk, így kizárólag ezen szakasz segítségével is tovább haladhatunk az encoder-ek és a szemantikus keresés leírásához.

Miért „beágyazás“?

Matematikában ha van egy \(f:X\rightarrow Y\) függvényünk, amely az \(Y\)-ba transzformálás során megőriz valamiféle \(X\)-ben fellelhető tulajdonságot, akkor szokás azt mondani, hogy \(X\)-et beágyazzuk \(Y\)-ba \(f\) segítségével („X elemei ugyanúgy működnek valamilyen aspektus szerint, mint a képeik Y-ban“). Jelenlegi esetünkben \(X\) szerepét a megfelelő formátumú bemenetek, \(Y\) szerepét pedig a vektortér játssza. A tulajdonság, amit meg kívánunk őrizni, az a „hasonlóság“ fogalma.

Sűrű“ és „ritka“ beágyazások

Beágyazások esetén szokás beszélni a „sűrűség“ fogalmáról. Egy eljárás ritka beágyazásokat készít, ha az előállított vektorok jellemzően nagy mennyiségben 0 értékeket tartalmaznak („ritkán“ helyezkednek el benne valós értékek). Ezzel szemben egy eljárás sűrű beágyazásokat készít, ha a gyártott reprezentációk majdnem összes koordinátáján nem-0 érték található.

Ritka beágyazások esetén gyakran megfigyelhető, hogy az egyes koordináták egy-egy jól definiálható jellemzőhöz tartoznak, és annak megjelenési erősségét mutatják. Sőt, ennek megfordításával elő is állíthatunk ritka beágyazásokat: definiáljunk rengeteg tulajdonságot, és „indikátor“-jellegűen töltsük ki a koordinátákat. Ezzel szemben a sűrű beágyazásoknál a különböző aspektusok megjelenése nem látható ennyire egyértelműen.

A TF-IDF is beágyazás!

Bár nem ebben a szócikkben tárgyaljuk, a TF-IDF algoritmus egy ritka beágyazásnak tekinthető.

Általánosítsunk!

A definíció akkor is működik, ha nem követeljük meg, hogy a „beágyazó“ függvényünk egy vektortérbe képezzen. Az összehasonlítás szempontjából elegendő, ha csak ennyit tudunk: összehasonlítani. Ehhez viszont tetszőleges halmazba képezhetünk, amíg

A vektorok hasonlósága

Egy beágyazási eljárás készítésének elemi kérdése, hogy mit tekintsünk vektorhasonlósági mértéknek. Itt több szempontot érdemes figyelembe vennünk, például (a teljesség igénye nélkül):

  • Szeretnénk-e, hogy a mérték korlátos legyen?
  • Mennyire hatékonyan akarjuk kiszámolni két vektor hasonlóságát
  • Szimmetrikusnak tekinthető az eredeti elemeken vett hasonlóság?
  • A vektorok nagysága hordoz releváns információt, vagy inkább csak az irányuk?

Adott beágyazási módszer által létrehozott vektorok különböző vektorhasonlósági mértékek szerint különböző információt tartanak meg, és a nem megfelelő mértékkel akár olyan hasonlósági értékeket is kaphatunk, melyeknek sok „jelentése“ nincs, egyáltalán nem írják le két elem valódi közelségét. Ez nem jelenti azt, hogy egy módszerhez kizárólag egy értelmes mérték létezik, ugyanakkor célszerű utánanézni, hogy adott beágyazásoknál mely mértékekkel körülbelül milyen információt lehet kinyerni az elemek kapcsolatára vonatkozóan, illetve hogy mi ajánlott az eljáráshoz.

Most definiálunk néhány népszerű hasonlósági mértéket. Elöljáróban annyit megemlítünk, hogy a gyakori hasonlósági mértékek sokszor valamiféle egyszerű lineáris algebrai számolást végeznek. Ezekkel a sebesség kérdése igen jól kezelhető, mivel a lineáris algebrai programcsomagok rendkívül jól optimalizáltak szoktak lenni. A mértékek definiálásakor a vektorokat \(\mathbf{a}\)-val és \(\mathbf{b}\)-vel jelöljük.

Koszinusz hasonlóság

Az NLP területeken előszeretettel alkalmazott hasonlósági mérték. Azzal a feltételezéssel él, hogy a vektorok olyanok, hogy releváns jelentéstartalmukat javarészt az irányuk tartalmazza. A mértéket a következőként definiáljuk, ez a két vektor által bezárt szög koszinusza:

\[ s(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{a}\| \cdot \|\mathbf{b}\| } \]

Az így kapott érték a \([-1, 1]\) intervallumban van. Néha ezt szokás a \([0, 1]\) intervallumra normálni, ezzel egy „hasonlósági valószínűséget“ kapva.

Skaláris szorzat

A skaláris szorzat a koszinusz hasonlósághoz képes annyiban különbözik, hogy az vektorok egyezőségének iránya mellett a nagyságát is érdekesnek tartja. A mérték egyszerűen a két vektor skaláris szorzata:

\[ s(\mathbf{a}, \mathbf{b}) = \mathbf{a}\cdot\mathbf{b} \]

A kapott értéket normálni általánosságban nehéz, bizonyos esetekben nem is lehet értelmesen (lásd például itt).

\(L_2\) hasonlóság (és \(L_p\))

A mértékek ezen családja egyszerűen veszi a vektorok euklideszi távolságát (vagy \(p\)-norma szerintit). Hogy ezt hasonlósággá alakítsuk, a kapott értéket negálnunk kell (így tehát ez egy nem-pozitív hasonlósági mérték lesz).

\[ s(\mathbf{a}, \mathbf{b}) = \|\mathbf{a}-\mathbf{b}\|_p \]

Amennyiben van valami értelmes korlátunk az elemek távolságára, ezt is lehet normalizálni tetszőleges intervallumba. Érdekesség, hogy az \(L_2\) és a koszinusz hasonlóság azonos rendezést hoz létre, de nem lineáris transzformációi egymásnak.

Szemantikus beágyazás

Egy beágyazás sokféle lehet. Végső soron célja kizárólag annyi, hogy valamiféle hasonlóságot megőrizzen, de ez a hasonlóság lehet az „Y“ betűk száma is akár (bármilyen értelmetlennek tűnik ez).

Amikor szemantikus beágyazásról beszélünk, akkor az alatt azt értjük, hogy a megőrizendő hasonlóság a jelentéstartalom. Egy szemantikus beágyazási módszer bemenete egy természetes nyelvű szöveg (kivéve lásd. multimodalitás), két szöveget pedig hasonlónak tekintünk, ha témájuk és jelentésük közel áll egymáshoz.

Ez nem egy átfogalmazás?

De. A hasonlóságot nagyon nehéz definiálni, sokszor „érzet“ alapú, és az érzet pedig szubjektív. Ezeknek a modelleknek a tanító adatában példák és ellenpéldák találhatók, és ennek megfelelően a reprezentációk közelsége vagy távolsága tudja tükrözni a példákban található különböző elfogultságokat és hiányos területeket.

A szemantikus beágyazási modellek a gyakorlatban általában neurális hálók. Lokális modellekkel való kísérletezésre a Sentence Transformers könyvtár igen egyszerűen használható. Nagyobb szolgáltatóknak vannak API-n keresztül elérhető szemantikus beágyazási modelljei (pl. OpenAI esetén text-embedding-3-large).

Szóalapú beágyazások

A teljes szöveg alapú beágyazások megjelenése előtt gyakoriak voltak szóalapú beágyazási modellek. Ennek klasszikus példája a Word2Vec modellcsalád, melyek tanítási módjai azon a kérdésen alapszanak, hogy egy szót mennyire határoz meg a szövegkörnyezete.

Multimodalitás

Bár a Guru kapcsán jelenleg multimodális feldolgozással nem foglalkozunk, léteznek olyan modellek, melyek egyszerre képesek több típusú bemenetet kezelni (pl. szöveg és abba beágyazott képek). Ezekből ugyancsak vannak nyílt változatok, de néhány szolgáltató is fenntart ilyeneket (pl. Google: multimodalembedding@001)

Aszimmetrikus beágyazások

A szimmetrikus beágyazási feladatnál feltettük, hogy egyféle bemenet áll rendelkezésünkre, melynek sémája \(\mathbb{X}\). Ugyanakkor ez a gyakorlatban nem feltétlen igaz. Sőt, információgyűjtési célra alkalmazva azonnal találkozunk azzal a jelenséggel, hogy a keresett entitások „dokumentumok“, míg a keresésre használt az egy „kérdés“. Felmerülhet tehát a kérdés, hogy ugyanaz az \(E\) eljárás képes-e ezeket a „különböző“ entitásokat megfelelően ugyanabba a vektortérbe rendelni.

Aszimmetrikus beágyazások

Adott: Egy \(\mathbb{X_1}, \dots, \mathbb{X_k}\) bemeneti sémák és egy \(\mathcal{V}\) vektortér, illetve valamilyen módszer, hogy tetszőlegesen választva \(\mathbb{X_1}, \dots, \mathbb{X_k}\) sémájú elemeket, azok viszonylagos hasonlóságát eldöntsük (vagy legalább a releváns irányokba ezt meg tudjuk tenni).

Feladat: Adjunk meg \(E_i:\mathbb{X} \rightarrow \mathcal{V}\) beágyazó eljárásokat (\(i=1\dots k\)) és egy \(s:\mathcal{V}\times\mathcal{V} \rightarrow \mathbb{R}\) távolságfüggvényt, hogy tetszőleges (nem feltétlen eltérő) \(\mathbb{X}_a, \mathbb{X}_b, \mathbb{X}_c\) formátumú \(x_1\), \(x_2\) és \(y\) bemenetekre \(s(E_a(x_1), E_c(y)) < s(E_b(x_2), E_c(y))\) akkor és csak akkor, ha \(x_2\) „hasonlóbb“ \(y\)-hoz, mint \(x_1\).

Ezen definíció ismét szükségtelenül bonyolultnak tűnhet, ugyanakkor kizárólag annyit módosítunk az előző feladaton, hogy immár \(k\) különböző séma szerinti bemeneteket képzünk ugyanabba a vektortérbe „hasonlóságtartó“ módon, különböző eljárásokkal. Az elnevezésbeli „aszimmetria“ pontosan arra utal, hogy nem minden bemenetet azonos eljárással kezelünk, hogy megkapjuk a megfelelő reprezentációt.

Egy eljárás aszimmetriája sokfélén megnyilvánulhat. \(E_1\) és \(E_2\) lehet teljesen különböző is (pl. eltérő neurális hálók), de lehetnek közös elemeik is (pl. egy közös \(E\) algoritmus, eltérő előfeldolgozásokkal). Előbbire példa a ColBERT modell (külön „query“ és „document“ neurális háló) utóbbira az E5 („query:“ és „document:“ előtagok hozzáadása, amit a modell magától megtanul észrevenni).

Encoder-ek – Mennyi az az annyi?

A beágyazások tárgyalása után rátérünk az „encoder“ struktúrák vizsgálatára. Ezek célja egyszerű: számszerűsíteni akarjuk a hasonlóságot.

Hasonlóság mérése

Adott: Összehasonlítandó elemek egy \(\mathcal{X}\) halmaza, illetve valamilyen módszer, hogy \(\mathcal{X}\) elemeinek viszonylagos hasonlóságát eldöntsük (azaz ilyet tudunk mondani: „\(x_2\) hasonlóbb \(y\)-hoz, mint \(x_1\)“)

Feladat: Készítsünk egy \(s:\mathcal{X}\times \mathcal{X}\rightarrow \mathbb{R}\) függvényt, hogy \(x_1\), \(x_2\) és \(y\) elemekre \(s(x_1, y) < s(x_2, y)\) akkor és csak akkor, ha \(x_2\) „hasonlóbb“ \(y\)-hoz, mint \(x_1\).

Ha az előző szakaszból jövünk, feltűnő lehet a feladat definíciójának hasonlósága a beágyazásokéhoz. Ez valóban így van, amit a Bi-encoder struktúra használ ki. Ugyanakkor fontos különbség, hogy beágyazások készítésének központi kérdése inkább az elkódolás technikája, az encoder-eknél a fókusz a konkrét szám kinyerése ami megmondja a hasonlóságot.

Ez megjelenhetne a definíciókban is

Bár a feladatok definíciója így is mélyebbnek tűnik, mint amilyen, lehetne továbbabsztrahálni úgy, hogy ez előző bekezdésben vázolt koncepcionális különbözőség az megjelenjen a definícióban is.

Nevezetesen, a beágyazásoknál hasonlósági mérték helyett egy olyan \(S: \mathcal{V}\times\mathcal{V}\times\mathcal{V}\rightarrow \{1, 2\}\) orákulumot („feketedoboz“) keresünk a beágyazási függvény mellé, mely azt mondja meg \(S(x_1, x_2, y)\) hívás esetén, hogy \(y\)-hoz az első vagy a második vektor hasonlóbb.

Ezzel szemben a beágyazásoknál egy olyan \(s: \mathcal{X}\times \mathcal{X}\rightarrow A\) függvényt keresünk, ahol \(A\)-on adott egy lineáris rendezés, és fennáll a korábban felírt „\(s(x_1, y) < s(x_2, y)\)“ reláció.

A definíciók ilyenféle módosítása kihangsúlyozza, hogy a beágyazásoknál a fókusz a hasonlósági viszonyok megőrzése, míg az encoder-eknél a kimenetet egyértelműen mérésre vagy legalább sorbarendezésre akarjuk használni.

Végül megemlítjük, hogy az orákulumos módszerrel jobban le tudjuk írni a definíciók „Adott“ részében megjelenő „viszonylagos hasonlóság eldöntő módszert“ is: ez egy olyan \(S: \mathcal{\mathcal{X}}\times\mathcal{X}\times\mathcal{X}\rightarrow \{1, 2\}\), mely azt mondja meg \(S(x_1, x_2, y)\) hívás esetén, hogy \(y\)-hoz \(x_1\) vagy \(x_2\) hasonlóbb (ez egybevág a korábbi orákulummal).

Bi-encoder

A bi-encoder fogalma szorosan kapcsolódik a beágyazások fogalmához, illetve inkább magához a hasonlósági mértékhez. Ennek megfelelően azok jó példát fognak szolgáltatni a módszer bemutatására.

A bi-encoder-ek alapötlete, hogy \(x_1, x_2\in \mathcal{X}\)-et nem közvetlen hasonlítjuk össze, hanem először egy köztes \(\mathcal{Y}\) reprezentációs térbe képezzük őket, majd itt alkalmazunk egy hasonlósági mértéket. Az eljárás oka tehát az a feltételezés, hogy egy megfelelő \(\mathcal{Y}\) reprezentációs térben hatékonyan tudunk összehasonlítani.

Egy bi-encoder tehát két függvényből áll, egy \(f: \mathcal{X}\rightarrow \mathcal{Y}\) leképezésből és egy \(s: \mathcal{Y}\times\mathcal{Y}\rightarrow \mathbb{R}\) hasonlósági metrikából.

A beágyazások esetén már láttunk hasonlót: a reprezentációs terünk a \(\mathcal{V}\) vektortér volt, és ebbe képzett az \(E\) beágyazási függvény (ami itt az \(f\) leképezésnek felel meg), illetve ezen volt definiálva az \(s\) hasonlósági mérték.

A bi-encoder működése

A bi-encoder-eket akkor érdemes alkalmazni, amikor valóban rendelkezésünkre áll egy hatékony \(s_\mathcal{Y}\) függvény (például a koszinusz hasonlóság beágyazások esetén), vagy nem is tudunk direkte összehasonlítani algoritmikusan. Ekkor előnyük, hogy minden \(\mathcal{X}\)-beli elemet elegendő egyszer leképeznünk \(\mathcal{Y}\)-ba \(f\) segítségével (ami akár egy hosszabb folyamat is lehet), és ezeket a reprezentációkat utána szabadon összehasonlíthatjuk egymással, illetve eltárolhatjuk őket későbbi használatra.

A bi-encoder-ek hátránya a leképezési eljárásban rejlik. Egy összehasonlítás ugyanis csak annyira lehet jó, amennyire a leképezési eljárás képes megőrizni a bemenetének különböző aspektusait. Bár a terület folyamatosan fejlődik, még mindig vannak hiányosságai a népszerű leképezéseknek is.

Néhány hiányosság

A leképezési függvényünk a gyakorlatban jobbára minidig valamiféle beágyazás. Szövegeket tekintve, a sűrű beágyazások kifejezetten jól kezelik a bemenet jelentéstartalmát. Ugyanakkor könnyen megzavarodhatnak, ha két, megfogalmazásban nagyon hasonló szöveget ágyazunk be, de eltérő, ritkán használt fogalmakról (banki környezetben a különböző azonos termékcsoporthoz tartozó hirdetmények ilyenek).

Ezzel szemben a ritka beágyazások (és különösképp a TF-IDF eljárások) képesek odafigyelni a specifikus szóhasználatra, de cserébe a jelentést kevéssé tudják megérteni, azaz két azonos jelentésű, máshogyan megfogalmazott szöveg egymástól távol kerül.

Gyakorlatban az \(f\) függvény általában valamiféle gépi tanulási algoritmus (pl. beágyazási neurális háló, TF-IDF), míg az \(s\) mérték egy egyszerű lineáris algebrai művelet (pl. skaláris szorzás, és annak változatai).

A Guru rendszerében a szemantikus keresés bi-encoder eljárást alkalmaz.

Aszimmetrikus bi-encoder

Természetesen az aszimmetrikus beágyazások mintájára nem nehéz készíteni aszimmetrikus bi-encoder-t sem. Annyit kell tennünk, hogy a különböző típusú bemenetekhez különböző leképezési függvényeket veszünk fel.

Cross-encoder

A bi-encoder-rel szemben a cross-encoder azonnal megpróbálja összehasonlítani a két elemet, azaz az \(s\) mértékünk rögtön \(\mathcal{X}\)-beli elemeken dolgozik. Ezzel a bi-encoder-nél fennálló, \(f\) általi redukcióból eredő problémát küszöböli ki: nem kell törődünk valamiféle leképezés hatékonyságával, mindig a teljes bemenetet hasonlítjuk.

A cross-encoder működése

Bár a bi-encoder egy problémáját kezeli ez a felépítés, óvatosnak kell lennünk a nagymértékű használatukkal. A gyakorlatban ugyanis a cross-encoder algoritmusok neurális hálók, melyek nagyságrendekkel lassabban futnak mint a bi-encodernél általában alkalmazott skaláris szorzás. Célszerű tehát tömeges szűrés helyett utólagos finomításra alkalmazni a cross-encoder modelleket.

A Guru rendszerében a reranking során alkalmazunk cross-encoder eljárást.

Aszimmetrikus cross-encoder

A cross-encoder struktúrát egyszerűen definiálni lehet aszimmetrikusan is: egyszerűen azt mondjuk, hogy az első bemenet egy \(\mathcal{X}_2\), a második egy \(\mathcal{X}_2\) térből származik.

Ez ugyanakkor nem analóg az aszimmetrikus bi-encoder-rel, ugyanis ott a bemenetek milyensége nem vont sorrendhez kötött, és az nem is csak két lehetséges bemenettípust képes kezelni. A cross-encoder esetén ezt ilyen módon értelmetlen: amennyiben \(\mathcal{X}_1, \dots, \mathcal{X}_k\) halmazokból jöhetnek a bemenetek, egyszerűen mondhatjuk azt, hogy a cross-ecoder értelmezési tartománya \(\mathcal{X}:=\bigcup_{1...k} \mathcal{X}_i\)

Alkalmazás rendezésre

Az encoder struktúrákkal könnyen meg tudunk oldani bármilyen hasonlóság alapú sorbarendezési feladatot. Tegyük fel például, hogy rendelkezésünkre áll néhány dokumentum \(\mathcal{D}\), és olyan rendszert szeretnénk kialakítani, ami egy érkező \(q\) kérdéshez megtalálja a legrelevánsabb dokumentumot.

Tetszőleges \(s\) encoder eljárás segítségével számoljuk ki \(q\) és \(D\) hasonlóságát minden \(D\in \mathcal{D}\) dokumentumra, majd ennek megfelelően elkészíthetjük a rendezést.

Amennyiben bi-encoder-t veszünk a folyamatot tudjuk úgy optimalizálni, hogy először \(f\)-fel leképezzük \(\mathcal{D}\) minden elemét (legyen ez \(\mathcal{D}_f\)), majd \(q\) kérdés érkezésekor azt is leképezzük (\(q_f\)), és végül \(q_f\)-et összehasonlítjuk \(\mathcal{D}_f\) minden elemével. Így \(\mathcal{D}_f\)-et a kérdések számától függetlenül csak egyszer számoljuk ki.

Mind a szemantikus keresés, mind a reranking ezt az eljárást alkalmazza. Végül a teljesség kedvéért írjuk fel a rendezés segítségével készíthető információgyűjtési megoldásokat az információgyűjtés kontextusában.

Fogalom Megoldásbeli megfelelő
\(\mathbb{i}\) Az \(\mathbb{X}\) bemeneti séma
\(\mathcal{I}_{\text{raw}}\) A \(\mathcal{X}\) halmaz
\(\mathbb{S}\) Az \(\mathbb{X}\) bemeneti séma
\(\mathfrak{s}\) \(y\) bemenetre meghatározzuk \(s(x, y)\) értékét \(\forall x\in \mathcal{X}\)-re
\(\mathbb{f}\) \(\mathcal{X}\) egy rendezése
Fogalom Megoldásbeli megfelelő
\(\mathbb{i}\) Az \(\mathbb{X}\) bemeneti séma
\(\mathcal{I}_{\text{raw}}\) A \(\mathcal{X}\) halmaz
\(\mathfrak{p}\) \(\mathcal{X}\) minden elemét leképezzük \(f\) segítségével
\(\mathcal{I}\) Az \(f\)-általi képek \(\mathcal{X}_f\) halmaza
\(\mathbb{S}\) Az \(\mathbb{X}\) bemeneti séma
\(\mathfrak{f}\) \(y\) bemenetet leképezzük \(f\) segítségével, majd kiszámoljuk
\(s_f(x_f, y_f)\) értékét \(\forall x_f\in \mathcal{X}_f\)-re
\(\mathbb{f}\) \(\mathcal{X}\) egy rendezése