Osvědčené postupy pro porozumění konverzačnímu jazyku

Při vytváření nejlepších možných projektů v konverzačním jazyce použijte následující pokyny.

Volba konzistentního schématu

Schéma je definice vašich záměrů a entit. Při definování toho, co byste měli vytvořit jako záměr a entitu, můžete použít různé přístupy. Je potřeba se zeptat na několik otázek:

  • Jaké akce nebo dotazy se pokouším zachytit od uživatele?
  • Jaké informace jsou relevantní v jednotlivých akcích?

Akce a dotazy si obvykle můžete představit jako záměry, zatímco informace potřebné ke splnění těchto dotazů jako entit.

Předpokládejme například, že chcete, aby vaši zákazníci zrušili předplatná pro různé produkty, které nabízíte prostřednictvím chatovacího robota. Můžete vytvořit záměr Zrušit s různými příklady, jako je zrušení služby Contoso, nebo zastavení účtování poplatků za předplatné Fabrikam. Záměrem uživatele je zrušit,služba Contoso nebo předplatné Fabrikam jsou předplatná, která by chtěla zrušit. Proto můžete vytvořit entitu pro předplatná. Pak můžete modelovat celý projekt, abyste zachytili akce jako záměry a použili entity k vyplnění těchto akcí. To vám umožní zrušit cokoli, co definujete jako entitu, například jiné produkty. Pak můžete mít záměry pro registraci, prodloužení platnosti, upgrade atd., které využívají předplatná a další entity.

Výše uvedený návrh schématu usnadňuje rozšíření stávajících možností (zrušení, upgrade, registrace) na nové cíle vytvořením nové entity.

Dalším přístupem je modelování informací jako záměrů a akcí jako entit. Podívejme se na stejný příklad, který zákazníkům umožní zrušit předplatná prostřednictvím chatovacího robota. Můžete vytvořit záměr pro každé dostupné předplatné, například Contoso s promluvami, jako je třeba "zrušit Contoso", "přestat mi účtovat poplatky za služby contoso", "Zrušit předplatné Contoso". Pak byste vytvořili entitu pro zachycení akce, zrušení. Pro každou akci můžete definovat různé entity nebo sloučit akce jako jednu entitu s komponentou seznamu, abyste mohli rozlišovat mezi akcemi s různými klíči.

Tento návrh schématu usnadňuje rozšíření nových akcí na existující cíle přidáním nových entit akcí nebo součástí entity.

Nezapomeňte se vyhnout pokusu o trychtýřování všech konceptů do jenom záměrů, například se nepokoušejte vytvořit záměr Zrušit contoso , který má pouze účel dané konkrétní akce. Záměry a entity by měly spolupracovat na zachycení všech požadovaných informací od zákazníka.

Chcete se také vyhnout kombinování různých návrhů schémat. Nevystavujte polovinu aplikace s akcemi jako záměry a druhou polovinu s informacemi jako záměry. Ujistěte se, že je konzistentní, abyste získali možné výsledky.

Vyvážení trénovacích dat

Pokud jde o trénovací data, měli byste se pokusit zachovat dobře vyvážené schéma. Zahrnutí velkého množství jednoho záměru a velmi málo dalších bude mít za následek model, který je silně zkreslený vůči konkrétním záměrům.

Abyste to mohli vyřešit, budete možná muset převzorkovat trénovací sadu nebo ji přidat. Převzorkování lze provést buď:

  • Náhodné odstranění určitého procenta trénovacích dat.
  • Systematičtějším způsobem analýzou datové sady a odebráním více reprezentovaných duplicitních položek.

Do trénovací sady můžete také přidat výběrem možnosti Navrhnout promluvy na kartě Popisky dat v sadě Language Studio. Konverzační language Understanding odešle volání do Azure OpenAI za účelem vygenerování podobných promluv.

Snímek obrazovky s návrhem promluvy v sadě Language Studio

