Format pliku .lu

DOTYCZY: ZESTAW SDK w wersji 4

Plik lu opisuje model interpretacji języka. Plik .lu zawiera podobne do języka Markdown, proste definicje oparte na tekście na potrzeby pojęć związanych z interpretacją języka. Możesz użyć co najmniej jednego pliku lu do wytrenowania modelu językowego dla usługi NLU (NLU) lub aparatu używanego przez bota, takiego jak Language Understanding (LUIS) lub Orchestrator. Wybrany aparat NLU może być w stanie interpretować tylko podzestaw elementów, które można opisać w pliku lu.

Aparat nlU opiera się na modelu językowym, aby zrozumieć, co mówi użytkownik. Aparat tworzy model językowy na podstawie zestawów przykładów szkoleniowych, podobnie jak każdy algorytm uczenia maszynowego. Po przeszkoleniu aparat używa modelu do przewidywania intencji wypowiedzi, zazwyczaj w postaci co najmniej jednej intencji reprezentującej zadanie lub akcję, którą użytkownik chce wykonać i zero lub więcej jednostek reprezentujących elementy istotne dla intencji.

Możesz użyć usługi LUIS lub orchestrator z dowolnym botem opracowanym przy użyciu zestawu Bot Framework SDK lub Composer.

Uwaga

Usługa Language Understanding (LUIS) zostanie wycofana 1 października 2025 r. Od 1 kwietnia 2023 r. nie będzie można tworzyć nowych zasobów usługi LUIS. Nowsza wersja interpretacji języka jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure.

Język konwersacyjny (CLU), funkcja języka AI platformy Azure, to zaktualizowana wersja usługi LUIS. Aby uzyskać więcej informacji na temat obsługi języka w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.

W tym artykule opisano sposób reprezentowania elementów modelu językowego w formacie pliku lu. Aby uzyskać informacje na temat sposobu użycia interpretacji języka w botach, zobacz Language Understanding lub Natural Language Processing in Composer (Przetwarzanie języka naturalnego w narzędziu Composer).

Definiowanie intencji przy użyciu przykładowych wypowiedzi

Intencja reprezentuje zadanie lub akcję, którą użytkownik chce wykonać, zgodnie z wyrażeniem w wypowiedzi użytkownika. Do bota dodasz intencje, aby umożliwić mu identyfikowanie grup pytań lub poleceń reprezentujących ten sam zamiar użytkownika.

Niektóre przykłady intencji, które można zdefiniować dla bota podróży, z przykładowymi wypowiedziami zdefiniowanymi na podstawie następujących elementów:

Zamiar Przykładowe wypowiedzi
BookFlight "Zarezerwuj mi lot do Maui w przyszłym tygodniu"
"Fly me to Maui on the 17th"
"Potrzebuję biletu lotniczego w najbliższy piątek do Maui"
Powitanie "Cześć"
"Witaj"
"Dobre popołudnie"
CheckWeather (Sprawdzanie pogody) "Jaka jest pogoda jak w Maui w przyszłym tygodniu?"
None "Lubię pliki cookie"
"Bullfrogs zostały nagrane skoki ponad 7 stóp"

Oprócz zdefiniowanych intencji brak jest intencją rezerwową, która powodujeunknownIntent, że zdarzenie jest uruchamiane, gdy nie można określić intencji z wypowiedzi użytkowników. W przypadku korzystania z usługi LUIS intencja None jest wymaganą intencją, którą należy utworzyć z wypowiedziami, które znajdują się poza domeną. Wypowiedzi skojarzone z intencją None powinny składać się z około 10% całkowitej wypowiedzi w pliku .lu.

Intencje z ich przykładowymi wypowiedziami są deklarowane w następujący sposób:

# <intent-name>
    - <utterance1>
    - <utterance2>

# <intent-name> Opisuje nową sekcję definicji intencji. Każdy wiersz po definicji intencji to przykładowe wypowiedzi, które opisują tę intencję - <utterance> przy użyciu formatu.

Oto przykładowy plik lu demonstrujący te intencje i przykładowe wypowiedzi, które przechwytują sposoby wyrażania intencji przez użytkowników:

> Use ">" to create a comment in your .lu files.
> Use multiple comment ">" characters to define outlining
> sections in the file to help you organize the content.

>> Primary intents
# BookFlight
- Book me a flight to Maui next week
- Fly me to Maui on the 17th
- I need a plane ticket next Friday to Maui

# Greeting
- Hi
- Hello
- Good afternoon

>> Secondary intents
# CheckWeather
- What's the weather like in Maui next week?

