我目前正在使用MS LUIS for Chatbot。
我们国家通常使用英语和汉语两种语言进行对话和聊天。
但是,在LUIS我只能定义一种文化。
因此,当我的文化设置为英语时,当我输入中文文本时,置信度非常低(例如英语 - 0.88,中文 - 0.1)。反过来也是一样。
即使我使用像JieBa或THULAC这样的库对中文文本进行了标记,情况也是如此。
因此,当我进行测试时,通常很容易陷入无关的意图。
我想让LUIS轻松识别英文和中文。有什么方法可以解决这个问题吗?
非常感谢你的帮助。
答案 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应用程序。
如何使用它?
答案 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路径,代码看起来会更好。
希望它有所帮助。