category
开发人员可以使用Bot Framework制作各种对话体验,通过最终用户的一个入口点统一这些体验的入门。这种组合模型通常被称为技能。
在一个组织内,创建一个拥有多个子机器人的父机器人,我们称之为技能,由不同的团队拥有,是一种有效的设计模式。这些技能可以更广泛地利用其他开发人员提供的通用功能,这有助于在整个组织内横向扩展自动化。
Bot框架中有两种组件模型方法,Bot组件和技能。
- Bot Components允许您以源代码形式或通过包和相关的包提要与其他开发人员共享声明性会话资产(对话框、语言模型和语言生成响应)和代码的任何组合。然后将其导入到您的项目中,并可以根据需要进行修改以适应您的场景。这直接类似于共享代码库。
- 技能可以让机器人出现在其他对话体验中,与其他机器人分享,然后机器人将话语传递给远程处理。这与构建web服务网格的方式直接类似。
为您的场景构建正确的架构非常重要。机器人组件提供了一种在项目之间共享通用功能的简单方法,然后可以对其进行修改,技能提供了对给定体验的集中所有权,然后其他对话体验可以按原样使用。
Composer可以帮助利用机器人作为一种技能。需要技能清单和其他更改,Composer可以帮助实现自动化。
对于技能场景,家长机器人负责将用户的话语分派给最适合处理话语的技能。该调度员需要用每种技能的示例话语进行训练,以构建调度模型。这使父机器人能够识别正确的技能,并将此技能和后续话语传递给它。
Orchestrator是现已弃用的Bot Framework Dispatcher的替代品。它为Bot Framework客户提供了一个易于使用的强大技能调度解决方案。使用Composer构建的机器人或直接使用SDK创建的机器人都可以使用它,使现有的Dispatch用户能够轻松切换到Orchestrator。
Orchestrator利用自然语言理解方法,同时简化了语言建模过程。使用它不需要深度神经网络或自然语言处理(NLP)方面的专业知识。这项工作是与该领域的行业专家共同撰写的,其中包括通用语言理解评估(GLUE)领导委员会中使用的一些顶级方法。编排器将继续进化和发展。
Dispatch user input with few training examples
开发人员通常需要用很少的训练示例来正确定义语言模型。有了Orchestrator使用的预训练模型,这就不那么令人担忧了。仅仅一个意图或技能的例子往往可以在做出准确预测方面发挥很大作用。例如,仅用一个例子“你好”定义的“问候”意图可以成功预测“你今天怎么样”或“早上好”等例子。
预训练模型的力量及其使用极少数简单简短示例的泛化能力是强大的。这种能力通常被称为少镜头学习,包括单镜头学习,Orchestrator也支持这种学习。得益于在大型数据集上训练的预训练模型,这种能力得以实现。
Multi-lingual
Orchestrator provides a multi-lingual model alongside English which provides the ability for a model trained with, for example English-only, data to process utterances in other languages.
In this example, using the CLI for ease of demonstration, we pull down the multi-lingual model rather than the default English model. You can retrieve a list of available models through the command bf orchestrator:basemodel:list
.
bf orchestrator:basemodel:get --versionId=pretrained.20210205.microsoft.dte.00.06.unicoder_multilingual.onnx --out=model
Then create a snapshot using a .lu
file with solely-English utterances.
bf orchestrator:create --in test.lu --model model --out generated
And then test using a German utterance ("book a meeting with Darren") which correctly classifies the intent as the BookMeeting
intent.
bf orchestrator:query -i="generated\test.blu" -m=model -q="Buchen Sie einen Termin mit Darren"
[
{
"label": {
"name": "BookMeeting",
"label_type": 1,
"span": {
"offset": 0,
"length": 34
}
},
"score": 0.24771601762059242,
"closest_text": "book a meeting with darren"
}
]
Multi-intents
Orchestrator also supports multi-intent detection, whereby if an utterance for a user contains two instructions (for example book a meeting with Darren and add a task to pickup chocolate milk
) these can both be identified and provided to the bot for subsequent processing.
The example below, using the CLI for ease of demonstration, shows two intents being extracted from a given utterance.
bf orchestrator:query -i="generated\test.blu" -m=model -q="book a meeting with darren and add a task to pickup chocolate milk"
[
{
"closest_text": "add task to pickup chocolate milk",
"score": 0.7430192247281288,
"label": {
"name": "AddTask",
"label_type": 1,
"span": {
"length": 56,
"offset": 0
}
}
},
{
"closest_text": "book a meeting with darren",
"score": 0.6492044311828292,
"label": {
"name": "BookMeeting",
"label_type": 1,
"span": {
"length": 56,
"offset": 0
}
}
}
]
无需额外示例即可对未知意图进行分类
使用Orchestrator,您不需要深入了解ML和NLP来创建强大的调度模型。
开发人员在处理意图分类决策时面临的另一个常见挑战是确定是否应该触发得分最高的意图。Orchestrator为此提供了一种解决方案。它的分数可以被解释为以这样的方式校准的概率,即0.5的分数被定义为以平衡精确度和召回率的方式选择的未知意图的最大分数。
如果顶级意图的得分为0.5或更低,则查询或请求应被视为未知意图,并可能触发机器人的后续问题。否则,如果两个意图的得分高于0.5,则两个意图(技能)都可能被触发。如果机器人一次只处理一个意图,那么应用程序规则或其他优先级可以选择在这种情况下触发的意图。
对未知意图的分类是在不需要任何定义未知的例子的情况下完成的(通常称为零样本学习),这将是很难完成的。如果没有经过大量预训练的语言模型,很难实现这一点,特别是因为机器人应用程序将来可能会通过额外的技能进行扩展。
快速本地库
Orchestrator核心是用C++编写的,目前可以作为C#和Node.js的库使用。该库可以直接由bot代码使用(首选方法),也可以在out-of-proc 或远程服务器上托管。在本地运行消除了额外的服务往返延迟。当使用Orchestrator跨不同的LU和QnA服务进行调度时,这尤其有用。
例如,英语预训练语言模型(pretrained.2020924.microsoft.dte.00.06.en.onnx)大约为260 MB。使用此初始模型对新示例进行分类大约需要10毫秒(取决于文本长度)。这些数字只是为了说明性能。随着我们改进模型或添加其他语言,这些数字可能会发生变化。
注:
Azure QnA Maker将于2025年3月31日退役。从2022年10月1日开始,您将无法创建新的QnA Maker资源或知识库。更新版本的问答功能现已作为Azure AI语言的一部分提供。
自定义问答是Azure AI语言的一项功能,是QnA Maker服务的更新版本。有关Composer中问答支持的更多信息,请参阅自然语言处理。
报告
Orchestrator还提供了一种测试机制,用于评估Orchestrator模型的性能,进而生成报告。
为了实现高质量的自然语言处理(如意图检测),有必要评估和改进模型的质量。由于使用了预先训练的模型,这在Orchestrator中得到了简化。需要一个优化周期来考虑人类语言的变化。
有关如何生成和分析报告的更多信息,请参阅GitHub上的报告解释。
需要最少或不需要模型训练
Orchestrator使用基于示例的方法,其中语言模型被定义为一组标记的示例。模型示例表示为从给定文本的变换器模型中获得的数字向量(嵌入),相应的技能能够处理该文本。
在运行时,根据技能计算新示例与现有模型示例的相似性。采用K个最接近样本的加权平均KNN算法来确定分类结果。这种方法不需要显式的训练步骤,只需要计算模型示例的嵌入。该操作在没有GPU和远程服务器往返的情况下在本地执行。
Additional Information
- See the Create an intent driven bot with Orchestrator article for an example of Orchestrator in Composer.
- 登录 发表评论
- 2 次浏览
最新内容
- 1 day 22 hours ago
- 1 day 22 hours ago
- 1 day 22 hours ago
- 1 day 22 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago