Relevancia a kulcsszókeresésben (BM25 pontozás)
Ez a cikk a teljes szöveges keresés keresési pontszámainak kiszámításához használt BM25 relevanciapontozási algoritmust ismerteti. A BM25 relevanciája kizárólag a teljes szöveges keresésre használható. A szűrőlekérdezések, az automatikus kiegészítés és a javasolt lekérdezések, a helyettesítő vagy a homályos keresési lekérdezések nem pontozhatók vagy rangsorolhatók relevancia szempontjából.
A teljes szöveges keresésben használt pontozási algoritmusok
Az Azure AI Search a következő pontozási algoritmusokat biztosítja a teljes szöveges kereséshez:
Algoritmus | Használat | Tartomány |
---|---|---|
BM25Similarity |
Kijavítottuk a 2020 júliusa után létrehozott összes keresési szolgáltatás algoritmusát. Ezt az algoritmust konfigurálhatja, de nem válthat régebbire (klasszikusra). | Korlátos. |
ClassicSimilarity |
Régebbi keresési szolgáltatásokban jelenik meg. A BM25-be bejelentkezve indexenkénti algoritmust választhat. | 0 < 1,00 |
A BM25 és a klasszikus egyaránt TF-IDF-szerű lekérési függvények, amelyek a kifejezés gyakoriságát (TF) és az inverz dokumentum gyakoriságát (IDF) használják változóként az egyes dokumentumlekérdezési párok relevanciájának kiszámításához, amelyet aztán a rangsorolási eredményekhez használnak. Bár a klasszikushoz fogalmilag hasonló, a BM25 olyan valószínűségi információlekérésben gyökerezik, amely intuitívabb egyezéseket hoz létre a felhasználói kutatások alapján.
A BM25 speciális testreszabási lehetőségeket kínál, például lehetővé teszi a felhasználó számára, hogy eldöntse, hogyan skálázható a relevanciapont a egyeztetett kifejezések kifejezési gyakoriságával. További információ: A pontozási algoritmus konfigurálása.
Feljegyzés
Ha 2020 júliusa előtt létrehozott keresési szolgáltatást használ, a pontozási algoritmus valószínűleg az előző alapértelmezett, ClassicSimilarity
amelyet indexenként frissíthet. Részletekért lásd: BM25-pontozás engedélyezése a régebbi szolgáltatásokon .
Az alábbi videószegmens gyorsan elérhetővé válik az Azure AI Searchben használt általánosan elérhető rangsorolási algoritmusok magyarázatához. A teljes videót a további háttérért tekintheti meg.
A BM25 rangsorolásának működése
A relevanciapontszámozás egy keresési pontszám (@search.score) számítására utal, amely egy elem relevanciájának mutatójaként szolgál az aktuális lekérdezés kontextusában. A tartomány nem kötött. Minél magasabb a pontszám, annál relevánsabb az elem.
A keresési pontszám kiszámítása a sztringbemenet és maga a lekérdezés statisztikai tulajdonságai alapján történik. Az Azure AI Search megkeresi a keresési kifejezésekkel egyező dokumentumokat (a keresési módtól függően néhányat vagy az összeset), előnyben részesítve a keresési kifejezés számos példányát tartalmazó dokumentumokat. A keresési pontszám még magasabb lesz, ha a kifejezés ritka az adatindexben, de gyakori a dokumentumban. A számítási relevancia ezen megközelítésének alapja a TF-IDF vagy a kifejezés frekvencia inverz dokumentum gyakorisága.
A keresési pontszámok a találatkészlet egészében megismételhetők. Ha több találat is azonos keresési pontszámmal rendelkezik, az azonos pontszámú elemek sorrendje nincs meghatározva, és nem stabil. Futtassa újra a lekérdezést, és előfordulhat, hogy az elemek eltolódnak, különösen akkor, ha az ingyenes szolgáltatást vagy a több replikával rendelkező számlázható szolgáltatást használja. Két azonos pontszámú elem esetén nincs garancia arra, hogy előbb megjelenik az egyik.
Ha meg szeretné szakítani a döntetlent az ismétlődő pontszámok között, hozzáadhat egy $orderby záradékot az első sorrendhez pontszám szerint, majd rendezhet egy másik rendezhető mező szerint (például $orderby=search.score() desc,Rating desc
). További információ: $orderby.
A rendszer csak az indexben vagy searchFields
a lekérdezésben megjelölt searchable
mezőket használja a pontozáshoz. Csak a lekérdezésben select
megadottként retrievable
megjelölt mezők vagy mezők jelennek meg a keresési eredményekben, a keresési pontszámukkal együtt.
Feljegyzés
Az A @search.score = 1
nem pontozott vagy nem rangsorolt eredményhalmazt jelöl. A pontszám minden eredményben egységes. A nem pontozott eredmények akkor fordulnak elő, ha a lekérdezési űrlap zavaros keresés, helyettesítő vagy regex lekérdezés, vagy üres keresés (search=*
néha szűrőkkel párosítva, ahol a szűrő az elsődleges eszköz egyezés visszaadására).
Pontszámok szöveges eredményekben
Az eredmények rangsorolásakor @search.score
a tulajdonság az eredmények rendezéséhez használt értéket tartalmazza.
Az alábbi táblázat az egyes egyezéseken, algoritmusokon és tartományokon visszaadott pontozási tulajdonságot azonosítja.
Keresési módszer | Paraméter | Pontozási algoritmus | Tartomány |
---|---|---|---|
teljes szöveges keresés | @search.score |
BM25 algoritmus az indexben megadott paraméterekkel. | Korlátos. |
Pontszám variációja
A keresési pontszámok általános relevanciaérzetet közvetítenek, amely tükrözi az egyezés erősségét az azonos eredményhalmazban lévő többi dokumentumhoz képest. A pontszámok azonban nem mindig konzisztensek az egyik lekérdezéstől a másikig, így a lekérdezések használatakor kis eltéréseket tapasztalhat a keresési dokumentumok sorrendjében. Ennek okaira több magyarázat is létezik.
Ok | Leírás |
---|---|
Adatingadozás | Az index tartalma a dokumentumok hozzáadása, módosítása vagy törlésekor változik. A kifejezés gyakorisága az indexfrissítések idővel történő feldolgozásakor változik, ami hatással van az egyező dokumentumok keresési pontszámára. |
Több replika | A több replikát használó szolgáltatások esetében a rendszer az egyes replikákra párhuzamosan bocsát ki lekérdezéseket. A keresési pontszám kiszámításához használt indexstatisztikákat replikánként számítja ki a rendszer, az eredményeket egyesítve és rendezve a lekérdezési válaszban. A replikák többnyire egymás tükörképei, de a statisztikák az állapot kis eltérései miatt eltérhetnek. Előfordulhat például, hogy egy replika törölte a statisztikájukhoz hozzájáruló dokumentumokat, amelyeket más replikákból egyesítettek. A replikánkénti statisztikák különbségei általában észrevehetőbbek a kisebb indexekben. Erről a feltételről további információt a kapacitástervezési dokumentációban található keresési egységek, replikák, partíciók és szegmensek című témakörben talál. |
Azonos pontszámok | Ha több dokumentum is ugyanazt a pontszámot használja, azok bármelyike megjelenhet először. |
Pontozási statisztikák és ragadós munkamenetek
A méretezhetőség érdekében az Azure AI Search horizontálisan osztja el az indexeket horizontálisan, horizontálisan, ami azt jelenti, hogy az index egyes részei fizikailag elkülönülnek egymástól.
Alapértelmezés szerint egy dokumentum pontszáma a szegmensen belüli adatok statisztikai tulajdonságai alapján lesz kiszámítva. Ez a megközelítés általában nem jelent problémát nagy adathalmazok esetében, és jobb teljesítményt nyújt, mint az összes szegmens információi alapján kiszámítani a pontszámot. Ennek a teljesítményoptimalizálásnak a használata két nagyon hasonló dokumentumot (vagy akár azonos dokumentumot) okozhat, amelyek eltérő relevanciapontszámmal végződhetnek, ha különböző szegmensekbe kerülnek.
Ha inkább az összes szegmens statisztikai tulajdonságai alapján szeretné kiszámítani a pontszámot, ezt lekérdezési paraméterként (scoringStatistics=global
vagy a lekérdezési kérelem törzsparamétereként) is megteheti"scoringStatistics": "global"
.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
"search": "<query string>",
"scoringStatistics": "global"
}
A használat scoringStatistics
biztosítja, hogy az ugyanabban a replikában lévő összes szegmens ugyanazt az eredményt adja. Ennek ellenére a különböző replikák kissé eltérhetnek egymástól, mivel mindig frissülnek az index legújabb módosításaival. Bizonyos esetekben előfordulhat, hogy a felhasználók konzisztensebb eredményeket szeretnének kapni egy lekérdezési munkamenet során. Ilyen esetekben a lekérdezések részeként is megadható sessionId
. Ez sessionId
egy egyedi sztring, amelyet egy egyedi felhasználói munkamenetre hivatkozva hoz létre.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
"search": "<query string>",
"sessionId": "<string>"
}
Mindaddig, amíg ugyanazt sessionId
használja, a rendszer minden tőle telhetőt megtesz annak érdekében, hogy ugyanazt a replikát célozza meg, ezzel növelve a felhasználók által látott eredmények konzisztenciáját.
Feljegyzés
Ugyanazon sessionId
értékek ismételt újrafelhasználása megzavarhatja a kérések terheléselosztását a replikák között, és hátrányosan befolyásolhatja a keresési szolgáltatás teljesítményét. A munkamenet-azonosítóként használt érték nem kezdődhet "_" karakterrel.
Relevanciahangolás
Az Azure AI Searchben konfigurálhatja a BM25-algoritmus paramétereit, és hangolhatja a keresési relevanciát, és növelheti a keresési pontszámokat az alábbi mechanizmusokkal:
Módszer | Implementáció | Leírás |
---|---|---|
Pontozási algoritmus konfigurálása | Keresési index | |
Pontozási profilok | Keresési index | Adjon meg feltételeket az egyezés keresési pontszámának a tartalom jellemzői alapján történő növeléséhez. Előfordulhat például, hogy a bevételi potenciáljuk alapján szeretné növelni a találatokat, előléptetheti az újabb elemeket, vagy növelheti a túl hosszú készletben lévő elemeket. A pontozási profil az indexdefiníció része, amely súlyozott mezőkből, függvényekből és paraméterekből áll. A meglévő indexeket a pontozási profil módosításaival frissítheti anélkül, hogy az index újraépítése történne. |
Szemantikai rangsorolás | Lekérdezési kérelem | Gépi olvasási megértést alkalmaz a keresési eredményekre, előtérbe hozva a szemantikailag relevánsabb találatokat. |
featuresMode paraméter | Lekérdezési kérelem | Ezt a paramétert többnyire egy pontszám kicsomagolására használják, de olyan kódban is használható, amely egyéni pontozási megoldást biztosít. |
featuresMode paraméter (előzetes verzió)
A Keresési dokumentumok kérések új featuresMode paraméterrel rendelkeznek, amely részletesebb információkat nyújt a relevanciáról a mező szintjén. Míg a számítás a @searchScore
teljes dokumentumra vonatkozik (mennyire releváns ez a dokumentum a lekérdezés kontextusában), a featuresMode segítségével információkat kaphat az egyes mezőkről, egy @search.features
struktúrában kifejezve. A struktúra tartalmazza a lekérdezésben használt összes mezőt (vagy adott mezőket a lekérdezésben a searchFieldsen keresztül, vagy az indexben kereshetőként tulajdonított összes mezőt). Minden mezőhöz a következő értékeket kapja:
- A mezőben található egyedi tokenek száma
- Hasonlósági pontszám vagy a mező tartalmának a lekérdezési kifejezéshez viszonyított hasonlóságának mértéke
- Kifejezés gyakorisága vagy a lekérdezési kifejezés számának száma a mezőben
A "leírás" és a "cím" mezőket megcélozó lekérdezések esetében a következőhöz @search.features
hasonló válasz jelenhet meg:
"value": [
{
"@search.score": 5.1958685,
"@search.features": {
"description": {
"uniqueTokenMatches": 1.0,
"similarityScore": 0.29541412,
"termFrequency" : 2
},
"title": {
"uniqueTokenMatches": 3.0,
"similarityScore": 1.75451557,
"termFrequency" : 6
}
}
}
]
Ezeket az adatpontokat egyéni pontozási megoldásokban használhatja fel, vagy az információk segítségével hibakeresési relevanciával kapcsolatos problémákat kereshet.
Rangsorolt találatok száma teljes szöveges lekérdezési válaszban
Ha nem lapozást használ, a keresőmotor alapértelmezés szerint a teljes szöveges keresés 50 legmagasabb rangsorolási egyezését adja vissza. A paraméterrel top
kisebb vagy nagyobb számú elemet adhat vissza (egyetlen válaszban akár 1000-et is). A teljes szöveges keresésre legfeljebb 1000 egyezés vonatkozik (lásd az API válaszkorlátait). Ha 1000 találatot talál, a keresőmotor már nem keres többet.
Ha több vagy kevesebb eredményt szeretne visszaadni, használja a lapozási paramétereket top
és skip
next
a . A lapozással meghatározhatja az egyes logikai lapok eredményeinek számát, és navigálhat a teljes hasznos adatban. További információ: Hogyan használható a keresési eredmények?