A LUIS DevOps tesztelése

Fontos

A LUIS 2025. október 1-jén megszűnik, és 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Javasoljuk, hogy a LUIS-alkalmazásokat a beszélgetési nyelv megértésére migrálja, hogy kihasználhassa a terméktámogatás és a többnyelvű képességek előnyeit.

A Language Understanding (LUIS) alkalmazást fejlesztő szoftvermérnökök ezen irányelvek követésével alkalmazhatják a DevOps-gyakorlatokat a forráskezelés, az automatizált buildek, a tesztelés és a kiadáskezelés területén.

Az agilis szoftverfejlesztési módszerekben a tesztelés szerves szerepet játszik a minőségi szoftverek fejlesztésében. A LUIS-alkalmazások minden jelentős változását olyan tesztekkel kell kiegészíteni, amelyeket a fejlesztő az alkalmazásba épülő új funkciók tesztelésére terveztek. Ezek a tesztek a LUIS-alkalmazás forrásával együtt bekerülnek a .lu forráskódtárba. A módosítás végrehajtása akkor fejeződik be, ha az alkalmazás megfelel a teszteknek.

A tesztek a CI/CD-munkafolyamatok kritikus részét képezik. Ha egy LUIS-alkalmazás módosításait lekéréses kérelemben (PR) javasolják, vagy a módosítások a fő ágba való egyesítése után, akkor a CI-munkafolyamatoknak le kell futtatniuk a teszteket annak ellenőrzéséhez, hogy a frissítések nem okoztak-e regressziót.

Egységtesztelés és Batch-tesztelés

A LUIS-alkalmazásoknak két különböző tesztelési típust kell elvégeznie a folyamatos integrációs munkafolyamatokban:

  • Egységtesztek – Viszonylag egyszerű tesztek, amelyek ellenőrzik a LUIS-alkalmazás kulcsfunkcióját. Az egységteszt akkor halad át, ha a várt szándék és a várt entitások egy adott kimondott szöveghez lesznek visszaadva. Minden egységtesztnek sikeresnek kell lennie ahhoz, hogy a teszt sikeresen lefutjon.
    Ez a fajta tesztelés hasonló a LUIS-portálon elvégezhető interaktív teszteléshez.

  • Batch-tesztek – A Batch-tesztelés egy átfogó teszt az aktuális betanított modellen a teljesítmény méréséhez. Az egységtesztekkel ellentétben a kötegtesztelés nem felel meg a|feladattesztelésnek. A kötegtesztelés elvárása nem az, hogy minden teszt a várt szándékot és a várt entitásokat adja vissza. Ehelyett egy kötegelt teszt segít az alkalmazás minden egyes szándékának és entitásának pontosságának megtekintésében, és segít az idő függvényében összehasonlítani a fejlesztéseket.
    Ez a fajta tesztelés ugyanaz, mint a Batch-tesztelés , amelyet interaktív módon hajthat végre a LUIS-portálon.

A projekt kezdetétől alkalmazhat egységtesztelést. A batch-tesztelés csak akkor lehet igazán értékes, ha kifejlesztette a LUIS-alkalmazás sémáját, és a pontosságán dolgozik.

Az egységtesztekhez és a kötegtesztekhez is győződjön meg arról, hogy a teszt kimondottszövegei elkülönülnek a betanítási kimondott szövegektől. Ha ugyanazokat az adatokat teszteli, amelyen betanít, akkor azt a hamis benyomást fogja kapni, hogy az alkalmazás jól teljesít, amikor az éppen túlilleszti a tesztelési adatokat. A teszteket a modellnek el kell végeznie az általánosítás ellenőrzéséhez.

Tesztek írása

Tesztkészlet írásakor minden egyes teszthez meg kell határoznia a következőket:

  • Kimondott szöveg tesztelése
  • Várt szándék
  • Várt entitások.

A LUIS-kötegfájl szintaxisával definiálhat egy tesztcsoportot egy JSON-formátumú fájlban. Példa:

