生成可分解的 LUIS 应用程序

重要

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

在本教程中,你能够创建可预测用户不同意向的电信 LUIS 应用程序。 在本教程结束时,我们会拥有一个电信应用程序,它可以根据用户提供的文本预测用户意向。

我们会处理不同的用户方案(意向),例如:

  • 注册新的电信线路
  • 更新现有层
  • 支付帐单

在本教程中,将了解如何:

  1. 创建 LUIS 应用程序
  2. 创建意向
  3. 添加实体
  4. 添加表达
  5. 标签示例言语
  6. 训练应用
  7. 发布应用
  8. 从已发布的终结点获取预测

创建 LUIS 应用程序

  1. 登录到 LUIS 门户

  2. 通过选择“+ 新建应用”创建新的应用程序。

    A screenshot of the application creation screen.

  3. 在出现的窗口中,输入名称“电信教程”,保留默认区域性“英语”。 其他字段是可选的,请勿设置。 选择“完成” 。

    A screenshot of the LUIS application's creation fields.

将用户意向用作意向

在“生成”部分中会首先看到应用的意向。 意向表示用户要执行的任务或操作。

假设有一个电信 LUIS 应用程序,用户需要什么?

他们可能需要执行某种类型的用户操作或寻求帮助。 其他用户可能想要更新层或支付帐单

生成的架构如下所示。 有关详细信息,请参阅有关架构规划的最佳做法

意向 用途
UserActions 确定用户操作
帮助 请求帮助
UpdateTier 更新当前层
PayBill 支付未付帐单
确定用户是否正在询问 LUIS 应用不应回答的问题。 此意向如果作为应用创建的一部分提供,则无法删除。

创建新意向

意向用于根据用户的意图(根据自然语言文本确定)对用户言语进行分类。

若要对语句进行分类,意向需要使用应根据该意向分类的用户语句的示例。

  1. 从顶部导航菜单中选择“生成”,然后选择屏幕左侧的“意向”。 选择“+ 创建”以创建新意向。 输入新意向名称“UserAction”,然后选择“完成”。

    UserAction 可以是多种意向之一。 例如,某些用户可能想要注册新线路,而其他用户可能要求检索信息。

  2. 将多个示例话语添加到你预期用户会请求的此意向:

    • 好! 我想注册新线路
    • 是否可以注册新线路?
    • 你好,我需要新线路
    • 我忘记了我的线路编号!
    • 我需要新的线路编号

    A screenshot showing example utterances for the UserAction intent.

对于 PayBill 意向,语句可以是:

  • 我想支付我的账单
  • 结算我的帐单
  • 支付帐单
  • 我想结清当前余额
  • 喂! 我想支付当前帐单

可通过提供示例话语来训练 LUIS,让其了解应该根据哪些类型的话语预测出此意向。 以下是几个正面示例。 其他所有意向中的言语均被视为该意向的负面示例。 理想情况下,添加的示例语句越多,应用的预测准确率就越高。

这些话语仅用于演示。 实际应用应该至少有 15-30 个言语,这些言语的长度、单词顺序、时态、语法正确性、标点和单词计数各不相同。

创建其余意向

执行上述步骤,将以下意向添加到应用:

“帮助”

  • “我需要帮助”
  • “我需要帮助”
  • “请提供帮助”
  • “能为我提供支持吗?”
  • “我被困住了,你能帮助我吗”
  • “我能得到帮助吗?”

“UpdateTier”

  • “我想更新我的层”
  • “更新我的层”
  • “我想更改为 VIP 层”
  • “将我的订阅更改为标准层”

None 意向的示例语句

客户端应用程序需要知道某个话语是否对应用程序没有意义或不合适。 在创建过程中,“None”意向会添加到每个应用程序,以确定客户端应用程序是否不应回答某个语句。

如果 LUIS 针对某个语句返回“None”意向,客户端应用程序可以询问用户是否要结束聊天或提供更多指示以继续聊天。

如果将“None”意向留空,则将在现有主题域意向之一中预测应在主题域之外预测的语句。 因此,客户端应用程序(如聊天机器人)将基于错误的预测执行错误的操作。

  1. 在左侧面板中选择“意向”。

  2. 选择“None”意向。 添加用户可能会输入的、但与电信应用无关的 3 条语句。 这些示例不应使用预期在主题域中出现的字词,例如“层”、“升级”、“注册”、“账单”。

    • “我的航班是什么时候?”
    • “我需要更改我的比萨饼订单”
    • “今天的天气怎么样?”

添加实体

