Testování pro SLUŽBU LUIS DevOps

Důležité

Služba LUIS bude vyřazena 1. října 2025 a od 1. dubna 2023 nebudete moct vytvářet nové prostředky LUIS. Doporučujeme migrovat aplikace LUIS do porozumění konverzačnímu jazyku, abyste mohli využívat další podporu produktů a vícejazyčné funkce.

Softwaroví inženýři, kteří vyvíjejí aplikaci LUIS (Language Understanding), můžou používat postupy DevOps týkající se správy zdrojového kódu, automatizovaných sestavení, testování a správy verzí podle těchto pokynů.

V metodologiích agilního vývoje softwaru hraje testování nedílnou roli při vytváření kvalitního softwaru. Každá významná změna aplikace LUIS by měla být doprovázena testy navrženými k otestování nových funkcí, které vývojář vytváří do aplikace. Tyto testy se kontrolují v úložišti zdrojového kódu spolu se .lu zdrojem vaší aplikace LUIS. Implementace změny se dokončí, když aplikace splňuje testy.

Testy jsou důležitou součástí pracovních postupů CI/CD. Když se změny aplikace LUIS navrhují v žádosti o přijetí změn nebo po sloučení změn do hlavní větve, měly by pracovní postupy CI spouštět testy, aby ověřily, že aktualizace nezpochybnily žádné regrese.

Postup testování jednotek a dávkového testování

Existují dva různé druhy testování aplikace LUIS, které je potřeba provést v pracovních postupech kontinuální integrace:

  • Testy jednotek – relativně jednoduché testy, které ověřují klíčové funkce aplikace LUIS. Test jednotek projde, když se pro danou testovací promluvu vrátí očekávaný záměr a očekávané entity. Všechny testy jednotek musí projít, aby se testovací běh úspěšně dokončil.
    Tento typ testování je podobný interaktivnímu testování, které můžete provést na portálu LUIS.

  • Dávkové testy – Dávkové testování je komplexní test aktuálního natrénovaného modelu, který měří jeho výkon. Na rozdíl od testů jednotek není dávkové testování úspěšné|neúspěšné testování. Očekávání pomocí dávkového testování neznamená, že každý test vrátí očekávaný záměr a očekávané entity. Místo toho vám dávkové testování pomůže zobrazit přesnost jednotlivých záměrů a entit v aplikaci a pomůže vám porovnat v průběhu času při vylepšování.
    Tento druh testování je stejný jako dávkové testování , které můžete interaktivně provádět na portálu LUIS.

Testování jednotek můžete využít od začátku projektu. Dávkové testování je skutečně hodnotné, jen když vyvíjíte schéma aplikace LUIS a pracujete na zlepšení její přesnosti.

U testů jednotek i dávkových testů se ujistěte, že jsou vaše testovací promluvy oddělené od trénovacích promluv. Pokud testujete na stejných datech, na která trénujete, dostanete falešný dojem, že vaše aplikace funguje dobře, když se jenom přeurčí testovacím datům. Testy musí být modelem nedostupné, aby bylo možné otestovat, jak dobře se generalizuje.

Psaní testů

Při psaní sady testů je potřeba pro každý test definovat:

  • Testování promluvy
  • Očekávaný záměr
  • Očekávané entity.

Pomocí syntaxe dávkového souboru LUIS definujte skupinu testů v souboru ve formátu JSON. Příklad:

[
  {
    "text": "example utterance goes here",
    "intent": "intent name goes here",
    "entities":
    [
        {
            "entity": "entity name 1 goes here",
            "startPos": 14,
            "endPos": 23
        },
        {
            "entity": "entity name 2 goes here",
            "startPos": 14,
            "endPos": 23
        }
    ]
  }
]

Některé testovací nástroje, například NLU. DevOps také podporuje testovací soubory formátované funkcí LUDown.

Návrh testů jednotek

Testy jednotek by měly být navržené tak, aby testily základní funkce vaší aplikace LUIS. V každé iteraci nebo sprintu vývoje vaší aplikace byste měli napsat dostatečný počet testů, abyste ověřili, že klíčové funkce, které implementujete v iteraci, fungují správně.

V každém testu jednotek můžete pro danou testovací promluvu:

  • Test, že se vrátí správný záměr
  • Otestujte, že se vrací entity "key" (klíčové pro vaše řešení).
  • Otestujte, že skóre předpovědi pro záměr a entity překračuje prahovou hodnotu, kterou definujete. Můžete se například rozhodnout, že budete uvažovat pouze o tom, že test prošel, pokud skóre předpovědi pro záměr a pro klíčové entity překročí hodnotu 0,75.

V testech jednotek je vhodné otestovat, že klíčové entity byly vráceny v odpovědi předpovědi, ale ignorovat všechny falešně pozitivní výsledky. Falešně pozitivní jsou entity, které se nacházejí v odpovědi predikce, ale které nejsou definovány v očekávaných výsledcích testu. Díky ignorování falešně pozitivních výsledků je vytváření testů jednotek méně obtížné a zároveň vám umožní soustředit se na testování, že data, která jsou klíčem k vašemu řešení, se vrací v predikční odpovědi.

Tip

NlU . Nástroj DevOps podporuje všechny vaše potřeby testování luis. Příkaz compare , který se použije v režimu testování jednotek, ověří, že všechny testy projdou a budou ignorovat falešně pozitivní výsledky pro entity, které nejsou označeny v očekávaných výsledcích.

Návrh dávkových testů

Sady dávkových testů by měly obsahovat velký počet testovacích případů navržených k testování napříč všemi záměry a všemi entitami v aplikaci LUIS. Informace o definování sady dávkových testů najdete v tématu Dávkové testování na portálu LUIS.