V trénovací sadě byste také měli hledat nezamýšlené vzory. Pokud je například trénovací sada pro konkrétní záměr malými písmeny nebo začíná konkrétní frází. V takových případech se model, který natrénujete, může naučit tyto nezamýšlené předsudky v trénovací sadě místo toho, aby bylo možné generalizovat.

V trénovací sadě doporučujeme zavést rozmanitost velikostí a interpunkce. Pokud se očekává, že váš model bude zpracovávat varianty, nezapomeňte mít trénovací sadu, která také odráží tuto rozmanitost. Můžete například zahrnout některé promluvy do správného písmena a některé ve všech malých písmenech.

Jasně označovat promluvy

  • Ujistěte se, že koncepty, na které odkazují vaše entity, jsou dobře definované a oddělitelné. Zkontrolujte, jestli můžete spolehlivě určit rozdíly. Pokud to nemůžete, může to být označení, že naučená komponenta bude mít také potíže.

  • Pokud existuje podobnost mezi entitami, ujistěte se, že existují určité aspekty vašich dat, které poskytují signál pro rozdíl mezi nimi.

    Pokud jste například vytvořili model pro rezervaci letů, může uživatel použít promluvu typu "Chci let z Bostonu do Seattlu". U takových promluv by se očekávalo, že město původu a cílové město budou podobné. Signál k rozlišení "Město původu" může být, že před ním často předchází slovo "from".

  • Ujistěte se, že v trénovacích i testovacích datech označíte všechny instance každé entity. Jedním z přístupů je použití vyhledávací funkce k vyhledání všech výskytů slova nebo fráze v datech, abyste zjistili, jestli jsou správně označené.

  • Označte testovací data pro entity, které nemají žádnou naučenou komponentu , a také pro ty, které to dělají. To vám pomůže zajistit, aby metriky vyhodnocení byly přesné.

Použití standardního trénování před pokročilým trénováním

Standardní trénování je bezplatné a rychlejší než pokročilé trénování , takže je užitečné rychle pochopit vliv změny trénovací sady nebo schématu při sestavování modelu. Jakmile budete se schématem spokojeni, zvažte použití pokročilého trénování, abyste z modelu získali nejlepší AIQ.

Použití funkce vyhodnocení

Při vytváření aplikace je často užitečné včas zachytit chyby. Při vytváření aplikace je obvykle vhodné přidat testovací sadu, protože výsledky trénování a vyhodnocení jsou velmi užitečné při identifikaci chyb nebo problémů ve schématu.

Komponenty a složení strojového učení

Viz typy komponent.

Použití prahové hodnoty skóre none

Pokud se zobrazí příliš mnoho falešně pozitivních výsledků, jako jsou například promluvy mimo kontext, které jsou označené jako platné záměry, podívejte se na prahovou hodnotu spolehlivosti, kde najdete informace o tom, jak to ovlivňuje odvozování.

  • Ne strojově naučené komponenty entit, jako jsou seznamy a regulární výrazy, nejsou kontextové. Pokud se na nezamýšlených místech zobrazí entity seznamu nebo regulárních výrazů, zkuste označit synonyma seznamu jako strojově naučenou komponentu.

  • U entit můžete použít naučenou komponentu jako požadovanou komponentu, abyste omezili, kdy se má složená entita aktivovat.

Předpokládejme například, že máte entitu s názvem "Množství lístků", která se pokusí extrahovat počet vstupenek, které chcete rezervovat pro rezervace letů, pro promluvy, jako je například "Rezervovat dvě letenky zítra do Káhiry".

Obvykle byste přidali předem připravenou komponentu, která Quantity.Number už extrahuje všechna čísla v promluvách. Pokud byla však entita definována pouze s předem připravenou komponentou, extrahovala by také další čísla jako součást entity množství lístku, například "Rezervovat dva lístky zítra do Káhiry na 3:00".

Pokud chcete tento problém vyřešit, označíte v trénovacích datech naučenou komponentu pro všechna čísla, která jsou určená jako množství lístku. Entita teď má dvě komponenty:

  • Předem připravená komponenta, která dokáže interpretovat všechna čísla a
  • Naučená komponenta, která předpovídá, kde je množství lístku ve větě.

