模式语法

重要

LUIS 将于 2025 年 10 月 1 日停用,从 2023 年 4 月 1 日开始,你将无法创建新的 LUIS 资源。 我们建议迁移 LUIS 应用程序对话语言理解,以便获得持续的产品支持和多语言功能并从中受益。

模式语法是一个话语模板。 该模板应包含要匹配的字词和实体,还要包含希望忽略的字词和标点。 它不是一个正则表达式 。

注意

模式仅包括机器学习实体父项,而不包括子实体。 模式中的实体用花括号 {} 括起。 模式可包含实体和带角色的实体。 Pattern.any 是仅在模式中使用的实体。

模式语法支持以下语法:

函数 语法 嵌套级别 示例
实体 {} - 大括号 2 窗体 {entity-name} 在哪里?
可选 [] - 方括号

可选和分组的任何组合的嵌套级别都限制为 3
2 问号是可选的 [?]
分组 () - 括号 2 是 (a | b)
| - 竖线(管道)

一个组中的竖线限制为 2
- Where is form ({form-name-short} | {form-name-long} | {form-number})
话语的开头和/或结尾 ^ - 脱字号 - ^开始话语
话语完成^
^将整句话语与 {number} 实体进行严格的文本匹配^

模式中的嵌套语法

带有方括号的可选语法可以嵌套两个级别。 例如:[[this]is] a new form。 此示例允许以下话语:

嵌套的可选话语示例 说明
这是一个新窗体 匹配模式中的所有字词
是一个新窗体 匹配模式中的外层可选字词和非可选字词
一个新窗体 仅匹配必需的字词

带括号的分组语法可以嵌套两层。 例如:(({Entity1:RoleName1} | {Entity1:RoleName2} ) | {Entity2} )。 此功能允许匹配任意三个实体。

如果 Entity1 是具有起点(西雅图)和终点(开罗)等角色的位置,并且 Entity 2 是列表实体中的一座已知大楼名称 (RedWest-C),则以下话语将映射到此模式:

嵌套的分组话语示例 说明
RedWest-C 匹配外层分组实体
Seattle 匹配内层分组实体之一
开罗 匹配内层分组实体之一

带有可选语法的组的嵌套限制

分组可选语法组合的嵌套级别限制为 3。

允许 示例
( [ ( test1 | test2 ) ] | test3 )
( [ ( [ test1 ] | test2 ) ] | test3 )

带有 or-ing 语法的组的嵌套限制

分组or-ing 语法组合的竖线限制为 2。

允许 示例
( test1 | test2 | ( test3 | test4 ) )
( test1 | test2 | test3 | ( test4 | test5 ) )

用于向模式模板添加实体的语法

要向模式模板添加实体,需用花括号将实体名称括起,比如 Who does {Employee} manage?

模式与实体
Who does {Employee} manage?

用于向模式模板添加实体和角色的语法

实体角色表示为 {entity:role}其中实体名称后接一个冒号,再接角色名称。 要向模式模板添加带角色的实体,需用花括号将实体名称和角色名称括起,比如 Book a ticket from {Location:Origin} to {Location:Destination}

模式与实体角色
Book a ticket from {Location:Origin} to {Location:Destination}

用于向模式模板添加 pattern.any 的语法

Pattern.any 实体可用于向模式添加不同长度的实体。 只要按照模式模板操作,pattern.any 即可为任意长度。

要向模式模板添加 Pattern.any 实体,需用花括号将 Pattern.any 实体括起,比如 How much does {Booktitle} cost and what format is it available in?

模式与 Pattern.any 实体
How much does {Booktitle} cost and what format is it available in?
模式中的书名
《偷书》的价格是多少?它适合哪种格式 ?
《询问》的价格是多少?它适合哪种格式 ?
《深夜小狗神秘事件》的价格是多少?它适合哪种格式 ?

对于 LUIS 而言,书名的字词不容易混淆,因为 LUIS 可以根据 Pattern.any 实体知道书名在哪里结尾。

显式列表

在以下情况下请通过创作 API 创建一个显式列表来允许例外:

  • 你的模式包含 Pattern.any
  • 并且该模式语法可能会基于话语提取不正确的实体。

例如,假设你的模式中包含可选语法 [] 和实体语法 {},两个语法的组合方式导致数据提取错误。

请考虑使用模式“[find] email about {subject} [from {person}]”。

在下面的话语中,主题和人员实体一个提取正确,一个提取错误 :

话语 实体 提取是否正确
email about dogs from Chris subject=dogs
person=Chris
email about the man from La Mancha subject=the man
person=La Mancha
X

在上表中,主题应当是 the man from La Mancha(书名),但因为主题包含可选字词 from,因此书名没有正确预测。

要避免模式出现此异常,需使用显式列表的创作 API 添加 the man from la mancha 作为 {subject} 实体的显式列表匹配。

用于在模板话语中标记可选文本的语法

使用正则表达式方括号语法 [] 标出话语中的可选文本。 最多能对两个括号使用方括号嵌套可选文本。

模式与可选的文本 含义
[find] email about {subject} [from {person}] findfrom {person} 是可选的
`你可以帮我吗[?] 问号是可选的

标点符号(?!.)应当忽略,并且你需要在模式中使用方括号语法来忽略它们。

后续步骤

详细了解模式:

了解如何在 .json 响应中返回情绪