练习 - 设置意向和自然语言理解
在此模块中,你将探索 Azure 语音服务的意向识别。 借助意向识别功能,可以使用 AI 支持的语音命令为应用程序提供支持,用户可以在其中说出非特定的语音命令,同时仍可让系统理解其意向。
准备场景
在“层次结构”窗口中选择“Lunarcom”对象,然后在“检查器”窗口中,使用“添加组件”按钮将“Lunarcom 意向识别器(脚本)”组件添加到 Lunarcom 对象。
在“项目”窗口中,导航到“资产”>“MRTK.Tutorials.GettingStarted”>“预制件”>“RocketLauncher”文件夹,将“RocketLauncher_Complete”预制件拖到“层次结构”窗口中,并将其放置在相机前面的适当位置。 例如:
- 变换位置 X = 0、Y = 1、Z = 1.5
- 变换位置 X = 0,Y = 90,Z = 0
在“层次结构”窗口中,再次选择“Lunarcom”对象,展开“RocketLauncher_Complete”>“Buttons”对象,并将 Buttons 对象的每个子对象分配到相应的“月球发射器按钮”字段。
创建 Azure 语言服务资源
在本部分,你将为要在下一部分中创建的对话语言理解 (LUIS) 应用创建 Azure 语言服务资源。
登录到Azure 门户并选择“创建资源”,然后搜索并选择“语言服务”:
选择“创建”按钮以创建此服务的实例:
在“创建语言”页上,输入以下值:
- 对于“订阅”,如果你有试用版订阅,请选择“免费试用版”。 如果没有试用版订阅,请选择任何一个其他订阅。
- 对于“资源组”,请选择“新建”链接,然后输入合适的名称,例如 MRTK-Tutorials。 选择“确定”。
提示
如果 Azure 帐户中已有另一个合适的资源组,则可以使用此资源组,而不是创建一个新的资源组。
仍在“创建”页上,输入以下值:
- 对于“名称”,请为服务输入合适的名称,例如 MRTK-Tutorials-AzureSpeechServices
- 对于“区域”,请选择靠近应用用户物理位置的位置,例如“美国东部”
- 对于“定价层”,在本教程中,请选择“F0 (每 30 天 5,000 个事务)”
接下来,选择“查看 + 创建”,查看详细信息,然后选择页面底部的“创建”按钮以创建资源(如果配置了一个要创建的资源组,则同时创建一个新资源组):
资源创建过程完成后,可看到消息“部署完成”:
创建对话语言理解 (CLU) 应用
在本部分,创建一个 CLU 应用,配置和训练其预测模型,并将其连接到在上一步中创建的 Azure 语言资源。
具体来说,你将创建一个意向,如果用户说应该采取操作,则应用在场景中的三个蓝色按钮之一上触发 PressableButton.OnClicked()
事件,具体取决于用户引用的按钮。
例如,如果用户说“继续并发射火箭”,则应用预测“继续”意味着应该采取某项操作,并且目标的 PressableButton.OnClicked()
事件在“发射”按钮上。
若要实现此目的,请执行以下主要步骤:
- 创建 CLU 应用
- 创建意向
- 创建示例言语
- 创建实体
- 将实体分配到示例言语
- 训练、测试并发布应用
1. 创建 CLU 应用
使用在上一部分创建 Azure 资源时所用的同一用户帐户登录到 Language Studio。
登录后,系统会提示你选择 Azure 资源。 选择创建 Azure 语言服务资源时使用的值,然后选择“完成”。
连接 Azure 资源后,选择“新建”>“对话语言理解”,然后在“创建项目”弹出窗口中输入以下值:
- 对于“名称”,请输入合适的名称,例如 MRTK-Tutorials-AzureSpeechServices。 请记下所选的名称,因为本教程稍后需要用到它。
- 对于“语句主要语言”,请选择一种语言。
- 对于“描述”,可选择性地输入合适的描述。
选择“下一步”以查看项目配置。 选择“创建”来创建项目。
创建新应用后,你将转到该应用的“架构定义”页。
2.创建意向
在“架构定义”页中,选择“添加”,然后在“添加意向”弹出窗口中输入以下值:
- 对于“意向名称”,请输入 PressButton
选择“添加意向”以创建新意向:
注意
在本教程中,Unity 项目将通过其名称 (
PressButton
) 引用此意向。 使意向命名完全相同,这一点非常重要。创建新意向后,你将返回到“架构定义”页。 PressButton 意向将显示在意向列表中。
3.创建示例言语
在左侧边栏上,选择“数据标签”按钮。 在“数据标签”屏幕上,从“选择意向”下拉列表中选择“PressButton”。
将以下示例语句添加到 PressButton 意向的“语句”列表中:
- 激活发射顺序
- 显示位置提示
- 启动发射顺序
- 按下位置提示按钮
- 给予提示
- 按下发射按钮
- 我需要提示
- 按下重置按钮
- 重置体验的时间
- 继续发射火箭
添加所有示例语句后,“数据标签”页应如下所示:
注意
在本教程中,Unity 项目将引用词语“提示”、“重置”和“发射”。在所有实例中以完全相同的方式拼写这些字词,这一点非常重要。
4.创建实体
在“数据标签”页上,选择右侧“活动”窗格中的“添加实体”,然后在“添加实体”弹出窗口中输入以下值:
- 对于“实体名称”,请输入 Action
选择“添加实体”以创建新实体。
重复上述步骤,创建名为“目标” 的另一个实体,因此现在有名为“操作”和“目标” 的两个实体。
注意
在本教程中,Unity 项目将通过其名称(
Action
和Target
)引用这些实体。 使实体命名完全相同,这一点非常重要。
5.将实体分配到示例言语
选择单词 go,然后选择单词 ahead,接着从上下文弹出菜单中选择“操作(简单)”,将“go ahead”(“继续”)标记为“操作”实体值。
短语“继续”现在定义为 Action 实体值。 现在,“继续”一词下有一个“操作”实体值。
注意
图像中标签下显示的红线指示尚未预测实体值;这将在下一节中训练模型时得到解决。
接下来,选择“发射”一词,然后从上下文弹出菜单中选择“目标”,将“发射”标记为“目标”实体值。
词语“发射”现在定义为 Target 实体值。 现在,“发射”一词下有一个“目标”实体值。
PressButton 意向示例语句
go ahead and launch the rocket
现在配置为预测如下:- 意向:PressButton
- Action 实体:继续
- Target 实体:发射
重复前面的过程,为每个示例语句分配一个“操作”和一个“目标”实体标签,请记住,以下字词应标记为“目标”实体:
- 提示(针对 Unity 项目中的 HintsButton)
- 提示(针对 Unity 项目中的 HintsButton)
- 重置(针对 Unity 项目中的 ResetButton)
- 发射(针对 Unity 项目中的 LaunchButton)
选择保存更改。 标记了所有示例语句后,PressButton 意向页应如下所示:
6. 训练、测试和发布应用
若要训练应用,请从左侧边栏中选择“训练”按钮。 应该会看到“训练作业”页。
选择“启动训练作业”并选择以下值:
- 选择“训练新模型”,然后输入合适的名称,例如 MRTK-Tutorials-AzureSpeechServices。
- 选择“标准训练”。
- 选择“从训练数据中自动拆分测试集”。
选择“训练”,开始训练过程。 完成训练处理后,你将看到“已完成训练”通知。
若要查看训练结果,请在“训练作业”屏幕上选择“输出模型”,然后选择“模型性能”选项卡。
要部署应用,请选择左侧边栏中的“部署模型”按钮。 应该会看到“部署模型”页。
选择“添加部署”,并在“添加部署”弹出窗口中输入以下值:
- 选择“创建新部署名称”并输入合适的名称。 请记下所选的名称,因为本教程稍后需要用到它。
- 从“选择已训练的模型”下拉列表中选择之前创建的模型。
选择“部署”,等待发布过程完成。
选择新部署,然后选择“获取预测 URL”按钮。
将 unity 项目连接到 CLU 应用
在“获取预测 URL”弹出窗口中,选择“复制”图标以复制预测 URL。
返回 Unity 项目,在“层次结构”窗口中选择“Lunarcom”对象,然后在“检查器”窗口中,查找“Lunarcom 意向识别器(脚本)”组件,并按如下所示对其进行配置。
- 在“CLU 终结点”字段中,传递在上一步中复制的预测 URL。
- 在“CLU 项目名称”字段中,传递创建 CLU 应用时记录的项目名称。
- 在“CLU 部署”字段中,传递创建新部署时记录的部署名称。
- 在“语言服务 API 密钥”字段中,为语言服务传递 API 密钥(Key1 或 Key2)。 可以在 Azure 门户中找到此项,方法是选择语言服务,然后在左侧菜单中选择“密钥”和“终结点”。
测试意向识别
若要在 Unity 编辑器中直接使用意向识别,必须允许开发计算机使用听写。 若要验证此设置,请打开 Windows 的“设置”,然后选择“隐私”>“语音”,并确保启用“在线语音识别”。
如果进入游戏模式,可以先按火箭按钮来测试意向识别。 然后,当你讲出第一个示例语句“继续并发射火箭”时,可看到 LunarModule 发射到了太空。
尝试所有示例语句,然后尝试示例语句的一些变体,以及一些随机语句。