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. Existují různé přístupy, které byste mohli vzít při definování toho, co byste měli vytvořit jako záměr a entitu. Položte si tyto otázky:
- 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ů jsou entity.
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šení s různými příklady, jako je zrušení služby Contoso nebo zastavení účtování předplatného Fabrikam. Záměrem uživatele je zrušit a předplatná společnosti Contoso nebo Fabrikam jsou předplatná, která chtějí zrušit.
Pokud chcete pokračovat, vytvoříte 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í. Tento přístup umožňuje zrušit cokoli, co definujete jako entitu, například jiné produkty. Pak můžete mít záměry pro registraci, obnovení a upgrade, které všechny využívají předplatná a další entity.
Předchozí návrh schématu usnadňuje rozšíření stávajících možností (zrušení, upgrade nebo 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, jak umožnit zákazníkům 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 "Zrušit Contoso", "Ukončit účtování poplatků za služby Contoso" a "Zrušit předplatné Contoso". Pak vytvoříte 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.
Ujistěte se, že se snažte trychtýřovat všechny koncepty do záměrů. Nepokoušejte se například vytvořit záměr Zrušit contoso , který má pouze účel jedné 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 polovinou s informacemi jako záměry. Pokud chcete získat možné výsledky, ujistěte se, že je konzistentní.
Vyvážení trénovacích dat
Pokud jde o trénovací data, zkuste udržovat schéma dobře vyvážené. Zahrnutím velkého množství jednoho záměru a velmi málo dalších výsledků je model, který je zkreslený vůči konkrétním záměrům.
Pokud chcete tento scénář vyřešit, možná budete muset převzorkovat trénovací sadu. Nebo ho možná budete muset přidat. Pokud chcete downsample, můžete:
- Zbavte se určitého procenta trénovacích dat náhodně.
- Analyzujte datovou sadu a odeberte nadměrně reprezentované duplicitní položky, což je systematičtější způsob.
Pokud chcete přidat do trénovací sady, v sadě Language Studio na kartě Popisování dat vyberte Navrhnout promluvy. Konverzační language Understanding odesílá volání do Azure OpenAI za účelem vygenerování podobných promluv.
V trénovací sadě byste také měli hledat nezamýšlené vzory. Podívejte se například, jestli je 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.
Doporučujeme, abyste v trénovací sadě zavedli různou velikost a interpunkční rozmanitosti. 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 tento nedostatek rozlišení znamenat, ž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ěsta původu může být, že slovo od něj často předchází.
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 entity, které to dělají. Tento postup pomáhá 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í. Pomůže vám 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ískali nejlepší kvalitu modelu.
Použití funkce vyhodnocení
Při vytváření aplikace je často užitečné včas zachytit chyby. Při sestavování aplikace je obvykle vhodné přidat testovací sadu. Výsledky trénování a hodnocení jsou užitečné při identifikaci chyb nebo problémů ve schématu.
Komponenty a složení strojového učení
Další informace naleznete v tématu 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 ovlivňuje odvozování.
- Ne strojově naučené komponenty entit, jako jsou seznamy a regulární výrazy, nejsou podle definice 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 by se měla aktivovat složená entita.
Předpokládejme například, že máte entitu s názvem Ticket Quantity , která se pokouší extrahovat počet vstupenek, které chcete rezervovat pro rezervace letů, pro promluvy, jako je například "Rezervovat dva lístky zítra do Káhiry".
Obvykle přidáte 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, extrahuje také další čísla jako součást entity Ticket Quantity , 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.
- Naučená komponenta, která předpovídá, kde se nachází množství lístku ve větě.
Pokud vyžadujete naučenou komponentu, ujistěte se, že se množství lístků vrátí, pouze když ji naučená komponenta predikuje ve správném kontextu. Pokud také potřebujete předem připravenou komponentu, můžete zaručit, že vrácená entita Ticket Quantity je číslo i ve správné pozici.
Nekonzistence modelu adresy
Pokud je váš model příliš citlivý na malé gramatické změny, jako jsou písmena nebo diakritika, můžete datovou sadu systematicky manipulovat přímo v sadě Language Studio. Pokud chcete tyto funkce použít, vyberte kartu Nastavení v levém podokně a vyhledejte část Upřesnit nastavení projektu.
Nejprve můžete povolit nastavení Povolit transformaci dat pro velikost velikosti a velikostí, což normalizuje velikost velikosti promluv při trénování, testování a implementaci modelu. Pokud jste migrovali ze služby LUIS, možná zjistíte, že služba LUIS tuto normalizaci ve výchozím nastavení udělala. Pokud chcete získat přístup k této funkci prostřednictvím rozhraní API, nastavte normalizeCasing
parametr na true
hodnotu . Prohlédněte si následující příklad:
{
"projectFileVersion": "2022-10-01-preview",
...
"settings": {
...
"normalizeCasing": true
...
}
...
Za druhé můžete také povolit nastavení povolit rozšíření dat pro diakritická znaménka pro generování variací trénovacích dat pro možné diakritické varianty používané v přirozeném jazyce. Tato funkce je dostupná pro všechny jazyky. Je zvlášť užitečná pro německé a jazykové jazyky, kde uživatelé často píší slova pomocí klasických anglických znaků místo správných znaků. Například fráze "Přejít na sportovní kanál" ve francouzštině je "Accédez à la chaîne sportive" (Accédez à la chaîne sportive). Pokud je tato funkce povolená, je součástí trénovací datové sady také fráze Accedez a la chaine sportive (bez diakritických znaků).
Pokud tuto funkci povolíte, zvýší se počet promluv vaší trénovací sady. Z tohoto důvodu možná budete muset odpovídajícím způsobem upravit velikost trénovacích dat. Aktuální maximální počet promluv po rozšíření je 25 000. Pokud chcete získat přístup k této funkci prostřednictvím rozhraní API, nastavte augmentDiacritics
parametr na true
hodnotu . Prohlédněte si následující příklad:
{
"projectFileVersion": "2022-10-01-preview",
...
"settings": {
...
"augmentDiacritics": true
...
}
...
Překonfidence modelu adresy
Zákazníci můžou použít verzi konfigurace přepisu LoraNorm, pokud je model nesprávně nepřekonfigurován. Příkladem tohoto chování může být následující scénář, ve kterém model predikuje nesprávný záměr s 100% jistotou. Toto skóre způsobí, že nastavení projektu prahové hodnoty spolehlivosti je 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 tento scénář 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
Díky modelu verze 2023-04-15 poskytuje konverzační jazykové porozumění 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 je počet záměrů nízký, má normalizační vrstva malý rozsah, se kterým se dá pracovat. S 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 filtrování promluv mimo rozsah, může souviset s počtem záměrů v aplikaci. Zvažte přidání dalších záměrů do aplikace. 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. Jedna nebo více komponent definuje funkci. Součásti můžete označit podle potřeby a můžete se rozhodnout, jestli chcete povolit nastavení Kombinovat součásti . Když zkombinujete komponenty, všechny rozsahy, které se překrývají, se sloučí do jednoho rozsahu. Pokud se 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 jednotlivé komponenty na nepožadovat. Toto nastavení umožňuje 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: testovací sadu a trénovací sadu. 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í.
- K importu nového projektu použijte JSON. 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 předchozí 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írovat v sadě Language Studio. V některých případech může být jednodušší kopírovat projekty pomocí rozhraní API.
Nejprve identifikujte:
- Název zdrojového projektu
- Název cílového projektu.
- Prostředek zdrojového 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>"
}'
Řešení promluv mimo doménu
Zákazníci můžou použít nově aktualizovanou verzi 2024-08-01-preview
konfigurace trénování (dříve 2024-06-01-preview
), pokud má model nízkou kvalitu promluv mimo doménu. Příklad tohoto scénáře s výchozí konfigurací trénování může být podobný následujícímu příkladu, ve kterém má model tři 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 scénář vyřešit, použijte 2024-08-01-preview
verzi konfigurace, která je vytvořená speciálně pro řešení tohoto problému, a zároveň zachovat přiměřeně dobrou kvalitu InDomain
promluv.
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-08-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 skóre None pro aplikaci (prahová hodnota spolehlivosti nižší, která
topIntent
je označena jakoNone
) při použití této konfigurace trénování by měla být nastavena na hodnotu 0. Toto nastavení se používá, protože tento nový atribut konfigurace trénování představuje určitou část pravděpodobností v doméně mimo doménu, aby model nebyl nesprávně nepřekonfigurovaný o promluvách v doméně. V důsledku toho se uživatelům může v porovnání s konfigurací trénování v doméně zobrazit mírně nižší skóre spolehlivosti pro promluvy v doméně. - Tuto konfiguraci trénování nedoporučujeme pro aplikace, které mají jenom dva záměry, například
IntentA
aNone
. - Tuto konfiguraci trénování nedoporučujeme pro aplikace s nízkým počtem promluv na záměr. Důrazně doporučujeme minimálně 25 promluv na záměr.