从语言理解 (LUIS) 迁移到对话语言理解 (CLU)

对话语言理解 (CLU) 是 Azure AI 语言中基于云的 AI 产品/服务。 这是最新一代的语言理解 (LUIS),并提供与以前创建的 LUIS 应用程序的后向兼容性。 CLU 采用最先进的机器学习智能,使用户能够构建自定义自然语言理解模型,以预测对话语句中的意向和实体。

与 LUIS 相比,CLU 具有以下优势:

  • 采用最先进的机器学习模型提高了准确性,实现了更好的意向分类和实体提取。 LUIS 概况意向和实体中的某些概念需要更多示例,而 CLU 利用更高级的机器学习显著减少了数据,从而减轻了客户的负担。
  • 对模型学习和训练提供多语言支持。 用一种语言训练项目时就可立即预测 96 种语言的意向和实体。
  • 使用业务流程工作流轻松与不同的 CLU 和自定义问题解答项目集成。
  • 能够在部署之前使用 Language Studio 和 API 在体验中添加测试数据以进行模型性能评估。

若要开始,可以创建新项目迁移 LUIS 应用程序

LUIS 与 CLU 之间的比较

下表提供了 LUIS 和 CLU 特征之间的并行比较。 它还突出显示了迁移到 CLU 后对 LUIS 应用程序的更改。 选择链接的概念可了解更改详细信息。

LUIS 特征 CLU 特征 迁移之后
机器学习和结构化 ML 实体 了解实体组件 没有子实体的机器学习实体将作为 CLU 实体进行传输。 结构化 ML 实体只会将叶节点(没有自己的子实体的最低级别子实体)作为 CLU 中的实体进行传输。 CLU 中实体的名称将是与父级串联的子实体的名称。 例如 Order.Size
列表、正则表达式和预生成实体 列表、正则表达式和预生成实体组件 列表、正则表达式和预生成实体将作为 CLU 中的实体进行传输,并基于实体类型填充实体组件。
Pattern.Any 实体 当前不可用 Pattern.Any 实体将被删除。
每个应用程序的单一区域性 多语言模型为每个项目启用多种语言。 项目的主要语言将设置为 LUIS 应用程序区域性。 可以训练项目以扩展到不同的语言。
实体角色 不再需要角色 实体角色将作为实体进行传输。
设置:规范化标点符号、规范化音调符号、规范化单词形式、使用所有训练数据 不再需要设置 不会传输设置。
模式和短语列表特征 不再需要模式和短语列表特征 不会传输模式和短语列表特征。
实体特征 实体组件 作为特征添加到实体的列表或预生成实体将作为添加的组件传输到该实体。 不会为意向传输实体特征
意向和语句 意向和语句 将传输所有意向和语句。 语句将被标记为其传输的实体。
应用程序 GUID 项目名称 将为每个迁移应用程序创建一个具有应用程序名称的项目。 CLU 中将删除应用程序名称中的任何特殊字符。
版本控制 每次训练时,都会创建一个模型,并将其用作项目的版本。 将为所选应用程序版本创建项目。
使用批处理测试进行评估 使用测试集进行评估 将需要添加测试数据集
LUIS 资源的基于角色的访问控制 (RBAC) 可用于语言资源的基于角色的访问控制 (RBAC) 迁移后必须手动添加语言资源 RBAC。
单一训练模式 标准和高级训练模式 应用程序迁移后需要接受训练。
两个发布槽和版本发布 具有自定义命名的十个部署槽位 应用程序迁移和训练后需要部署。
.NET、Python、Java 和 Node.js 中的 LUIS 创作 API 和 SDK 支持 CLU 创作 REST API 有关详细信息,请参阅快速入门文章,了解有关 CLU 创作 API 的信息。 需要重构才能使用 CLU 创作 API。
.NET、Python、Java 和 Node.js 中的 LUIS 运行时 API 和 SDK 支持 CLU 运行时 API。 对 .NETPython 的 CLU 运行时 SDK 支持。 有关详细信息,请参阅如何调用 API。 需要重构才能 CLU 运行时 API 响应。

迁移 LUIS 应用程序

使用以下步骤通过 LUIS 门户或 REST API 迁移 LUIS 应用程序。

使用 LUIS 门户迁移 LUIS 应用程序

按照以下步骤开始使用 LUIS 门户进行迁移:

  1. 登录到 LUIS 门户后,单击屏幕顶部横幅上的按钮以启动迁移向导。 迁移只会将所选 LUIS 应用程序复制到 CLU。

    A screenshot showing the migration banner in the LUIS portal.

    “迁移概述”选项卡简要介绍了对话语言理解及其优点。 请按“下一步”以继续操作。

    A screenshot showing the migration overview window.

  2. 确定要将 LUIS 应用程序迁移到的语言资源。 如果已创建语言资源,请选择 Azure 订阅,再选择语言资源,然后选择“下一步”。 如果没有语言资源,请单击链接以创建新的语言资源。 然后,选择该资源并选择“下一步”。

    A screenshot showing the resource selection window.

  3. 选择要迁移的所有 LUIS 应用程序,并指定其每个版本。 选择“下一页”。 选择应用程序和版本后,系统会以消息形式进行提示,告知你不会从 LUIS 应用程序传递的任何特征。

    注意

    对话语言理解不支持特殊字符。 新迁移的应用程序中将删除所选 LUIS 应用程序名称中的任何特殊字符。 A screenshot showing the application selection window.

  4. 查看语言资源和 LUIS 应用程序选择。 选择“完成”以迁移应用程序。

  5. 可在弹出窗口中跟踪应用程序的迁移状态。 尚未开始迁移的应用程序的状态为“尚未开始”。 已开始迁移的应用程序的状态为“正在进行”,完成迁移后,其状态将为“成功”。 失败的应用程序意味着必须重复迁移过程。 所有应用程序完成迁移后,请选择“完成”。

    A screenshot showing the application migration progress window.

  6. 迁移应用程序后,可执行以下步骤:

常见问题

CLU 支持哪个 LUIS JSON 版本?

CLU 支持模型 JSON 版本 7.0.0。 如果 JSON 格式较旧,则需要先将其导入 LUIS,然后使用最新版本从 LUIS 导出。

CLU 中的实体有何不同?

在 CLU 中,单个实体可以有多个实体组件,这些组件的提取方法各不相同。 可使用所定义的规则将它们组合在一起。 可用的组件包括:

  • 已学习:与 LUIS 中的 ML 实体等效,标签用于训练机器学习模型,以基于提供的标签内容和上下文预测实体。
  • 列表:与 LUIS 中的列表实体一样,列表组件与一组同义词完全匹配,并将其映射回名为“列表键”的规范化值。
  • 预生成:预生成组件使用 LUIS 和 CLU 中可用的常见类型的预生成提取程序定义实体。
  • 正则表达式:正则表达式组件使用正则表达式捕获定义的自定义模式,与 LUIS 中的正则表达式实体完全相同。

LUIS 中的实体将作为 CLU 中同名的实体传输,并传输等效的组件。

迁移后,结构化的机器学习叶节点和底层子实体将传输到新的 CLU 模型,同时忽略所有父实体和更高级别的实体。 实体的名称将是与其父实体串联的底层实体的名称。

示例:

LUIS 实体:

  • 披萨订单
    • 浇汁
    • 大小

CLU 中迁移的 LUIS 实体:

  • Pizza Order.Topping
  • Pizza Order.Size

也不能在 CLU 中为相同的字符范围标记 2 个不同的实体。 CLU 中的已学习组件是相互排斥的,并且不会仅为已学习组件提供重叠的预测。 迁移 LUIS 应用程序时,重叠的实体标签会保留最长的标签,并忽略任何其他标签。

有关实体组件的详细信息,请参阅实体组件

实体角色如何传输到 CLU?

角色将作为不同实体及其标记的语句进行传输。 每个角色的实体类型将确定将填充的实体组件。 例如,列表实体角色将作为与角色同名的实体进行传输,其中包含填充的列表组件。

如何在 CLU 中传输实体特征?

不会传输用作意向特征的实体。 用作其他实体的特征的实体将填充实体的相关组件。 例如,如果名为 SizeList 的列表实体用作名为 Size 的机器学习实体的功能,则该 Size 实体将传输到 CLU,并将 SizeList 中的列表值添加到其列表组件中。 这同样适用于预生成实体和正则表达式实体。

CLU 中的实体置信度分数有何不同?

任何提取的实体都有 100% 的置信度分数,因此不应使用实体置信度分数在实体之间做出决策。

对话语言理解是如何实现多语言的?

对话语言理解项目接受不同语言的语句。 此外,还可使用一种语言训练模型,并对其进行扩展以使用其他语言进行预测。

示例:

训练语句(英语):How are you?

标记意向:问候语

运行时话语(法语):Comment ça va?

预测意向:问候语

CLU 的准确性如何优于 LUIS?

CLU 使用最先进的模型来增强不同意向分类和实体提取模型的机器学习性能。

