Hasonlóság és pontozás a Azure Cognitive Search

Ez a cikk azt a két hasonlóság rangsorolási algoritmust ismerteti, amelyet a Azure Cognitive Search a lekérdezés szempontjából leginkább megfelelő dokumentumok meghatározásához. Ez a cikk két kapcsolódó funkciót is bemutat: a pontozási profilokat (a keresési pontszám módosításának kritériumait) és a featuresMode paramétert (kicsomagol egy keresési pontszámot a további részletek megjelenítése érdekében).

Megjegyzés

A harmadik szemantikai újra rangsorolási algoritmus jelenleg nyilvános előzetes verzióban érhető el. További információért kezdje a szemantikus keresés áttekintését ismertető témakörben.

Hasonlóság rangsorolási algoritmusai

Azure Cognitive Search két hasonlóság rangsorolási algoritmust támogat.

Algoritmus Pontszám Rendelkezésre állás
ClassicSimilarity (ClassicSimilarity) @search.score Az összes keresési szolgáltatás használja 2020. július 15-ig.
BM25Similarity @search.score Az összes július 15. után létrehozott keresési szolgáltatás használja. A klasszikust alapértelmezés szerint a régebbi szolgáltatások is választhatják a BM25 mellett.

A klasszikus és a BM25 is TF-IDF-szerű lekérési függvény, amely a kifejezés gyakoriságát (TF) és az inverz dokumentum gyakoriságát (IDF) használja változóként az egyes dokumentum-lekérdezési párok relevanciapontszámának kiszámításához, amelyet aztán a rendszer rangsorolásra használ. A klasszikushoz fogalmilag hasonlóan a BM25 a valószínűségi információk lekérésének gyökerét használja a jobb eredmény érdekében. A BM25 speciális testreszabási lehetőségeket is kínál, például lehetővé teszi, hogy a felhasználó eldöntse, hogyan skálázható a relevanciapontszám az egyező kifejezések kifejezés gyakoriságával.

Az alábbi videószegmens az általánosan elérhető rangsorolási algoritmusok magyarázatát továbbítja a Azure Cognitive Search. További háttér-információkért tekintse meg a teljes videót.

Relevanciapontozás

A pontozás a keresési eredményekben visszaadott összes elem keresési pontszámának számítását jelenti a teljes szöveges keresési lekérdezésekhez. A pontszám egy elem relevanciáját jelzi az aktuális lekérdezés kontextusában. Minél nagyobb a pontszám, annál relevánsabb az elem. A keresési eredményekben az elemek rangsorolása magasról alacsonyra történik az egyes elemekre kiszámított keresési pontszámok alapján. A pontszám minden dokumentumra "" értékként van @search.score visszaadva a válaszban.

Alapértelmezés szerint a rendszer az első 50-et adja vissza a válaszban, de az $top paraméterrel kisebb vagy nagyobb számú elemet ad vissza (legfeljebb 1000-et egyetlen válaszban), a $skip pedig a következő eredményhalmazt.

A keresési pontszám kiszámítása az adatok és a lekérdezés statisztikai tulajdonságai alapján történt. Azure Cognitive Search keresési kifejezésekkel egyező dokumentumokat talál (a searchModetípustól függően néhányat vagy mindegyiket), és azokat a dokumentumokat támogatja, amelyek a keresési kifejezés számos példányát tartalmazzák. A keresési pontszám akkor is magasabb lesz, ha a kifejezés ritkák az adatindexben, de gyakori a dokumentumban. Ennek a relevancia-számításnak az alapját TF-IDF vagy kifejezésgyakorra-inverz dokumentumgyakorra néven ismerjük.

A keresési pontszámértékek megismételhetőek egy eredményhalmazban. Ha több találat keresési pontszáma megegyezik, ugyanazon pontozási elemek sorrendje nincs meghatározva, és nem stabil. Futtassa újra a lekérdezést, és láthatja, hogy az elemek eltolást látnak, különösen akkor, ha ingyenes szolgáltatást vagy több replikával rendelkező számlázható szolgáltatást használ. Ha két elem azonos pontszámmal van megadva, nem garantálható, hogy melyik jelenik meg elsőként.

Ha az ismétlődő pontszámok közötti döntetlent szeretné megszakítani, hozzáadhat egy $orderby záradékot az első rendezéshez pontszám szerint, majd egy másik rendezhető mező szerint rendezhető mező szerint (például $orderby=search.score() desc,Rating desc ). További információ: $orderby.

Megjegyzés

