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
- Tudnivalók a CI/CD-munkafolyamatok implementálásáról
- Ismerje meg, hogyan implementálhatja a DevOps for LUIS-t a GitHubon