这些模型对微小的变化不敏感,无需以下设置:规范化标点符号、规范化音调符号、规范化单词形式和使用所有训练数据。

此外,新模型不支持短语列表特征,因为它们不再需要用户的补充信息来提供语义相似的单词以获得更好的准确性。 模式还用于使用新模型范例中不需要的基于规则的匹配技术提供改进的意向分类。 以下问题更详细地解释了这一点。

如果我在 LUIS 中使用的特征不再存在,该怎么办?

LUIS 中的有些特征在 CLU 中将不再可用。 这包括执行特征工程、具有模式和 pattern.any 实体以及结构化实体的功能。 如果 LUIS 中的这些特征具有依赖项,请使用以下指南:

  • 模式:LUIS 中添加了模式,目的是通过定义正则表达式模板语句来协助意向分类。 这包括定义仅模式意向(没有语句示例)的能力。 CLU 能够利用最先进的模型进行通用化。 你可以提供一些与 CLU 中意向匹配的特定模式的语句,并且它可能会将不同的模式分类为最相关意向,而无需模式模板语句。 这简化了制定这些模式的要求(这在 LUIS 中受到限制),并提供了更好的意向分类体验。

  • 短语列表特征:关联特征的能力主要是为了通过突出显示要使用的关键元素/特征来协助对意向进行分类。 这不再需要,因为 CLU 中使用的深度模型已经能够识别语言固有的元素。 反过来,删除这些特征不会影响模型的分类能力。

  • 结构化实体:定义结构化实体的能力主要是启用语句的多层次分析。 由于子实体的可能性不同,LUIS 需要定义实体的所有不同组合,并将其作为示例呈现给模型。 在 CLU 中,不再支持这些结构化实体,因为不支持重叠的已学习组件。 有几种可能的方法可以处理这些结构化提取:

    • 明确提取:在大多数情况下,叶实体的检测足以了解整个范围内所需的项。 例如,完全跨越源和目标(伦敦到纽约或家到工作地点)的结构化实体(如 Trip)可以使用为源和目标预测的各个范围进行标识。 它们作为单个预测的存在会通知你 Trip 实体。
    • 不明确提取:适用于不同子实体的边界不太清楚的情况。 为了说明这一点,以“我想点一份意大利辣香肠披萨和一份额外的奶酪素食披萨”为例。 虽然可以提取不同的披萨类型和浇汁修饰,但在没有上下文的情况下提取它们会对添加额外奶酪的位置产生一定程度的歧义。 在这种情况下,跨度的范围是基于上下文的,需要 ML 来确定这一点。 对于不明确提取,可以使用以下方法之一:
  1. 将子实体合并到同一实体中的不同实体组件中。

示例:

LUIS 实现:

  • 披萨订单(实体)
    • 大小(子实体)
    • 数量(子实体)

CLU 实现:

  • 披萨订单(实体)
    • 大小(列表实体组件:小、中、大)
    • 数量(预生成实体组件:数字)

在 CLU 中,将为“披萨订单”标记整个范围(包括大小和数量),这将返回包含大小列表键和同一实体对象中数量的数字值的披萨订单。

  1. 对于实体包含多个深度级别的更复杂的问题,可以为实体结构中的每个深度级别创建项目。 这为你提供了以下选项:
  • 将语句传递给每个项目。
  • 在 CLU 进行阶段中结合每个项目的分析。

有关此概念的详细示例,请查看 GitHub 上提供的披萨示例项目。

如何管理 CLU 中的版本?

CLU 保存用于训练模型的数据资产。 可以随时导出模型的资产或将它们加载回项目中。 因此,模型充当项目的不同版本。

可使用 Language Studio以编程方式导出 CLU 项目,并在本地存储不同版本的资产。

为什么 CLU 分类不同于 LUIS? None 分类如何工作?

CLU 通过使用多分类而不是二元分类来训练模型,提出了一种不同的方法。 因此,分数的解释不同,而且在训练选项上也有所不同。 虽然可能取得更好的结果,但必须观察分数的差异,并确定接受意向预测的新阈值。 可在项目设置中轻松为 None 意向添加置信度分数阈值。 如果最相关意向未超过提供的置信度分数阈值,则返回 None 作为最相关意向。

CLU 模型需要的数据是否比 LUIS 更多?

与 LUIS 相比,新的 CLU 模型对语言具有更好的语义理解,反过来又有助于使模型在显著减少数据的情况下通用化。 虽然不应旨在减少拥有的数据量,但与 LUIS 相比,CLU 中的变体和同义词的性能和复原能力应更好。

