Azure Qna Maker多种语言

时间:2018-08-13 10:04:20

标签: azure multilingual azure-search azure-cognitive-services qnamaker

我正在Microsoft Azure环境中开发一个机器人,该机器人能够用四种语言回答问题。总体方案如下:将用户的输入提交给Azure TextAnalytics,并使用推导的语言(在认知服务(LUIS和QnA Maker)的帮助下)将它们路由到知识库(以他们的语言)给他们问题的答案。

Qna Maker通过Azure搜索服务管理KB的数据。但是,一旦将一个KB分配给一个KB,就会在后者中创建一个索引(kbId),该索引定义了-我假设-该搜索服务将管理的所有KB的语言。

资源冗余和最重要的是成本变得越来越愚蠢:需要为每种语言创建QnA Maker;每种语言并行提供1个QnA认知服务,1个应用程序服务,1个搜索服务(以及可选的1个应用程序见解)是荒谬的。当然,Azure中必须存在替代方案。但是我发现很难找到它们,因为kbId索引是唯一的,它仅接受一种语言,并且一旦创建就无法更新。

我真的很想知道其他人是否遇到过此类问题。如果存在解决方案(除了昂贵的解决方案可以复制一切),或者如果我可能错过了Azure QnA Maker的某些东西,那么……

非常感谢您的帮助!

5 个答案:

答案 0 :(得分:1)

Microsoft提供的文档中有一篇关于该主题的好文章。

它说:

  

QnA Maker支持多种语言的知识库内容。然而,   每个QnA Maker服务都应保留为一种语言。的   针对特定QnA Maker服务创建了第一个知识库   设置该服务的语言。请参阅此处以获取受支持的列表   语言。

     

根据数据内容自动识别语言   来源被提取。创建新的QnA Maker服务后,   该服务中的新知识库,您可以验证该语言   已正确设置。

因此,很抱歉,但是,当您说以下内容时,您是对的:

  

但是,一旦将KB分配给一个,就会创建一个索引(kbId)   在后者中,它定义了-我假设-所有KB的语言   该搜索服务将对其进行管理。

=>您必须在Azure中创建几个 QnA Maker Service ,每种语言都创建一个。

链接:https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/how-to/language-knowledge-base

注意:此链接还提供了一种检查检测到的搜索服务语言的方法

答案 1 :(得分:1)

确实,QnA制造商仅支持您选择的一种语言来创建知识库。

但是可以创建一个支持多种语言的聊天机器人。我们需要使用 Azure文本翻译服务。因此,步骤将是:

  1. 用户使用X语言与机器人聊天。
  2. 使用翻译服务检测X的语言。
  3. 如果X是英语,请致电QnA制造商。
  4. 如果X不是英语,请使用翻译服务以英语翻译文本。
  5. 呼叫QnA,获取答案,将答案转换回X语言并将其发送给用户。

请使用以下有用的链接来实现此目的:
https://desflanagan.ie/2016/10/25/build-a-multi-language-bot/
https://docs.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-reference

答案 2 :(得分:0)

在针对三种不同语言实施QnA时,我面临着完全相同的挑战。

文档中有一个更明确的提及:

  

语言分析器一旦设置就无法更改。此外,语言分析器适用于QnA Maker服务中的所有知识库。如果计划使用不同语言的知识库,则应在单独的QnA Maker服务下创建它们。

来源:https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/overview/languages-supported

我还担心为每个QnA拥有专用实例的成本。这就是为什么我寻求解决方案。

QnA Maker的大部分成本来自以下事实:每个实例下方都有自己的应用程序服务计划,而Azure门户不允许您将新实例指向现有的应用程序服务计划。但是,您可以通过ARM模板执行此操作。

这是我的方法:

  1. 创建一个新的资源组
  2. 在该资源组中创建新的App Service计划(建议使用SKU:S1)
  3. 针对该资源组部署ARM template(请参见deploy.ps1)。对每个参数文件(例如3种不同的语言)执行一次此操作,然后将每个文件指向在步骤2中创建的同一App Service Plan(请参阅参数 appServicePlanName )。

也可以通过简单地创建您的第一个QnA Maker实例来存档步骤1和2,该实例创建一个新的资源组和您可以在步骤3中指向的应用程序服务计划。

在我的示例场景中,这导致3个不同的QnA Maker实例在同一App Service计划上运行,至少从UI角度来看,节省了当前服务版本的限制所强制执行的大部分成本。

免责声明::我看不到Microsoft为什么从UI阻止此方案,因此有可能由于某种原因不支持我的解决方案。恕我直言>如果让我做API,就应该支持它。

奖金:还有一个参数文件,用于使用免费层(每个租户只有一个),您可以将其用于测试目的。在这里,我混合了我的知识库,但它们并不关心语言问题,因为它只是用于快速而肮脏的测试。

如果您在使用我的样品时遇到麻烦,请告诉我。

答案 3 :(得分:0)

我遇到了相同的问题,并且-如先前的答案所述-确认此限制。当您将多个知识库分配给同一Azure服务时,链接的Azure搜索服务中的分析器设置将从新索引的第一个知识库中获取。我看不到解决方法。

主要问题是Azure搜索服务-每个租户仅允许一个“免费” SKU,因此这会强制每种语言使用付费实例。在我的环境中,这是一个关键问题,在很多情况下都无法解决(例如,通常您希望有单独的实例进行测试和生产)。

从技术角度来看,我不清楚为什么存在此限制。每个知识库都有一个独立的索引,您始终会向QnA Maker服务查询特定的知识库。因此,应该有可能为Azure服务中的每个索引定义分析器配置。我为此创建了一个功能请求:https://feedback.azure.com/forums/34192--general-feedback/suggestions/38372725-qna-maker-support-knowledge-bases-for-different-l。随便投票吧。

答案 4 :(得分:0)

我不知道您是否找到解决方案,但是我所做的是创建新的QnA制造商服务并将 Web应用程序与其他QnA制造商服务计划合并,因为文件数量将被分割我能够将QnA认知应用程序的定价层更改为免费,以便进行搜索,我建议按原样保留搜索服务,根据Microsoft的答复如下:

  

要使用多种语言和多种知识库,用户必须   为每种语言创建QnA Maker资源。这将创建一个   每种语言单独的Azure搜索服务。混合不同的语言   单个Azure搜索服务中的知识库将导致   结果相关性下降。

总而言之,价格是按需支付的,所以现在额外增加的是文档数量和10美元的东西。