Uwaga

-Użyj znaku , +lub * , aby oznaczyć listy. Listy numerowane nie są obsługiwane.

Użyj polecenia > , aby utworzyć komentarz.

Wiele znaków komentarza (">") może również służyć do definiowania sekcji konspektowania w pliku lu, aby ułatwić organizowanie zawartości. Program Composer umożliwia korzystanie z konspektowania podczas edytowania plików LU.

Aby uzyskać więcej informacji na temat intencji i wypowiedzi, zobacz Intents in your LUIS app (Intencje w aplikacji usługi LUIS) i Understand what good utterances for your LUIS app (Intencje w aplikacji luis) i Understand what good utterances for your LUIS app (Intencje w aplikacji usługi LUIS) i Understand what good utterances for your LUIS app in the LUIS documentation (Informacje o tym, jakie dobre wypowiedzi dotyczą twojej aplikacji usługi LUIS) w dokumentacji usługi LUIS.

Jednostki

Jednostka jest częścią wypowiedzi, którą można traktować jako parametr, który może być używany w interpretacji intencji. Na przykład w wypowiedzi Book a ticket to Maui, Maui jest jednostką FlightDestination.

Przykładowa wypowiedź użytkownika Przewidywana intencja Wyodrębnione jednostki Wyjaśnienie
Witaj jak się masz? Powitanie - Brak jednostek do wyodrębnienia.
"Zarezerwuj lot do Maui" BookFlight "Maui" Jednostka "FlightDestination" jest wyodrębniona jako "Maui".
"Jaka jest pogoda jak w Maui w przyszłym tygodniu?" CheckWeather (Sprawdzanie pogody) "Maui", "w przyszłym tygodniu" Jednostka "WeatherLocation" jest wyodrębniona jako jednostka "Maui", a jednostka "DateRange" jest wyodrębniona jako "w przyszłym tygodniu".
"Chcę zamówić małą pizzę" orderPizza "mały" Jednostka "Size" jest wyodrębniona jako "mała".
„Schedule a meeting at 1pm with Bob in Distribution” („Zaplanuj spotkanie o 13 z Bobem z działu dystrybucji”) ScheduleMeeting "1pm", "Bob" Jednostka "MeetingTime" jest wyodrębniona jako jednostka "1pm", a jednostka "Uczestnicy" jest wyodrębniona jako "Bob".

Napiwek

Aby uzyskać więcej informacji dotyczących używania jednostek w usłudze LUIS, zobacz Jednostki w usłudze LUIS w dokumentacji usługi LUIS .

Definicje jednostek

Definicja jednostki definiuje sposób rozpoznawania zakresu w wypowiedzi jako jednostki, której następnie można użyć w botze. Istnieje wiele różnych typów jednostek, w tym: uczenie maszynowe, wstępnie utworzone listy, wyrażenia regularne i wzorce.

Definicje jednostek w plikach lu rozpoczynają wpis za pomocą znaku (@), a następnie typu jednostki i nazwy jednostki:

@ <entity-type> <entity-name>

Opcjonalnie każda jednostka może również mieć role identyfikujące różne zastosowania tej samej jednostki. Możesz również dodać funkcje , aby ułatwić rozpoznawanie jednostek. Ogólna składnia wygląda następująco:

@ <entity-type> <entity-name> [[hasRole[s]] <comma-separated-list-of-roles>] [hasFeature[s] <comma-separated-list-of-features>]

Jednostki, które wymagają definicji, takiej jak jednostki list i wyrażenia regularnego, są reprezentowane przy użyciu następującej notacji:

@ <entity-type> <entity1-name> = <definition>

Dodatkowe przykłady deklaracji jednostek zostaną przedstawione w poniższych sekcjach wraz z typami jednostek, do których mają zastosowanie.

Z wyjątkiem wstępnie utworzonych jednostek nazwy jednostek mogą zawierać wiele wyrazów ze spacjami. Wszystkie nazwy jednostek ze spacjami muszą być opakowane w cudzysłowy:

@ ml "this is a simple entity" role1, role2 = definition
@ ml 'another simple entity' hasRole role1 hasFeatures feature1, feature2

Typy jednostek

Istnieje kilka typów jednostek w usłudze LUIS. W poniższych sekcjach dowiesz się więcej o tych typach jednostek i powiązanych pojęciach, takich jak role i funkcje, oraz przykłady tworzenia szablonów jednostki LU, które ich używają.

Jednostka nauczona maszynowo

