Přibližné vyhledávání pro opravu chybných pravopisů a překlepů

Poznámka:

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Azure AI Vyhledávač podporuje přibližné vyhledávání, typ dotazu, který kompenzuje překlepy a chybně napsané termíny ve vstupním řetězci. Vyhledávání přibližných shod vyhledá termíny, které mají podobné složení. Rozšíření vyhledávání tak, aby zahrnovalo téměř shodné výrazy, má za následek automatickou opravu překlepu, když je odchylka jen několik nesprávně umístěných znaků.

Jedná se o cvičení rozšíření dotazu, které vytváří shodu s termíny, které mají podobné složení. Při zadání přibližného vyhledávání vytvoří vyhledávací modul graf (na základě deterministické konečné teorie automatonu) podobně složených termínů pro všechny celé termíny v dotazu. Pokud například váš dotaz obsahuje tři termíny "university of washington", vytvoří se graf pro každý termín v dotazu search=university~ of~ washington~ (v přibližném hledání nedochází k odstranění stop-slov, takže "of" také získá graf).

Graf se skládá z až 50 rozšíření nebo permutací jednotlivých termínů, které zachycují správné i nesprávné varianty v procesu. Vyhledávací stroj pak vrátí nejvýše relevantní shody v odpovědi.

Pro termín jako "univerzita" může graf obsahovat "unversty, universty, university, universe, inverse". Všechny dokumenty, které odpovídají dokumentům v grafu, jsou zahrnuté ve výsledcích. Na rozdíl od jiných dotazů, které analyzují text za účelem zpracování různých forem téhož slova ("myši" a "myš"), jsou porovnání v neurčitých dotazech brána doslovně bez jakékoli jazykové analýzy textu. "Vesmír" a "inverze", které jsou sémanticky odlišné, shodují se, protože syntaktické nesrovnalosti jsou malé.

Shoda se podaří, pokud jsou rozdíly omezené na dvě nebo méně změn, kde změna je vložení, odstranění, náhrada nebo transpozice znaku. Algoritmus opravy řetězců, který určuje rozdíl, je metrika vzdálenosti Damerau-Levenshtein. Popisuje se jako "minimální počet operací (vložení, odstranění, nahrazení nebo provedení dvou sousedních znaků) potřebný ke změně jednoho slova na druhé".

Ve službě Azure AI Vyhledávač:

  • Přibližný dotaz se vztahuje na celé výrazy. Fráze nejsou podporované přímo, ale pro každý termín vícedílné fráze prostřednictvím konstrukcí AND můžete určit přibližnou shodu. Například: search=dr~ AND cleanin~. Tento výraz dotazu najde shody pro "chemické čištění".

  • Výchozí vzdálenost úpravy je 2. Hodnota ~0 signififikuje žádné rozšíření (pouze přesný termín je považován za shodu), ale můžete zadat ~1 pro jeden stupeň rozdílu nebo jednu úpravu.

  • Přibližný dotaz může rozšířit termín až o 50 permutací. Tento limit není konfigurovatelný, ale můžete efektivně snížit počet rozšíření snížením vzdálenosti úprav na 1.

  • Odpovědi se skládají z dokumentů obsahujících relevantní shodu (až 50).

Během zpracování dotazů neprocházejí přibližné dotazy lexikální analýzou. Vstup dotazu se přidá přímo do stromu dotazu a rozbalí se, aby se vytvořil graf termínů. Jedinou provedenou transformací je menší velikost písmen.

Grafy se společně odesílají jako kritéria shody s tokeny v indexu. Jak si můžete představit, přibližné vyhledávání je ze své podstaty pomalejší než jiné formuláře dotazů. Velikost a složitost indexu můžou určit, jestli jsou výhody dostatečné k posunu latence odpovědi.

Poznámka:

Vzhledem k tomu, že přibližné vyhledávání bývá pomalé, může být vhodné prozkoumat alternativy, jako je indexování n-gram, s průběhem krátkých sekvencí znaků (dvě a tři sekvence znaků pro bigram a trigram tokeny). V závislosti na jazyce a povaze dotazu vám může n-gram poskytnout lepší výkon. Kompromisem je, že indexování n-gramů je velmi storage náročné a generuje mnohem větší indexy.

Další alternativou, kterou byste mohli zvážit, kdybyste chtěli zpracovat jen ty nejvýraznější případy, by byla mapa synonym. Například mapování „vyhledávání“ na „serach, serch, sarch“ nebo „získat“ na „retreive“.

Pole řetězců, která jsou přiřazená jako prohledávatelná, jsou kandidáty pro přibližné vyhledávání.

Analyzátory se nepoužívají k vytvoření rozšiřujícího grafu, ale to neznamená, že by analyzátory měly být ignorovány ve scénářích přibližného vyhledávání. Analyzátory jsou důležité pro tokenizaci během indexování, kde se tokeny v invertovaných indexech používají pro porovnávání s grafem.

