Reranking – Cross-encoder
cross-encoder/ms-marco-TinyBERT-L-2-v2
Ráépül: Hybrid Search
Elemi információgyűjtési módszerek különböző helyekről, különböző minőségben gyűjthetnek össze eredményeket. Ugyanakkor ezek az adott módszerek limitációi miatt különböző minőségben, illetve logikátlan sorrendben is visszajöhetnek. Célszerű egy utólagos rendezést végezni ezeken egy olyan megoldással, ami „érti“ a szövegek jelentését teljes egészében.
Adott: Szöveges chunk-ok egy \(\mathcal{D}\) halmaza, egy \(q\) kérdés.
Feladat: Rendezzük át a \(\mathcal{D}\)-beli chunk-okat az alapján, hogy mennyire relevánsak a \(q\)-ra való válaszadáshoz.
Az újrarendezés ezt egy cross-encoder modell segítségével próbálja megoldani; ez egy neurális háló, feketedobozként kezelendő. A modell bemenete két szöveg, kimenete pedig egy valós szám, a hasonlóság mértéke. Hogy ez a szám reprezentál-e valamit, illetve hogy van-e alsó és felső korlátja, az modellfüggő. Az encoder-ekről általánosan itt találsz további információt.
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.
Az újrarendezési logikát a reranking.py fájl tartalmazza. A használt cross-encoder modellt a config.yaml fájl models.crossencoder mezője tartalmazza, ez egy HuggingFace hivatkozás, és a modellt is a transformers könyvtárra épülő sentence-transformers futtatja.
Megjegyzések
Jelenleg elvileg a cross-encoder modellek jobban tudják kezelni a pontos jelentéstartalom alapján történő értékelést, A valóságban ugyanakkor inkább úgy tartjuk fenn a pipeline részeként, mint „mégegy rendezési módszer“, nem mint a „végső tökéletes sorrend“, mivel tapasztalat alapján az ez által adott rendezések is néha távol esnek az elvárttól.