如果不迁移 LUIS 应用,它们会被删除吗?

现有 LUIS 应用程序将在 2025 年 10 月 1 日之前可用。 在此之后,将无法再使用这些应用程序,服务终结点将不再正常运行,并且应用程序将被永久删除。

CLU 上支持 .LU 文件吗?

CLU 仅支持 JSON 格式。 可将 .LU 文件导入到 LUIS,并以 JSON 格式将其导出,也可按照上述针对应用程序的迁移步骤进行操作。

CLU 有哪些服务限制?

有关详细信息,请参阅服务限制一文。

如果我将应用程序从 LUIS 迁移到 CLU,是否需要重构代码?

CLU 应用程序的 API 对象不同于 LUIS,因此需要进行代码重构。

如果使用 LUIS 编程 API 和运行时 API,则可以将其替换为其等效 API。

CLU 创作 API:CLU 提供了一个导入 API,用于使用相同名称替换项目的完整内容,而不是 LUIS 针对单个操作(例如添加语句、删除实体和重命名意向)提供的特定 CRUD API。 如果服务使用 LUIS 编程 API 为其他客户提供平台,则必须考虑此新的设计范例。 所有其他 API(如:列出项目、训练、部署和删除)都可用。 导入和部署等操作的 API 是异步操作,而不是在 LUIS 中那样是同步操作。

CLU 运行时 API:新的 API 请求和响应包含许多相同的参数,例如:查询、预测、最相关意向、意向、实体及其值。 CLU 响应对象提供的方法更简单。 实体预测在语句文本中按原样提供,任何其他信息(如解析或列表键)在称为 extraInformationresolution 的额外参数中提供。

可使用 .NETPython CLU 运行时 SDK 替换 LUIS 运行时 SDK。 目前没有可用于 CLU 的创作 SDK。

CLU 中的训练时间有何不同? 标准训练与高级训练有何不同?

CLU 提供标准训练,以英语进行训练和学习,与 LUIS 的训练时间相当。 它还提供高级训练,这种训练需要相当长的时间,因为它会将训练扩展到所有其他支持的语言。 训练 API 将继续是一个异步过程,你需要评估为解决方案采用的 DevOps 进程的更改。

与 LUIS 相比,CLU 中的体验有何变化? 开发生命周期有何不同?

在 LUIS 中,你将完成“生成-训练-测试-发布”过程,而在 CLU 中,则需要完成“生成-训练-评估-部署-测试”过程。

  1. 生成:在 CLU 中,可以在训练之前定义意向、实体和语句。 此外,CLU 还使你能够在生成用于模型评估的应用程序时指定测试数据。 评估是指评估模型在测试数据上的表现,并提供精度、召回率和 F1 指标。
  2. 训练:每次训练时,都会创建一个具有名称的模型。 可以覆盖已训练的模型。 可以指定标准或高级训练,并确定是要使用测试数据进行评估,还是要从训练中省略一定百分比的训练数据,并将其用作测试数据。 训练完成后,可以评估模型在外部的运行情况。
  3. 部署:训练完成后,你有一个具有名称的模型,可部署该模型以进行预测。 也需要为部署命名并分配一个模型。 可以为同一模型部署多个部署。 可以使用其他模型覆盖部署,也可以将模型与项目中的其他部署交换。
  4. 测试:部署完成后,可以通过部署终结点使用它进行预测。 还可在“测试部署”页的工作室中对其进行测试。

此过程与 LUIS 相反,在 LUIS 中,应用程序 ID 已附加到所有内容,并已在过渡槽或生产槽中部署了应用程序的版本。

这将影响所使用的 DevOps 进程。

CLU 是否支持容器?

不支持,无法将 CLU 导出到容器。

迁移后如何在 CLU 中命名 LUIS 应用程序?

将删除 LUIS 应用程序名称中的任何特殊字符。 如果清除的名称长度大于 50 个字符,则将删除额外的字符。 如果删除的特殊字符后的名称为空(例如,LUIS 应用程序名称为 @@),则新名称将为“无标题”。 如果已存在具有相同名称的对话语言理解项目,则迁移的 LUIS 应用程序将为第一个副本追加 _1,并为每个其他重复项增加 1。 如果新名称的长度为 50 个字符,并且需要重命名,则将删除最后 1 或 2 个字符才能连接数字,并且仍在 50 个字符的限制内。

从 LUIS Q&A 迁移

如有任何问题在本文中找不到回答,请考虑在 Microsoft Q&A 线程中留下你的问题。

后续步骤