Jednostki wyuczone maszynowo to jednostki , które umożliwiają podanie przykładów, w których można je oznaczyć w przykładowych wypowiedziach. Daje to im kontekst potrzebny do nauki. Jednostka nauczona maszynowo jest idealna podczas identyfikowania danych, które nie zawsze są dobrze sformatowane, ale mają takie samo znaczenie.

W poniższym przykładzie pokazano jednostkę nauczoną maszynowo o nazwie city (@ ml city) i intencję bookFlight z przykładowymi wypowiedziami z jednostkami oznaczonymi etykietą:

> Define the city machine-learned entity
@ ml city

> Define the bookFlight intent with sample utterances that contain the machine-learned entities
# bookFlight
- Book a flight from {@city = Cairo} to {@city = Seattle}
- Get me 2 tickets for a flight to {@city = Bengaluru}
- Purchase ticket from {@city = Washington} to {@city = Tampa Bay}

Kiedy użytkownik mówi coś podobnego do "Potrzebuję lotu zarezerwowanego z Londynu do madrytu", LUIS wykryje intencję "bookFlight" i wyodrębni zarówno Londyn, jak i Madryt jako jednostki miasta.

Role są zasadniczo dodatkową warstwą informacji kontekstowych, które można dodać do jednostek uczenia maszynowego, które również uczą się z kontekstu. W poniższej przykładowej wypowiedzi przedstawiono role odlotu i miejsca docelowego skojarzone z jednostką miasta:

- Book a flight from {@city:departure = Cairo} to {@city:destination = Seattle}

Jednostki nauczone maszynowo mogą być również złożone, gdy mają hierarchię jednostek powiązanych ze sobą. Możesz na przykład mieć jednostkę podobną pizzaOrder do jednostki, która ma następujące jednostki podrzędne: ilość, rozmiar, skorupa, toppingi itd.

Jednostkę podrzędną definiuje się, poprzedzając kreskę (-) znakiem at (@) i wcięciem, jak pokazano w poniższym przykładzie:

@ prebuilt number
@ list sizeList
@ list crustList
@ list toppingList

@ ml pizzaOrder
    - @ number Quantity
    - @ sizeList Size
    - @ crustList Crust
    - @ toppingList Topping

W powyższym przykładzie jednostka liczbowa jest wstępnie utworzoną jednostką. Pozostałe jednostki to wszystkie jednostki listy.

W następnym przykładzie przedstawiono definicję address jednostki nauczonej maszynowo z dwoma rolami oraz toAddress elementami fromAddress podrzędnymi.

@ list cityList
@ prebuilt number
@ prebuilt geographyV2
@ regex regexZipcode = /[0-9]{5}/
@ ml address hasRoles fromAddress, toAddress
@ address =
    - @ number 'door number'
    - @ ml streetName
    - @ ml location usesFeature geographyV2
        - @ cityList city
        - @ regexZipcode zipcode

Wstępnie skompilowane encje

Wstępnie utworzone jednostki usługi LUIS są definiowane przez system. Pozwala to zaoszczędzić pracę, ponieważ są one wysokiej jakości i zapewniają znormalizowane wartości, które są łatwiejsze do użycia w programach. Na przykład wyrażenie "jeden tysiąc i dwa" stanie się liczbą 1002. Obsługiwane są następujące typy usługi LUIS [wstępnie skompilowana jednostka][wstępnie utworzona jednostka]:

  • wiek
  • datetimeV2
  • wymiar
  • adres e-mail
  • geographyV2
  • Keyphrase
  • pieniędzy
  • numer
  • Porządkowych
  • porządkowyV2
  • percentage
  • personName
  • Phonenumber
  • temperature
  • Adres URL
  • Data i godzina

Oto przykłady sposobu definiowania wstępnie utworzonych jednostek:

@ prebuilt number 
@ prebuilt datetimeV2
@ prebuilt age

Jednostka listy

[Wyświetl jednostki] [list-entity] reprezentują stały, zamknięty zestaw powiązanych wyrazów wraz z ich synonimami. Znormalizowana wartość jest zwracana po rozpoznaniu dowolnego z odpowiednich synonimów. Są uwzględniane wielkość liter i wyodrębniane na podstawie dokładnego dopasowania tekstu.

W poniższym przykładzie przedstawiono składnię definiującą jednostkę listy:

@ list <entityName>  =
    - <normalized-value> :
        - <synonym1>
        - <synonym2>
        - ...
    - <normalized-value> :
        - <synonym1>, <synonym2>, ...