Pokud vyžadujete naučenou komponentu, ujistěte se, že se množství lístku vrátí, pouze když ji naučená komponenta predikuje ve správném kontextu. Pokud také vyžadujete předem připravenou komponentu, můžete zaručit, že vrácená entita množství lístku je číslo i ve správné pozici.

Řešení nekonzistence v casingu

Pokud máte špatnou kvalitu AI a zjistíte, že velikost použitého v trénovacích datech se od testovacích dat odliší, můžete použít normalizeCasing nastavení projektu. To normalizuje velikost promluv při trénování a testování modelu. Pokud jste migrovali ze služby LUIS, možná zjistíte, že služba LUIS to ve výchozím nastavení udělala.

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      "confidenceThreshold": 0.5,
      "normalizeCasing": true
    }
...

Řešení překonfidence modelu

Zákazníci můžou použít verzi receptu LoraNorm v případě, že model není správně nepřekonverzený. Příklad může být podobný následujícímu příkladu (všimněte si, že model predikuje nesprávný záměr s 100% jistotou). Díky tomu je nastavení projektu prahové hodnoty spolehlivosti nepoužitelné.

Text Předpovězený záměr Skóre spolehlivosti
"Kdo postavil Eiffelovu věž?" Sports 1.00
"Vypadám pro tebe dnes dobře?" QueryWeather 1.00
"Doufám, že máte dobrý večer."" Alarm 1.00

Pokud chcete tuto chybu vyřešit, použijte 2023-04-15 verzi konfigurace, která normalizuje skóre spolehlivosti. Nastavení projektu prahové hodnoty spolehlivosti je pak možné upravit, aby bylo dosaženo požadovaného výsledku.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Po odeslání požadavku můžete sledovat průběh trénovací úlohy v sadě Language Studio obvyklým způsobem.

Poznámka:

Po aktualizaci confidenceThreshold nastavení projektu musíte model přetrénovat. Potom budete muset aplikaci znovu publikovat, aby se nová prahová hodnota projevila.

Normalizace v modelu verze 2023-04-15

Model verze 2023-04-15, konverzační jazyk porozumění poskytuje normalizaci ve vrstvě odvozování, která nemá vliv na trénování.

Normalizační vrstva normalizuje skóre spolehlivosti klasifikace do omezeného rozsahu. Vybraná oblast je aktuálně z místa, kde [-a,a] "a" je druhou odmocninou počtu záměrů. V důsledku toho normalizace závisí na počtu záměrů v aplikaci. Pokud existuje velmi nízký počet záměrů, má normalizační vrstva velmi malý rozsah, se kterým se dá pracovat. S poměrně velkým počtem záměrů je normalizace efektivnější.

Pokud se zdá, že tato normalizace nepomáhá záměrům, které jsou mimo rozsah, v rozsahu, v jakém se dá prahová hodnota spolehlivosti použít k vyfiltrování promluv v rozsahu, může souviset s počtem záměrů v aplikaci. Zvažte přidání dalších záměrů do aplikace nebo pokud používáte orchestrovanou architekturu, zvažte sloučení aplikací, které patří do stejné domény.

Ladění složených entit

Entity jsou funkce, které generují rozsahy ve vstupu s přidruženým typem. Funkce je definována jednou nebo více komponentami. Součásti můžete označit podle potřeby a můžete se rozhodnout, jestli chcete povolit nastavení kombinování součástí . Když zkombinujete komponenty, všechny rozsahy, které se překrývají, se sloučí do jednoho rozsahu. Pokud se toto nastavení nepoužívá, vygeneruje se každé rozpětí jednotlivých komponent.

Abyste lépe pochopili, jak jednotlivé komponenty fungují, můžete nastavení zakázat a nastavit každou komponentu na nepožadování. Díky tomu můžete zkontrolovat jednotlivé rozsahy, které se vygenerují, a experimentovat s odebráním komponent, aby se vygenerovaly pouze problematické součásti.