Spouštění testů

Portál LUIS nabízí funkce, které vám pomůžou s interaktivním testováním:

  • Interaktivní testování umožňuje odeslat ukázkovou promluvu a získat odpověď na záměry a entity rozpoznané službou LUIS. Úspěch testu ověříte vizuální kontrolou.

  • Dávkové testování používá jako vstup soubor dávkového testu k ověření aktivní natrénované verze k měření přesnosti predikce. Dávkové testování vám pomůže zobrazit přesnost každého záměru a entity ve vaší aktivní verzi a zobrazit výsledky pomocí grafu.

Spouštění testů v pracovním postupu automatizovaného sestavení

Interaktivní funkce testování na portálu LUIS jsou užitečné, ale pro DevOps automatizované testování prováděné v pracovním postupu CI/CD přináší určité požadavky:

  • Testovací nástroje musí běžet v kroku pracovního postupu na buildovém serveru. To znamená, že nástroje musí být schopné spustit na příkazovém řádku.
  • Testovací nástroje musí být schopné spouštět skupinu testů na koncovém bodu a automaticky ověřovat očekávané výsledky ve skutečných výsledcích.
  • Pokud testy selžou, testovací nástroje musí vrátit stavový kód, aby se zastavil pracovní postup a sestavení selhalo.

Služba LUIS nenabízí nástroj příkazového řádku ani rozhraní API vysoké úrovně, které tyto funkce nabízí. Doporučujeme použít vyrovnávání zatížení sítě. Nástroj DevOps pro spouštění testů a ověřování výsledků na příkazovém řádku i během automatizovaného testování v rámci pracovního postupu CI/CD.

Možnosti testování, které jsou k dispozici na portálu LUIS, nevyžadují publikovaný koncový bod a jsou součástí možností vytváření luis. Při implementaci testování v pracovním postupu automatizovaného sestavení musíte publikovat verzi aplikace LUIS, která se má testovat do koncového bodu, aby testovací nástroje, jako je NLU. DevOps může v rámci testování odesílat požadavky na predikce.

Tip

  • Pokud implementujete vlastní testovací řešení a píšete kód pro odesílání testovacích promluv do koncového bodu, mějte na paměti, že pokud používáte klíč pro vytváření luis, povolená rychlost transakcí je omezená na 5TPS. Omezte rychlost odesílání nebo místo toho použijte prediktivní klíč.
  • Při odesílání testovacích dotazů do koncového bodu nezapomeňte použít log=false v řetězci dotazu požadavku na predikci. Tím se zajistí, že se vaše testovací promluvy nezaprotokolují službou LUIS a skončí v seznamu kontrol promluv koncových bodů, který prezentuje aktivní funkce učení LUIS, a v důsledku toho se omylem přidají do trénovacích promluv vaší aplikace.

Spouštění testů jednotek na příkazovém řádku a v pracovních postupech CI/CD

Můžete použít vyrovnávání zatížení sítě. Balíček DevOps pro spouštění testů na příkazovém řádku:

  • Použijte nlU. Testovací příkaz DevOps pro odeslání testů z testovacího souboru do koncového bodu a zachycení skutečných výsledků předpovědi do souboru
  • Použijte nlU. Příkaz DevOps compare k porovnání skutečných výsledků s očekávanými výsledky definovanými ve vstupním testovacím souboru. Příkaz compare vygeneruje výstup testu NUnit a při použití v režimu testování jednotek pomocí příznaku --unit-test ověří, že všechny testy projdou.

Spouštění dávkových testů na příkazovém řádku a v pracovních postupech CI/CD

Můžete také použít vyrovnávání zatížení sítě. Balíček DevOps pro spouštění dávkových testů na příkazovém řádku

  • Použijte nlU. Testovací příkaz DevOps, který odešle testy z testovacího souboru do koncového bodu a zachytí skutečné výsledky předpovědi v souboru, stejně jako testy jednotek.
  • Použijte nlU. Příkaz DevOps compare v režimu testu výkonnosti k měření výkonu aplikace Můžete také porovnat výkon aplikace s srovnávacím srovnávacím testem standardního výkonu, například výsledky nejnovějšího potvrzení do hlavní nebo aktuální verze. V režimu testu výkonnosti vygeneruje compare příkaz výstup testu NUnit a výsledky dávkového testu ve formátu JSON.

Ne deterministické trénování luis a vliv na testování

Když služba LUIS trénuje model, například záměr, potřebuje jak kladná data, tak i popisky trénovacích promluv, které jste zadali k trénování aplikace pro model – a záporná data – data, která nejsou platnými příklady použití tohoto modelu. Během trénování služba LUIS sestaví záporná data jednoho modelu ze všech pozitivních dat, která jste zadali pro ostatní modely, ale v některých případech může způsobit nevyváženost dat. Aby se zabránilo této nevyváženosti, služba LUIS vzorkuje podmnožinu negativních dat ne deterministickým způsobem, aby se optimalizovala pro lépe vyváženou trénovací sadu, vylepšený výkon modelu a rychlejší trénování.

Výsledkem tohoto ne deterministického trénování je, že se mezi různými trénovacími relacemi může zobrazit mírně odlišná odpověď predikce, obvykle pro záměry nebo entity, u kterých není skóre předpovědi vysoké.

Pokud chcete zakázat ne deterministické trénování pro ty verze aplikací LUIS, které vytváříte pro účely testování, použijte rozhraní API pro nastavení verzí s nastavením nastaveným UseAllTrainingData na true.

Další kroky