Rozszerzenie przykładu z pizzaOrder sekcji jednostki wyuczonej maszynowo znajduje się w przykładzie list dla jednostek podrzędnych o rozmiarze i crust:

@ list sizeList = 
    - Extra Large :
        - extra large
        - XL
        - xl
        - huge
        - massive
    - Large:
        - large
        - big
    - Medium :
        - medium
        - regular
    - Small :
        - small
        - smallest
        - individual

@ list crustList = 
    - Stuffed Crust :
        - stuffed crust
        - stufffed crust
    - Thin :
        - thin
        - thin crust
    - Thick :
        - thick
        - thick crust
        - Deep Dish
        - deep dish

Napiwek

Ponieważ jednostka listy wymaga dokładnego dopasowania do wyodrębnienia, wyniki mogą się poprawić, dodając typowe błędy pisowni. Jedną z typowych przyczyn błędu pisowni jest błędy wpisywania, takie jak podwójne litery potrojone, jak w "skorupie nadziewanej" w powyższym przykładzie.

W przypadku używania jednostek listy należy dołączyć wartość z listy bezpośrednio w wypowiedzi, ale nie musisz oznaczać etykietami jednostek listy, chociaż nadal można ich używać jako posiadaczy miejsc we wzorcu. Poniższy przykład przedstawia wypowiedź z wartościami z listy:

- I'd like to order a large pepperoni stuffed crust pizza.

Jednostka wyrażenia regularnego

Jednostka [wyrażenia regularnego][jednostka-wyrażenia-regularnego] wyodrębnia jednostkę na podstawie podanego wzorca znaku wyrażenia regularnego. Wyrażenia regularne najlepiej nadają się do tekstu strukturalnego lub wstępnie zdefiniowanej sekwencji wartości alfanumerycznych, które są oczekiwane w określonym formacie. Przykład:

Encja Regular expression Przykład
Numer lotu lot [A-Z]{2} [0-9]{4} lot AS 1234
Numer karty kredytowej [0-9]{16} 5478789865437632

Oto przykład definicji jednostek wyrażenia regularnego:

> Flight Number regular expression entity definition
@ regex flightNumber = /flight [A-Z]{2} [0-9]{4}/

> Credit Card Number regular expression entity definition
@ regex creditCardNumber = /[0-9]{16}/

Role

Rola jest nazwanym aliasem dla jednostki na podstawie kontekstu w wypowiedzi. Rolę można używać z dowolnym wstępnie utworzonym lub niestandardowym typem jednostki i są używane zarówno w przykładowych wypowiedziach, jak i wzorcach.

W poniższym przykładzie jednostka Location ma dwie role i origindestination:

Encja Rola Przeznaczenie
Lokalizacja połączenie pierwotne Gdzie samolot odchodzi z
Lokalizacja miejsce docelowe Gdzie ląduje samolot

Role w formacie pliku lu mogą być jawnie lub niejawnie zdefiniowane. Definicja roli jawnej jest zgodna z notacją:

@ <entityType> <entityName> [hasRole[s]] role1, role2, ...

Poniżej przedstawiono różne sposoby jawnego definiowania jednostek i ich ról:

> # ml entity definition with roles
> the following are 4 different approaches to define roles:

@ ml name role1, role2

@ ml name hasRoles role1, role2

@ ml name
@ name hasRoles role1, role2

@ ml name
@ name hasRole role1
@ name hasRole role2

Role można również definiować niejawnie bezpośrednio we wzorcach i oznaczonych etykietami wypowiedzi przy użyciu następującego formatu:

{@<entityName>:<roleName>}

W poniższym przykładzie pokazano, jak role userName:firstName i userName:lastName są niejawnie zdefiniowane:

# getUserName
- My first name is {@userName:firstName=vishwac}
- My full name is {@userName:firstName=vishwac} {@userName:lastName=kannan}
- Hello, I'm {@userName:firstName=vishwac}
- {@userName=vishwac} is my name

@ ml userName

W wzorcach można używać ról przy użyciu {<entityName>:<roleName>} notacji. Oto przykład:

# getUserName
- call me {name:userName}
- I'm {name:userName}
- my name is {name:userName}

Można również zdefiniować wiele ról dla jednostki we wzorcach, jak pokazano poniżej:

> Roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below

# BookFlight
- book flight from {city:fromCity} to {city:toCity}
- [can you] get me a flight from {city:fromCity} to {city:toCity}
- get me a flight to {city:toCity}
- I need to fly from {city:fromCity}

$city:Seattle=
- Seattle
- Tacoma
- SeaTac
- SEA

$city:Portland=
- Portland
- PDX