Vyhodnocení modelu pomocí více testovacích sad

Data v projektu pro pochopení konverzačního jazyka můžou mít dvě datové sady. Sada testování a trénovací sada. Pokud chcete k vyhodnocení modelu použít více testovacích sad, můžete:

  • Dejte testovacím sadám různé názvy (například "test1" a "test2").
  • Exportujte projekt a získejte soubor JSON s jeho parametry a konfigurací.
  • Použijte JSON k importu nového projektu a přejmenujte druhou požadovanou testovací sadu na "test".
  • Vytrénujte model tak, aby spustil vyhodnocení pomocí druhé testovací sady.

Vlastní parametry pro cílové aplikace a podřízené aplikace

Pokud používáte orchestrované aplikace, můžete chtít odeslat přepsání vlastních parametrů pro různé podřízené aplikace. Pole targetProjectParameters umožňuje uživatelům odeslat slovník představující parametry pro každý cílový projekt. Představte si například aplikaci orchestrátoru s názvem Orchestrator orchestrator, která orchestruje mezi aplikací CLU1 pro porozumění konverzačnímu jazyku a vlastní aplikací pro odpovědi na otázky s názvem CQA1. Pokud chcete do aplikace pro odpovědi na otázky odeslat parametr s názvem "top", můžete použít výše uvedený parametr.

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

Kopírování projektů napříč jazykovými prostředky

Projekty pro porozumění konverzačnímu jazyku můžete často kopírovat z jednoho prostředku do druhého pomocí tlačítka kopírování v nástroji Azure Language Studio. V některých případech ale může být jednodušší kopírovat projekty pomocí rozhraní API.

Nejprve identifikujte:

  • název zdrojového projektu
  • název cílového projektu
  • zdrojový prostředek jazyka
  • cílový prostředek jazyka, do kterého ho chcete zkopírovat.

Voláním rozhraní API autorizujete akci kopírování a získejte accessTokens informace o skutečné operaci kopírování později.

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

Voláním rozhraní API dokončete operaci kopírování. Jako datovou část použijte odpověď, kterou jste získali dříve.

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

Adresování promluv mimo doménu

Zákazníci můžou použít novou verzi receptu 2024-06-01-preview pro případ, že model má špatné AIQ na promluvách mimo doménu. Příklad s výchozím receptem může být podobný následujícímu, kde má model 3 záměry Sports, QueryWeather a Alarm. Testovací promluvy jsou mimo doménu a model je klasifikuje jako InDomain s relativně vysokým skóre spolehlivosti.

Text Předpovězený záměr Skóre spolehlivosti
"Kdo postavil Eiffelovu věž?" Sports 0.90
"Vypadám pro tebe dnes dobře?" QueryWeather 1.00
"Doufám, že máte dobrý večer."" Alarm 0.80

Pokud chcete tento problém vyřešit, použijte 2024-06-01-preview konfigurační verzi, která je sestavená speciálně k vyřešení tohoto problému a zároveň zachovat přiměřeně dobrou kvalitu promluv v doméně.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-06-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Po odeslání požadavku můžete sledovat průběh trénovací úlohy v sadě Language Studio obvyklým způsobem.

Upozornění:

  • Prahová hodnota žádného skóre pro aplikaci (prahová hodnota spolehlivosti, pod kterou je topIntent označena jako Žádná) při použití tohoto receptu by měla být nastavena na hodnotu 0. Důvodem je to, že tento nový recept atributy určité části domény probabiliity mimo doménu, takže model není nesprávně nepřekonverfident o doménových promluvách. V důsledku toho se uživatelům může v doménových promluvách v porovnání s prodávkou receptu zobrazit mírně nižší skóre spolehlivosti.
  • Tento recept se nedoporučuje pro aplikace, které mají jenom dva (2) záměry, například IntentA a None.
  • Tento recept se nedoporučuje pro aplikace s nízkým počtem promluv na záměr. Důrazně se doporučuje minimálně 25 promluv na záměr.