A egy nem pontozási vagy rangsorolás nélküli @search.score = 1.00 eredményhalmazt jelez. A pontszám minden eredményben egységes. A pont nélküli eredmények akkor fordulnak elő, ha a lekérdezési űrlap fuzzy keresés, helyettesítő vagy regex lekérdezés, vagy egy $filter kifejezés.

Pontozási statisztikák és ragadós munkamenetek

A skálázhatóság érdekében a Azure Cognitive Search horizontálisan elosztja az indexeket egy horizontális skálázási folyamaton keresztül, ami azt jelenti, hogy az index egyes részei fizikailag el vannak különülve.

Alapértelmezés szerint a dokumentum pontszáma a szegmensen belüli adatok statisztikai tulajdonságai alapján van kiszámítva. Ez a megközelítés általában nem jelent problémát nagy mennyiségű adatnál, és jobb teljesítményt nyújt, mint a pontszám kiszámítása az összes szegmensre vonatkozó információk alapján. Ennek ellenére a teljesítményoptimalizálás használata két nagyon hasonló dokumentum (vagy akár azonos dokumentum) különböző relevanciapontszámokat eredményez, ha különböző szegmenseket eredményeznek.

Ha a pontszámot az összes szegmens statisztikai tulajdonságai alapján szeretné kiszámítani, ezt a scoringStatistics=global lekérdezési paraméterként való hozzáadásával (vagy a "scoringStatistics": "global" lekérdezési kérelem törzsparamétereként) használhatja.

GET https://[service name].search.windows.net/indexes/[index name]/docs?scoringStatistics=global&api-version=2020-06-30&search=[search term]
  Content-Type: application/json
  api-key: [admin or query key]  

A scoringStatistics használatával biztosíthatja, hogy az ugyanabban a replikában az összes szegmens ugyanazt az eredményt adja. Ez azt jelenti, hogy 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 azt szeretné, hogy a felhasználók konzisztens eredményeket kapnak egy "lekérdezési munkamenet" során. Ilyen esetekben a lekérdezések részeként is meg lehet adni sessionId egy-egy et. A sessionId egy egyedi sztring, amely egy egyedi felhasználói munkamenetre hivatkozik.

GET https://[service name].search.windows.net/indexes/[index name]/docs?sessionId=[string]&api-version=2020-06-30&search=[search term]
  Content-Type: application/json
  api-key: [admin or query key]  

Ha ugyanezt használja, a rendszer mindent megtesz azért, hogy ugyanazt a replikát célozza meg, ezzel növelve a felhasználók által látható eredmények sessionId konzisztenciáját.

Megjegyzés

Ha ismételten újra felhasználhatja ugyanezeket az értékeket, az megzavarhatja a kérések terheléselosztását a replikák között, és kedvezőtlen hatással lehet a keresési sessionId szolgáltatás teljesítményére. A sessionId érték nem kezdődhet "_" karakterrel.

Pontozási profilok

A különböző mezők rangsorolásának testreszabásához definiálhat egy pontozási profilt. A pontozási profilok segítségével jobban szabályozhatja a keresési eredményekben lévő elemek rangsorolását. Előfordulhat például, hogy a bevételi lehetőségeik alapján szeretné kiemelni az elemeket, újabb elemeket népszerűsíteni, vagy esetleg a túl hosszú leltárban 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. További információ a meghatározásáról: Pontozási profilok.

featuresMode paraméter (előzetes verzió)

A Dokumentumok keresése kérések új featuresMode paraméterrel bírnak, amely további részleteket biztosít a relevanciával kapcsolatban a mező szintjén. Míg a számítás a dokumentum összességéhez (mennyire releváns ez a dokumentum a lekérdezés kontextusában), a featuresMode funkcióval az egyes mezőkről kaphat információkat egy struktúrában @searchScore @search.features kifejezve. A struktúra tartalmazza a lekérdezésben használt összes mezőt (vagy egy lekérdezés adott mezőit a searchFields használatával, vagy az indexben kereshetőként megadott összes mezőt). Minden mezőhöz a következő értékeket kell kapnia:

  • A mezőben található egyedi jogkivonatok száma
  • Hasonlóság pontszáma, vagy a mező tartalmának a lekérdezési kifejezéshez viszonyított hasonlósága
  • Kifejezés gyakorisága, vagy az a szám, a hányszor található meg a lekérdezési kifejezés a mezőben

A "description" (leírás) és a "title" (cím) mezőket megcélző lekérdezések válasza a @search.features következőhöz hasonló lehet:

"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 felhasználhatja egyéni pontozási megoldásokban, vagy felhasználhatja az információkat a keresés relevanciaproblémái hibakereséséhez.

Lásd még