[
  {
    "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éhány teszteszköz, például az NLU. A DevOps a LUDown formátumú tesztfájlokat is támogatja.

Egységtesztek tervezése

Az egységteszteket úgy kell megtervezni, hogy teszteljék a LUIS-alkalmazás alapvető funkcióit. Az alkalmazásfejlesztés minden iterációjában vagy sprintjében elegendő számú tesztet kell írnia annak ellenőrzéséhez, hogy az iterációban implementálandó kulcsfontosságú funkciók megfelelően működnek-e.

Minden egységtesztben egy adott kimondott szöveghez a következőt teheti:

  • A helyes szándék visszaadása ellenőrzése
  • Ellenőrizze, hogy a "kulcs" entitások – amelyek kritikus fontosságúak a megoldáshoz – vissza lesznek-e adva.
  • Ellenőrizze, hogy a szándékok és entitások előrejelzési pontszáma meghaladja-e a megadott küszöbértéket. Dönthet például úgy, hogy csak akkor veszi figyelembe, hogy egy teszt sikeres volt, ha a szándék és a fő entitások előrejelzési pontszáma meghaladja a 0,75-öt.

Az egységtesztekben érdemes tesztelni, hogy a fő entitások vissza lettek-e adva az előrejelzési válaszban, de figyelmen kívül kell hagyni a hamis pozitív értékeket. A hamis pozitív értékek olyan entitások , amelyek az előrejelzési válaszban találhatók, de nem definiálódnak a teszt várt eredményei között. A hamis pozitív értékek figyelmen kívül hagyásával kevésbé megterhelő az egységtesztek készítése, miközben továbbra is a megoldás szempontjából kulcsfontosságú adatok előrejelzési válaszban való visszaadásának tesztelésére összpontosíthat.

Tipp.

Az NLU. A DevOps eszköz minden LUIS-tesztelési igényt támogat. Az compare egységteszt módban használt parancs azt állítja, hogy az összes teszt sikeres, és figyelmen kívül hagyja a várt eredményekben nem címkézett entitások hamis pozitív eredményeit.

Batch-tesztek tervezése

A Batch-tesztkészleteknek nagy számú tesztesetet kell tartalmazniuk, amelyeket úgy terveztek, hogy teszteljék a LUIS-alkalmazásban lévő összes szándékot és entitást. A batch-tesztkészlet meghatározásával kapcsolatos információkért tekintse meg a Batch-tesztelést a LUIS-portálon .

Tesztek futtatása

A LUIS-portál olyan funkciókat kínál, amelyek segítenek az interaktív tesztelésben:

  • Az interaktív tesztelés lehetővé teszi, hogy elküldjön egy kimondott mintát, és választ kapjon a LUIS által felismert szándékokról és entitásokról. A teszt sikerességét vizuális ellenőrzéssel ellenőrizheti.

  • A kötegelt tesztelés egy kötegelt tesztfájlt használ bemenetként az aktív betanított verzió ellenőrzéséhez az előrejelzés pontosságának méréséhez. A kötegtesztek segítségével megtekintheti az aktív verzióban lévő egyes szándékok és entitások pontosságát, és megjelenítheti az eredményeket egy diagramon.

Tesztek futtatása automatizált buildelési munkafolyamatban

A LUIS-portál interaktív tesztelési funkciói hasznosak, de a DevOps esetében a CI/CD-munkafolyamatban végzett automatizált tesztelés bizonyos követelményeket támaszt:

  • A teszteszközöknek munkafolyamat-lépésben kell futniuk egy buildkiszolgálón. Ez azt jelenti, hogy az eszközöknek képesnek kell lenniük a parancssorban való futtatásra.
  • A teszteszközöknek képesnek kell lenniük egy tesztcsoport végrehajtására egy végponton, és automatikusan ellenőrizni a várt eredményeket a tényleges eredmények alapján.
  • Ha a tesztek sikertelenek, a teszteszközöknek vissza kell adniuk egy állapotkódot a munkafolyamat leállításához és a "buildelés meghiúsulásához".

A LUIS nem kínál parancssori eszközt vagy magas szintű API-t, amely ezeket a funkciókat kínálja. Javasoljuk, hogy használja az NLU-t . DevOps-eszköz tesztek futtatásához és az eredmények ellenőrzéséhez a parancssorban és a CI/CD-munkafolyamaton belüli automatizált tesztelés során.

A LUIS-portálon elérhető tesztelési képességek nem igényelnek közzétett végpontot, és a LUIS szerzői képességeinek részét képezik. Ha automatizált buildelési munkafolyamatban implementálja a tesztelést, közzé kell tennie a LUIS-alkalmazás verzióját, amelyet tesztelni kell egy végponton, hogy az olyan teszteszközöket, mint az NLU. A DevOps a tesztelés részeként előrejelzési kéréseket küldhet.

Tipp.

  • Ha saját tesztelési megoldást implementál, és kódot ír, hogy tesztszövegeket küldjön egy végpontnak, ne feledje, hogy ha a LUIS szerzői kulcsát használja, az engedélyezett tranzakciós sebesség 5 TPS-re korlátozódik. Vagy szabályozza a küldési sebességet, vagy használjon inkább egy előrejelzési kulcsot.
  • Amikor tesztlekérdezéseket küld egy végpontnak, ne felejtse el használni log=false az előrejelzési kérés lekérdezési sztringjében. Ez biztosítja, hogy a teszt kimondott szövegeit ne naplózza a LUIS, és a végponti kimondott szövegek áttekintési listájába kerüljön, amelyet a LUIS aktív tanulási funkciója mutat be, és ennek eredményeképpen véletlenül hozzáadja az alkalmazás betanítási kimondott szövegéhez.

Egységtesztek futtatása a parancssorban és a CI/CD-munkafolyamatokban

Használhatja az NLU-t . DevOps-csomag a tesztek parancssori futtatásához:

  • Használja az NLU-t. A DevOps tesztparancsa tesztfájlból végpontra küldi a teszteket, és rögzíti a tényleges előrejelzési eredményeket egy fájlban.
  • Használja az NLU-t. A DevOps compare paranccsal összehasonlíthatja a tényleges eredményeket a bemeneti tesztfájlban meghatározott várt eredményekkel. A compare parancs NUnit-tesztkimenetet hoz létre, és ha egységteszt módban használja a --unit-test jelölőt, az összes teszt sikerességét állítja be.

Batch-tesztek futtatása a parancssorban és a CI/CD-munkafolyamatokban

Az NLU-t is használhatja. A DevOps-csomag kötegelt teszteket futtat a parancssorban.

  • Használja az NLU-t. A DevOps tesztparancsa tesztfájlból végpontra küldi a teszteket, és rögzíti a tényleges előrejelzési eredményeket egy fájlban, ugyanúgy, mint az egységtesztek esetén.
  • Használja az NLU-t. A DevOps teljesítménytesztelési módban összehasonlítja a parancsot az alkalmazás teljesítményének méréséhez Az alkalmazás teljesítményét összehasonlíthatja egy alapkonfiguráció teljesítménymutatóval, például a fő kiadásra való legutóbbi véglegesítés eredményeivel vagy az aktuális kiadással. Teljesítménytesztelési módban a compare parancs NUnit-tesztkimenetet és kötegelt teszteredményeket hoz létre JSON formátumban.

A LUIS nem determinisztikus képzése és a tesztelésre gyakorolt hatás

Ha a LUIS betanított egy modellt, például egy szándékot, mindkét pozitív adatra szükség van – a modell alkalmazásának betanításához megadott címkézett betanítási kimondott szövegekre – és negatív adatokra – olyan adatokra, amelyek nem érvényesek a modell használatára. A betanítás során a LUIS az egyik modell negatív adatait a többi modellhez megadott összes pozitív adatból hozza létre, de bizonyos esetekben az adatok kiegyensúlyozatlanságához vezethet. Az egyensúlyhiány elkerülése érdekében a LUIS a negatív adatok egy részét nem determinisztikus módon mintázva optimalizálja a kiegyensúlyozottabb betanítási készletet, a jobb modellteljesítményt és a gyorsabb betanítási időt.

Ennek a nem determinisztikus betanításnak az az eredménye, hogy kissé eltérő előrejelzési választ kaphat a különböző betanítási munkamenetek között, általában olyan szándékok és/vagy entitások esetében, ahol az előrejelzési pontszám nem magas.

Ha le szeretné tiltani a tesztelés céljából létrehozott LUIS-alkalmazásverziók nem determinisztikus betanítását, használja a Verzióbeállítások API-t a UseAllTrainingData beállítás beállításával true.

Következő lépések