Wzorce

[Wzorce] [] umożliwia pokrycie dużej liczby przykładów, które należy dopasować, tworząc wypowiedź z posiadaczami miejsc, w których należy znaleźć jednostki. Wzorce są wyrażeniem regularnym na poziomie tokenu z symbolami zastępczymi dla jednostek. Jeśli wypowiedź ma jakiekolwiek posiadacze miejsc jednostki lub składnię wzorca, jest interpretowana jako wzorzec. W przeciwnym razie jest interpretowana jako wypowiedź na potrzeby trenowania uczenia maszynowego.

Posiadacze miejsc jednostki mogą odpowiadać jednostkom dowolnego typu lub mogą być definiowane przez sam wzorzec, na przykład gdy sekcja w wzorcu jest jednostką zidentyfikowaną przez przyjrzenie się otaczającym wyrazom.

Składnia wzorca

Format pliku .lu obsługuje usługę LUIS [składnia wzorca][]. Składnia wzorca to szablon osadzony w wypowiedzi. Szablon powinien zawierać zarówno wyrazy, jak i jednostki, które chcesz dopasować, a także wyrazy i znaki interpunkcyjne, które chcesz zignorować. Szablon nie jest wyrażeniem regularnym.

Jednostki we wzorcach są otoczone nawiasami klamrowymi, {}. Wzorce mogą zawierać jednostki i jednostki z rolami. [Pattern.any] [pattern-any] jest jednostką używaną tylko we wzorcach.

Function Składnia Poziom zagnieżdżania Przykład
podmiot {} -Nawiasy klamrowe 2 Where is form {entity-name}?
optional [] — nawiasy kwadratowe
Istnieją limit 3 dla poziomów zagnieżdżania dowolnej kombinacji opcjonalnej i grupowania
2 The question mark is optional [?]
grouping () — nawiasy 2 is (a \| b)
lub | - pionowy słupek (rura)
Limit 2 na pionowych słupkach (lub) w jednej grupie
- Where is form ({form-name-short} \| {form-name-long} \| {form-number})
początek i/lub koniec wypowiedzi ^-Daszek - ^begin the utterance
the utterance is done^
^strict literal match of entire utterance with {number} entity^

Aby uzyskać więcej informacji, zobacz artykuł [Składnia wzorca][] w dokumentacji usługi LUIS.

W poniższym przykładzie przedstawiono definicję, która będzie traktowana jako wzorzec z jednostką zdefiniowaną alarmTime przez wzorzec:

# DeleteAlarm
- delete the {alarmTime} alarm

Wypowiedź "usuń alarm 7:00" będzie zgodna ze wzorcem alarmTime i rozpozna jednostkę "7 rano".

Z kolei poniższy przykład to wypowiedź oznaczona etykietą, w której alarmTime jest jednostką nauczoną maszynowo, ponieważ ma etykietę 7:00:

# DeleteAlarm
- delete the {alarmTime=7AM} alarm

Nie można mieszać etykiet jednostek i posiadaczy miejsc jednostek w tej samej wypowiedzi, ale można użyć posiadaczy miejsc odpowiadających jednostkom nauczonym maszynowo.

Napiwek

Przed dodaniem wzorców należy zrozumieć, jak bot reaguje na dane wejściowe użytkownika, ponieważ wzorce są ważone częściej niż przykładowe wypowiedzi i będą wypaczać pewność siebie. Nie ma żadnych szkód w dodawaniu ich na początku projektu modelu, ale łatwiej jest zobaczyć, jak każdy wzorzec zmienia model po przetestowaniu modelu przy użyciu wypowiedzi.

Lista fraz

[lista fraz][lista fraz] to lista wyrazów lub fraz, które ułatwiają znalezienie koncepcji, którą próbujesz zidentyfikować. Lista nie uwzględnia wielkości liter. Listy fraz mają dwa różne cele:

  • Rozszerz słownik: jest to wartość domyślna podczas definiowania listy fraz i jest znana jako niezamienna. Frazy wielosygowe stają się funkcją uczenia maszynowego, która wymaga mniejszej liczby przykładów do nauki. W tym użyciu nie ma relacji między członkami listy faz.
  • Zdefiniuj synonimy: Listy fraz zamiennych są używane do definiowania synonimów, które oznaczają to samo. To użycie pomaga uogólnić przy mniejszej liczbie przykładów. Każda fraza na liście powoduje wyświetlenie tej samej funkcji w uczeniu maszynowym. Aby użyć tej funkcji, należy określić interchangeable w definicji listy fraz (@ phraselist <Name>(interchangeable))