Jako vždy platí, že pokud testovací dotazy nevygenerují očekávané shody, experimentujte s různými analyzátory indexování. Zkuste například analyzátor jazyka , abyste zjistili, jestli získáte lepší výsledky. Některé jazyky, zejména ty s mutacemi samohlásek, mohou těžit z inflekce a nepravidelných tvarů slov generovaných přirozenými jazykovými procesory Microsoftu. V některých případech může použití správného analyzátoru jazyka změnit, jestli je termín tokenizován způsobem, který je kompatibilní s hodnotou poskytnutou uživatelem.

Přibližné dotazy se vytvářejí pomocí úplné syntaxe dotazu Lucene, vyvolání celého analyzátoru dotazů Lucene a přidání znaku ~ tilda za každým celým termínem zadaným uživatelem.

Tady je příklad požadavku na dotaz, který vyvolá přibližné vyhledávání. Obsahuje čtyři termíny, z nichž dva jsou chybně napsané:

POST https://[service name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-04-01
{
    "search": "seatle~ waterfront~ view~ hotle~",
    "queryType": "full",
    "searchMode": "any",
    "searchFields": "HotelName, Description",
    "select": "HotelName, Description, Address/City",
    "count": true
}
  1. Nastavte typ dotazu na úplnou syntaxi Lucene (queryType=full).

  2. Zadejte řetězec dotazu, za nímž následuje operátor tilda (~) na konci každého celého termínu (search=<string>~). Rozšiřující graf se vytvoří pro každý termín ve vstupu dotazu.

    Pokud chcete specifikovat editační vzdálenost, uveďte volitelný parametr, číslo od 0 do 2 (výchozí je ~1). Například "modrá~" nebo "modrá~1" by vrátila "modrá", "blues" a "lepidlo".

Volitelně můžete zvýšit výkon dotazů nastavením požadavku na konkrétní pole. Pomocí parametru searchFields určete, která pole se mají hledat. Pomocí vlastnosti můžete také select určit, která pole se vrátí v odpovědi dotazu.

Pro jednoduché testování doporučujeme průzkumníka služby Search nebo klienta REST pro iteraci výrazu dotazu. Oba nástroje jsou interaktivní, což znamená, že můžete rychle procházet několik variant termínu a vyhodnotit odpovědi, které se vrátí.

Pokud jsou výsledky nejednoznačné, může vám zvýraznění nalezených položek pomoci nalézt odpovídající položku v odpovědi.

Poznámka:

Použití zvýrazňování hitů k identifikaci přibližných shod má omezení a funguje pouze pro základní vyhledávání přibližných shod. Pokud má váš index skórovací profily nebo pokud dotaz vrstvíte s další syntaxí, může se stát, že zvýraznění nerozpozná shodu.

Příklad 1: fuzzy vyhledávání s přesným termínem

Předpokládejme, že v poli ve vyhledávacím "Description" dokumentu existuje následující řetězec: "Test queries with special characters, plus strings for MSFT, SQL and Java."

Začněte vyhledáváním přibližných shod a přidejte do pole Popis zvýraznění stisknutím klávesy:

search=special~&highlight=Description

V odpovědi, protože jste přidali zvýraznění hitů, se formátování použije na "zvláštní" jako odpovídající termín.

"@search.highlights": {
    "Description": [
        "Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
    ]
}

Zkuste požadavek znovu a chybně napište "speciální" odebráním několika písmen ("pe"):

search=scial~&highlight=Description

Zatím nedošlo k žádné změně v odpovědi. Při výchozím nastavení 2 stupňů vzdálenosti stále umožňuje odebrání dvou znaků "pe" ze slova "speciální" úspěšnou shodu s tímto výrazem.

"@search.highlights": {
    "Description": [
        "Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
    ]
}

Zkuste ještě jeden požadavek, dále upravte vyhledávací dotaz tím, že odstraníte poslední znak, čímž dosáhnete celkového počtu tří odstranění (z "special" na "scal").

search=scal~&highlight=Description

Vrátí se stejná odpověď, ale nyní se místo shody pro „special“ hledá přibližná shoda pro „SQL“.

"@search.score": 0.4232868,
"@search.highlights": {
    "Description": [
        "Mix of special characters, plus strings for MSFT, <em>SQL</em>, 2019, Linux, Java."
    ]
}

Cílem tohoto rozšířeného příkladu je znázornit jasnost, kterou zvýraznění výsledků může přinést nejednoznačným výsledkům. Ve všech případech se vrátí stejný dokument. Kdybyste spoléhali na ID dokumentů k ověření shody, mohli byste přehlédnout změnu ze "speciálního" na "SQL".