我的问题是:路易斯知道什么是专有名词吗?如果是的话,什么是路易斯的专有名词呢?因此,我如何才能让它在不同的上下文中可靠地识别一个名称,比如说,跨意图的$ContactName?例如,用话语或PhraseList来训练它会有帮助吗?
我正在与LUIS合作,在正确的上下文中创建以联系人的正确名称命名的行。我很难让它一直工作下去。
我试着同时使用话语和短语列表。词组列表似乎不太有效,而话语似乎效果很好。
我的过程是创建一个Book.Meeting意图,一个$Contact实体,并从三个语句开始:
meeting with [john]
meeting with [john smith]
meeting with [john van smith] 然后我训练了这个应用程序并测试了一些输入:
input: output:
Meeting with john meeting with [$Contact]
Meeting with john smith meeting with [$Contact]
Meeting with smith john meeting with [$Contact]
Meeting with john van smith meeting with [$Contact]
Meeting with smith van john meeting with [$Contact]
Meeting with john smith van meeting with [$Contact] van
Meeting with smith john van meeting with [$Contact] 所以我发现,秩序在大多数情况下似乎并不重要,除非单词van这个词似乎不为其字库所知,它不属于已知的专有名词。所以我想看看在这种情况下它会算什么。我还做了一些测试,看看其他单词的输出结果是什么,包括专有名词、形容词和副词:
input: output:
Meeting with blue meeting with [$Contact]
Meeting with blue smith meeting with [$Contact]
Meeting with blue van smith meeting with [$Contact]
Meeting with blue della smith meeting with [$Contact]
Meeting with blue della table meeting with [$Contact] table
Meeting with table della blue meeting with [$Contact] blue
Meeting with blue van table meeting with [$Contact]
Meeting with table van blue meeting with [$Contact]
Meeting with hungry meeting with [$Contact]
Meeting with sad meeting with [$Contact]
Meeting with shut meeting with [$Contact]
Meeting with shut door meeting with [$Contact]
Meeting with shut door now meeting with [$Contact] now
Meeting with shut open door meeting with [$Contact] door 所以我发现,在正确的背景下,LUIS会捡起单词中的任何单词,所以用"john“代替"smith",或者用一个名词"table",一个形容词"blue”,甚至是一个副词,比如"shut",LUIS会把它作为一个联系实体。然而,它似乎最喜欢两个词的名字。此外,有些词的效果不如其他词,所以它似乎更喜欢专有名词,而不是它读的名词(例如,"john“比"van")。另外,如果一个词不存在于它的字库中,比如"blazoops",它就不知道如何处理它。问题是,许多专有名词不会出现在它的字典里。所以我试着训练它认识到它所认为的胡言乱语等同于它所知道的专有名词,只要它在正确的背景下。我扔掉了测试应用程序,重新开始了。我做了一系列的话语,把专有名词的顺序和胡言乱语的顺序按单词的顺序排列,以包括一个人的全名。
Book a meeting with [john]
Book a meeting with [john smith]
Book a meeting with [john aishsds]
Book a meeting with [jskjhd smith]
Book a meeting with [john skjsdkj smith]
Book a meeting with [kjsdjkhsd john smith]
Book a meeting with [ljksjd skjsdk smith]
Book a meeting with [john smith] and [jane doe]
Book a meeting with [john sikhsd] and [jane skdjsd]
Book a meeting with [sdsd smith] and [sdsd doe] 然后我发现,只要是在这种背景下,它就会不断地捡起我扔给它的任何名字。不包括任何在我的话语,它也包括名称与撇号(O‘’Brien)和连字符(史密斯-琼斯)。然而,尝试不同的命令变体,只有这些话语才会引起问题。例如,当我输入:
I'd like to book a meeting with kjhasiuhd sihdh and iojoia shhds它给了我输出:
[I'd like to] book a meeting with [kjhasiuhd sihdh] and [iojoia shhds]所以它在一开始就把“我想要”作为联系人/名字。我可以通过添加这样的话语来修正这个问题,并告诉LUIS,起首词实际上不是$Contact。一句话似乎就足以解决这个问题。
我注意到的另一件事是,它理解关键字“和”分隔两个名称,但并不总是知道完整的两个词或更多的名称是从哪里开始和结束的,如果它不是一个已知的专有名词旁边的关键字。例如,在“与sdsd smith和jane soidjsd会面”中发现的完整的两个单词名称比“与john ssds和asdsd smith会面”更容易被理解。
但现在,在大多数情况下,它是把话语结尾处的任何一串词当作一个名字。所以下一步是设置更多的意图。我设置了一个$datetime意图和一个$Location意图。我接着又说了几句话:
Book a meeting with [hsdsd kjsjs] and [sjhsd aoowj] for [12pm]
Book a meeting with [kjhskjhd sjasd] and [jaskdhsd sjdhkshd] for [12pm] at [the eatery] 有了这些话语,我就可以让它在正确的上下文中识别出任何$Contact名称,并用正确的关键字分隔。它也适用于已知同义词的模式,因此,例如,以下内容也能很好地工作:
organise an appointment with [hsdsd kjsjs] and [sjhsd aoowj] for [9am] 我把这些话导入到我正在开发的一个更大的应用程序的副本中,这个应用程序有更多的意图和实体,以了解LUIS将如何更复杂地解析它。我很高兴地看到,在主应用程序中将这些语句编程到Book.Meeting意图中不仅和在迷你测试应用中的效果一样好,而且还延伸到了其他意图,因此“书籍会议与诸如此类的.”将与“查找诸如此类的拉链”工作,两者的意图和实体被正确地识别。
我希望通过避免大量的话语,而仅仅是编一个PhraseList,使这一切变得更简单。我采用了相同的总体逻辑,并创建了PhraseLists,如:
约翰、简、约翰·史密斯、简·史密斯、约翰·奥布赖恩、简·奥布赖恩、罗伯特、托马斯、威尔逊、威廉斯、霍华德、埃塞尔、琼斯、卡卡什、刘、程、米尔德里德、佛罗伦萨、托斯卡纳、兰开斯特、魏、马里恩、沃尔特斯、海伦、切斯特、里希兰、贾斯汀、约翰斯顿、哈里森、格林伍德、朱莉、丹尼斯、康尼、沙龙、道格拉斯、克雷格、格雷格、丽莎、布莱恩、萨拉、彼得、范施密特、詹姆斯、斯科特、杰克逊、戴维斯、大卫、迈克尔、基思、安德鲁、李、富兰克林·kjhskdhk、kjksdfkhj john、john jhskjdsd、john .施霍伊沃德·史密斯
我希望这能更好地发挥作用,因为这将为路易斯提供更丰富的榜样。然而,给它PhraseList和例子的话语,如在开始没有产生任何一致的结果。因此,据我所知,当涉及到识别实体时,它并没有处理PhraseList中的“同义词”。
综上所述,使用上述的语音识别方法可以很好地实现姓名识别,但仍然不能达到100%的效果。有没有人有类似的问题,并找到了一个很好的,一致的解决办法路易斯识别的名字?无论如何,我希望这能帮助任何经历类似问题的人。
发布于 2018-09-25 12:59:57
使用具有适用意图和关键字的模式作为模式的一部分
示例模式:
用名字预定一个会议..。只要‘用’预定会议‘的用词相同,实体名称就可以占用任何名称。
为意图添加会话式的模式变体。
https://stackoverflow.com/questions/46355829
复制相似问题