Uwaga

Funkcja może być listą fraz lub jednostką, którą skojarzysz z intencją lub jednostką, aby podkreślić znaczenie tej funkcji w dokładnym wykrywaniu intencji użytkownika. Aby uzyskać więcej informacji, zobacz Dodawanie listy fraz jako funkcji .

Aby uzyskać dodatkowe informacje o tym, kiedy i jak używać list fraz, w tym typowych scenariuszy, dla których są używane, zobacz [Create a phrase list for a concept][phrase-list].

Listy fraz definiuje się przy użyciu następującej notacji:

@ phraselist <Name>
    - <phrase1>
    - <phrase2>

Oto przykład listy fraz używanych do rozszerzania słownika:

@ phraseList newTerms=
- surf the sky
- jump on the beam
- blue sky pajamas

Listy fraz mogą również służyć do definiowania synonimów przez oznaczenie ich jako wymiennych.

@ phraseList Want(interchangeable) =
    - require, need, desire, know

> You can also break up the phrase list values into a bulleted list
@ phraseList Want(interchangeable) =
    - require
    - need
    - desire
    - know

Domyślnie listy fraz są dostępne dla wszystkich poznanych intencji i jednostek. Istnieją trzy stany dostępności:

Stan dostępności opis
enabledForAllModels (ustawienie domyślne) Gdy lista fraz jest oznaczona jako enabledForAllModels, jest dostępna dla wszystkich modeli, bez względu na to, czy została ona wymieniona jako funkcja.
disabledForAllModels Gdy lista fraz jest oznaczona jako disabledForAllModels, jest używana tylko w modelu, jeśli jest ona wymieniona jako funkcja.
wyłączone Gdy lista fraz jest oznaczona jako disabled, nie jest używana w żadnym miejscu, w tym w przypadku modeli, w których jest ona wymieniona jako funkcja. Dzięki temu można łatwo wyłączyć listę fraz, aby zobaczyć, jak dobrze działają elementy bez niego.

Listy fraz są domyślnie dostępne globalnie i można je również ustawić przy użyciu słowa kluczowego enabledForAllModels :

@ phraselist abc enabledForAllModels

Dwa przykłady ustawiania listy fraz na disabledForAllModels:

@ phraselist abc disabledForAllModels

> You can also use this approach
@ phraselist question(interchangeable) =
    - are you
    - you are

@ question disabledForAllModels

Podczas ustawiania listy fraz na disabled, nie będzie ona używana nawet wtedy, gdy jest wyświetlana jako funkcja:

> phrase list definition, temporarily set to disabled to measure its impact

@ phraselist yourPhraseList disabled

> phrase list as feature to intent, won't be used

@ intent yourIntent usesFeature yourPhraseList

Listy fraz mogą być używane jako funkcje dla określonych intencji i jednostek zgodnie z opisem w następnej sekcji.

Dodawanie funkcji do intencji i jednostek

Uczenie maszynowe działa dzięki użyciu funkcji i uczenia się, jak odnoszą się do żądanej intencji lub jednostki z przykładowych wypowiedzi. Domyślnie funkcje to po prostu słowa, które składają się na wypowiedzi. Listy fraz zapewniają środki do grupowania wielu wyrazów w nową funkcję; dzięki temu uczenie maszynowe uogólnia się lepiej z mniejszej liczby przykładów. Domyślnie listy fraz są globalne i mają zastosowanie do wszystkich modeli uczenia maszynowego, ale można je również powiązać z określonymi intencjami lub jednostkami. Można również użyć intencji lub jednostek jako funkcji do wykrywania innych intencji jako jednostek. Zapewnia to modułowość, dzięki czemu można tworzyć bardziej złożone koncepcje z prostszych bloków konstrukcyjnych.

Uwaga

W uczeniu maszynowym funkcja to tekst opisujący cechę wyróżniającą lub atrybut danych, które system obserwuje i uczy się na ich podstawie. Listy fraz, intencje i jednostki mogą być używane jako funkcje, jak wyjaśniono w tym i w poniższych sekcjach.

Funkcje można dodawać do dowolnej poznanej intencji lub jednostki przy użyciu słowa kluczowego usesFeature .

Dodawanie listy fraz jako funkcji

Listy fraz można dodawać jako funkcję do intencji lub jednostek. Pomaga to tym konkretnym intencjom lub jednostkam bez wpływu na inne intencje i jednostki. Oto przykład sposobu definiowania listy fraz jako funkcji do innego modelu:

> phrase list definition