实体是与用户意向相关的项目或元素。 实体定义可以从言语中提取的数据,对于完成用户的必需操作至关重要。

  1. 在生成部分中,选择“实体”。

  2. 若要添加新实体,请选择“+ 创建”

    在此示例中,我们将创建两个实体,机器学习实体类型的“UpdateTierInfo”和列表实体类型的“层”。 Luis 还允许创建不同的实体类型

  3. 在出现的窗口中,输入“UpdateTierInfo”,并从可用类型中选择“机器学习”。 选中“添加结构”框,以便能够将结构添加到此实体。

    A screenshot showing an entity.

  4. 选择下一步

  5. 若要添加子实体,请选择“+”符号并开始添加子级。 对于实体示例“UpdateTierInfo”,需要以下三个子实体:

    • OriginalTier
    • NewTier
    • PhoneNumber

    A screenshot of subentities in the app.

  6. 添加所有子实体后,选择“创建”。

    创建另一个名为“层”的实体,但它是一个列表实体,将包含可能提供的所有层:标准层、高级层和 VIP 层。

  7. 为此,转到实体选项卡,按“+ 创建”,然后在出现的屏幕中,从类型中选择“列表”。

  8. 将项添加到列表中,还可以选择添加同义词,确保系统能理解提到的所有字词。

    A screenshot of a list entity.

  9. 现在,返回到“UpdateTierInfo”实体,并添加“层”实体作为前面创建的“OriginalTier”和“newTier”实体的特性。 结果应如下所示:

    A screenshot of an entity's features.

    已将层添加为“originalTier”和“newTier”的特性,添加了正则表达式类型的“Phonenumber”实体。 可以采用与创建 ML 和列表实体相同的方式来创建它。

现在已成功创建意向,添加了示例语句以及实体。 创建了四个意向(除“None”意向以外)和三个实体。

标签示例言语

创建了机器学习实体,且子实体具有特性。 为完成对提取的改进,需要使用子实体标记示例言语。

可以通过两种方式来标记语句:

  1. 使用标记工具

    1. 打开“实体调色板”,并在上下文工具栏中选择“@”符号。
    2. 选择调色板中的每个实体行,然后使用调色板光标选择每个示例言语中的实体。
  2. 拖动光标来突出显示文本。 使用光标突出显示要标记的文本。 下图中突出显示了“vip - tier”,并选择“NewTier”实体。

    A screenshot showing how to label utterances.

训练应用

在 LUIS 网站的右上方,选择“训练”按钮。

训练前,请确保每个意向至少有一个语句。

A screenshot showing the but for training an app.

发布应用

若要在聊天机器人或其他客户端应用程序中接收 LUIS 预测,需要将应用发布到预测终结点。 若要进行发布,需要先训练应用程序。

  1. 在右上方的导航栏中选择“发布”。

    A screenshot showing the button for publishing an app.

  2. 选择“生产”槽,然后选择“完成” 。

    A screenshot showing the production slot selector.

  3. 在通知中选择“访问终结点 URL”,以转到“Azure 资源”页 。 只有你拥有与应用关联的预测资源时,才能看到 URL。 还可以单击屏幕左侧的“管理”来找到“Azure 资源”页。

    A screenshot showing the endpoint access notification.

获取意向预测

  1. 在右上角菜单中选择“管理”,然后在左侧选择“Azure 资源”。

  2. 复制“示例查询”URL 并将其粘贴到新的 Web 浏览器选项卡中。

    终结点 URL 将采用以下格式。

    https://YOUR-CUSTOM-SUBDOMAIN.api.cognitive.azure.cn/luis/prediction/v3.0/apps/YOUR-APP-ID/slots/production/predict?subscription-key=YOUR-KEY-ID&verbose=true&show-all-intents=true&log=true&query=YOUR\_QUERY\_HERE
    
  3. 转到地址栏中 URL 的末尾,将 query= 字符串参数替换为:

    “Hello! I am looking for a new number please.”

    URI 中会传递此语句查询。 此语句不同于任何示例语句,它非常适合测试以检查 LUIS 是否将 UserAction 意向预测为评分最高的意向。

    {
        "query": "hello! i am looking for a new number please",
        "prediction": 
        {
            "topIntent": "UserAction",
            "intents": 
            {
                "UserAction": {
                "score": 0.8607431},
                "Help":{
                "score": 0.031376917},
                "PayBill": {
                "score": 0.01989629},
                "None": {
                "score": 0.013738701},
                "UpdateTier": {
                "score": 0.012313577}
            },
        "entities": {}
        }
    }
    

JSON 结果中将评分最高的意向标识为 prediction.topIntent 属性。 所有评分介于 1 和 0 之间,评分越接近 1 越好。

客户端应用程序后续步骤

本教程创建了 LUIS 应用、创建了意向、实体、向每个意向添加了示例语句、向 None 意向添加了示例语句,并在终结点上进行了训练、发布和测试操作。 这些是生成 LUIS 模型的基本步骤。

LUIS 不提供用户语句的应答,只会识别以自然语言请求的信息类型。

清理资源

不再需要 LUIS 应用时,请将其删除。 为此,请在左上角的菜单中选择“我的应用”。 在应用列表中选择应用名称右侧的省略号 (...),然后选择“删除”。 在弹出对话框“删除应用?”中,选择“确定”。