LUIS - 我可以在同一个应用程序中使用2种语言(中文和英文),但结果仍然不错吗?

时间:2018-04-19 09:53:58

标签: luis

我目前正在使用MS LUIS for Chatbot。

我们国家通常使用英语和汉语两种语言进行对话和聊天。

但是,在LUIS我只能定义一种文化。

因此,当我的文化设置为英语时,当我输入中文文本时,置信度非常低(例如英语 - 0.88,中文 - 0.1)。反过来也是一样。

即使我使用像JieBa或THULAC这样的库对中文文本进行了标记,情况也是如此。

因此,当我进行测试时,通常很容易陷入无关的意图。

我想让LUIS轻松识别英文和中文。有什么方法可以解决这个问题吗?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

  

我想让LUIS轻松识别英文和中文。有什么方法可以解决这个问题吗?

是的,方法是分离您的LUIS应用程序/项目,每种语言1个,并在调用LUIS之前使用语言检测。

这是LUIS文档的官方方法(参见here):

  

如果您需要多语言LUIS客户端应用程序,例如聊天   机器人,你有几个选择。 如果LUIS支持所有语言,那么   为每种语言开发一个LUIS应用程序。每个LUIS应用程序都有一个独特的应用程   ID和端点日志。如果您需要提供语言理解   对于LUIS不支持的语言,您可以使用Microsoft Translator   用于将话语翻译成支持语言的API,提交   发言到LUIS端点,并收到结果分数。

对于语言检测,您可以使用Microsoft Cognitive Services中的Text Analytics API来获取文本语言,然后使用此结果查询正确的LUIS应用程序。

如何使用它?

  • Text Analytics API here
  • 中的语言检测文档
  • 文字分析API:here

答案 1 :(得分:0)

正如Nicolas上面提到的,您可以为每种文化使用Multilanguage chat application和单独的LUIS应用程序。 为了拥有单个LUIS应用程序,您可以使用Translator Text API转换所有传入的消息,然后再将它们发送到LUIS。在这种情况下,您希望在调用LUIS识别器之前使用中间件来处理翻译。您还可以使用中间件来转换机器人的响应,这样您就不必在机器人内部使用其他本地化

LUIS中的

Tokenizing对于LUIS中的每种语言都不同。

zh-cn culture中,LUIS期望简体中文字符集而不是传统字符集。

这里还有一个sample,您可以从机器人中选择一种语言,并根据需要继续进行对话。

答案 2 :(得分:0)

经过调查和几次测试后,我想我找到了一种方法,如何正确地做到这一点:

首先,我目前正在使用 MS BotFramework - NodeJS(3.14.0)版本来创建我的Bot。

botbuilder课程中,您有一个名为IntentDialog的函数,它接受 a list of recognizers 。所以我写了这样的话:

luis.js

const builder = require("botbuilder")

// Setting for LUIS.ai
// Universal API key for both apps
let luisAPIKey = process.env.LuisAPIKey;

// First assign variables for Chinese LUIS app
let luisAppId_Chi = process.env.LuisAppId_Chi;
let luisAPIHostName_Chi = process.env.LuisAPIHostName_Chi || 'westus.api.cognitive.microsoft.com';
let LuisModelUrl_Chi = 'https://' + luisAPIHostName_Chi + '/luis/v2.0/apps/' + luisAppId_Chi + '?subscription-key=' + luisAPIKey + '&verbose=true';

// Then assign variables for English LUIS app
let luisAppId_Eng = process.env.LuisAppId_Eng;
let luisAPIHostName_Eng = process.env.LuisAPIHostName_Eng || 'westus.api.cognitive.microsoft.com';
let LuisModelUrl_Eng = 'https://' + luisAPIHostName_Eng + '/luis/v2.0/apps/' + luisAppId_Eng + '?subscription-key=' + luisAPIKey + '&verbose=true';

// Return an object with 2 attributes: Chi for Chinese LUIS and Eng for English LUIS
let luis = {};
luis.chi = new builder.LuisRecognizer(LuisModelUrl_Chi);
luis.eng = new builder.LuisRecognizer(LuisModelUrl_Eng);

module.exports = luis;

app.js

const luis = require("./luis")
builder.IntentDialog({ recognizers: [luis.chi, luis.eng] });

当我在botEmulator中测试时,它似乎首先检查LUIS Chi应用程序,然后转到LUIS Eng应用程序。

我不知道这个识别器用来控制是否跳转到另一个应用程序的标准/阈值是什么。但目前它在某种程度上对我有用。至少在良好的(?)开始时它是不准确的。 :d

无需MS文本翻译API。

顺便说一句,如果我可以在topIntent变量中找到session和LUIS路径,代码看起来会更好。

希望它有所帮助。