@ phraseList PLCity(interchangeable) =
    - seattle
    - space needle
    - SEATAC
    - SEA

> phrase list as feature to intent 

@ intent getUserProfileIntent usesFeature PLCity

> phrase list as a feature to an ml entity

@ ml myCity usesFeature PLCity

@ regex regexZipcode = /[0-9]{5}/

> a phrase list is used as a feature in a hierarchal entity

@ ml address fromAddress, toAddress
@ address =
    - @ number 'door number'
    - @ ml streetName
    - @ ml location
        - @ ml city usesFeature PLCity
        - @ regexZipcode zipcode

Dodawanie jednostki lub intencji jako funkcji

Poniżej przedstawiono przykłady dodawania intencji i jednostek jako funkcji za pomocą usesFeaturepolecenia :

> entity definition - @ <entityType> <entityName> [<roles>]

@ prebuilt personName
@ prebuilt age

> entity definition with roles

@ ml userName hasRoles fistName, lastName

> add an entity as a feature to another entity

@ userName usesFeature personName

> add an entity as feature to an intent

@ intent getUserNameIntent usesFeature personName

> Intent definition

# getUserNameIntent
- utterances

> multiple entities as a feature to a model

@ intent getUserNameIntent usesFeature age, personName

> intent as a feature to another intent

@ intent getUserProfileIntent usesFeature getUserNameIntent

# getUserProfileIntent
- utterances

Metadane

Metadane związane z aplikacją usługi LUIS lub usługą QnA Maker można uwzględnić baza wiedzy w pliku lu. Pomoże to skierować analizator do prawidłowej obsługi zawartości LU. Metadane są zwykle dodawane na początku pliku lu.

Poniżej przedstawiono sposób definiowania informacji o konfiguracji przy użyciu programu > !#:

> !# @<property> = <value>
> !# @<scope>.<property> = <value>
> !# @<scope>.<property> = <semicolon-delimited-key-value-pairs>

Należy pamiętać, że wszystkie informacje jawnie przekazane za pośrednictwem argumentów interfejsu wiersza polecenia zastąpią informacje w pliku lu.

> LUIS application information
> !# @app.name = my luis application
> !# @app.desc = description of my luis application
> !# @app.versionId = 1.0
> !# @app.culture = en-us
> !# @app.luis_schema_version = 7.0.0
> !# @app.settings.NormalizePunctuation = true
> !# @app.settings.NormalizeWordForm = true
> !# @app.settings.UseAllTrainingData = true
> !# @app.tokenizerVersion = 1.0.0

Poniższa tabela zawiera opis wartości metadanych aplikacji używanych w powyższym przykładzie. Aby uzyskać informacje o ustawieniach app.settings w usłudze LUIS, zobacz [Ustawienia aplikacji i wersji][luis-metadata] w dokumentacji usługi LUIS.

Metadane opis
Nazwa/nazwisko Nazwa aplikacji
Identyfikator wersji Nazwa tej konkretnej wersji
Kultura Język używany przez aplikację
Wersja schematu Schemat usługi LUIS jest aktualizowany za każdym razem, gdy nowa funkcja lub ustawienie zostanie dodane w usłudze LUIS. Użyj numeru wersji schematu użytego podczas tworzenia lub aktualizowania modelu usługi LUIS.

Odwołania zewnętrzne

W poniższych sekcjach szczegółowo opisano sposób tworzenia odwołań do lokalnego pliku i identyfikatora URI .

Odwołania do plików lokalnych

Uwaga

Usługa Azure AI QnA Maker zostanie wycofana 31 marca 2025 r. Od 1 października 2022 r. nie będzie można tworzyć nowych zasobów ani baz wiedzy w programie QnA Maker. Nowsza wersja funkcji pytań i odpowiedzi jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure.

Niestandardowe odpowiadanie na pytania, funkcja języka azure AI, to zaktualizowana wersja usługi QnA Maker. Aby uzyskać więcej informacji na temat obsługi pytań i odpowiedzi w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.

Odwołuje się do pliku lu. Postępuj zgodnie ze składnią linku Markdown. Obsługiwane odwołania obejmują:

  • Odwołanie do innego pliku lu za pomocą polecenia [link name](<.lu file name>). Odwołanie może być ścieżką bezwzględną lub ścieżką względną z pliku zawierającego plik lu.
  • Odwołanie do folderu z innymi plikami lu jest obsługiwane za pośrednictwem:
    • [link name](<.lu file path>*): wyszukuje pliki lu w określonej ścieżce bezwzględnej lub względnej
    • [link name](<.lu file path>**): rekursywnie wyszukuje pliki lu w określonej ścieżce bezwzględnej lub względnej, w tym podfoldery.
  • Można również dodawać odwołania do wypowiedzi zdefiniowanych w określonym pliku w sekcji intencji lub jako pary pytań i odpowiedzi.
    • [link name](<.lu file path>#<INTENT-NAME>): znajduje wszystkie wypowiedzi w obszarze <INTENT-NAME> w pliku lu i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.lu file path>#<INTENT-NAME>*utterances*): znajduje wszystkie wypowiedzi (nie wzorce) w obszarze <INTENT-NAME> w pliku lu i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.lu file path>#<INTENT-NAME>*patterns*): znajduje wszystkie wzorce (nie wypowiedzi) w obszarze <INTENT-NAME> w pliku lu i dodaje je do listy wzorców, w których określono odwołanie.
    • [link name](<.lu file path>#*utterances*): znajduje wszystkie wypowiedzi w pliku .lu i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.lu file path>#*patterns*): znajduje wszystkie wzorce w pliku lu i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.lu file path>#*utterancesAndPatterns*): znajduje wszystkie wypowiedzi i wzorce w pliku .lu i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.qna file path>#$name?): znajduje wszystkie zmiany z określonej definicji zmian w zawartości qna i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.qna file path>#*alterations*?): znajduje wszystkie zmiany z zawartości qna i dodaje je do listy wypowiedzi, w których określono odwołanie.
    • [link name](<.qna file path>#?question-to-find?): znajduje wszystkie pytania odmiany z konkretnego pytania i dodaje je do listy wypowiedzi, w których określono odwołanie. Należy pamiętać, że wszelkie spacje w pytaniu muszą zostać zastąpione znakiem - .
    • [link name](<.qna file path>#*answers*?): znajduje wszystkie odpowiedzi i dodaje je do listy wypowiedzi, w których określono odwołanie.

Oto przykład wyżej wymienionych odwołań:

> You can include references to other .lu files

[All LU files](./all.lu)

> References to other files can have wildcards in them

[en-us](./en-us/*)

> References to other lu files can include subfolders as well.
> /** indicates to the parser to recursively look for .lu files in all subfolders as well.

[all LU files](../**)

> You can include deep references to intents defined in a .lu file in utterances

# None
- [None uttearnces](./all.lu#Help)

> With the above statement, the parser will parse all.lu and extract out all utterances associated with the 'Help' intent and add them under 'None' intent as defined in this file.

> NOTE: This **only** works for utterances as entities that are referenced by the uttearnces in the 'Help' intent won't be brought forward to this .lu file.

# All utterances
> you can use the *utterances* wild card to include all utterances from a lu file. This includes utterances across all intents defined in that .lu file.
- [all.lu](./all.lu#*utterances*)
> you can use the *patterns* wild card to include all patterns from a lu file.
> - [all.lu](./all.lu#*patterns*)
> you can use the *utterancesAndPatterns* wild card to include all utterances and patterns from a lu file.
> - [all.lu](./all.lu#*utterancesAndPatterns*)

> You can include wild cards with deep references to QnA maker questions defined in a .qna file in utterances

# None
- [QnA questions](./*#?)

> With the above statement, the parser will parse **all** .lu files under ./, extract out all questions from QnA pairs in those files and add them under 'None' intent as defined in this file.

> You can include deep references to QnA maker questions defined in a .qna file in utterances

# None
- [QnA questions](./qna1.qna#?)

> With the above statement, the parser will parse qna1.lu and extract out all questions from QnA pairs in that file and add them under 'None' intent as defined in this file.

Odwołania do identyfikatora URI

Poniżej przedstawiono przykłady tworzenia odwołań do identyfikatora URI:

> URI to LU resource
[import](http://.../foo.lu)

# intent1
> Ability to pull in specific utterances from an intent
- [import](http://.../foo.lu#None)

# intent2
> Ability to pull in utterances or patterns or both from a specific intent 'None'
- [import](http://..../foo.lu#None*utterances*)
- [import](http://..../bar.lu#None*patterns*)
- [import](http://..../taz.lu#None*utterancesandpatterns*)

# intent3
> Ability to pull in all utterances or patterns or both across all intents
- [import](http://..../foo.lu#*utterances*)
- [import](http://..../bar.lu#*patterns*)
- [import](http://..../taz.lu#*utterancesandpatterns*)

Dodatkowe informacje

  • Przeczytaj format pliku qna, aby uzyskać więcej informacji na temat plików qna.