口语对话系统的自然语言理解



我希望将基于任务的口语对话框系统作为我的项目的一部分。我发现很难为系统建立自然语言理解(NLU)单元。这是系统"理解"用户单词(话语)以将语音映射到特定动作的部分。这是一个复杂的过程,但是如果有人在构建口语对话系统方面有任何实践经验,那么关于如何开始进行此操作的任何想法将不胜感激。谢谢!

这是一个广泛的话题,但是由于我在这个领域进行了调查,所以让我分享我学到的东西。

通常,第一步是解析句子的语法结构(特别是单词之间的依赖性)。这将为您提供这样的输出:http://nlp.stanford.edu/software/lex-parser.shtml#sample

我正在使用此Python包装纸与斯坦福(Stanford Parser)接口:https://github.com/dasmith/stanford-corenlp-python

通常,第二步是将每个单词映射到一个" siense",执行所谓的单词态度歧义(WSD)。

一旦知道每个单词的感觉及其之间的关系,您就应该能够理解句子并触发所需的动作。

没有打开和免费的系统能够以通用句子的方式完成所有操作。这对于口语特别困难。

例如,像斯坦福(Stanford)解析器这样的语法解析器通常提供对报纸文章文本类型培训的语言模型,这往往与口语完全不同。您很可能需要培训一种新的语言模型,并增加了您期望在系统中收到的句子类型的培训。(Stanford Parser提供了这种模型培训师的应用。

不幸的是,没有良好的通用软件库可以使单词态度歧义(WSD)。主要原因是尚无对"感官"一词的实际参考。该领域的事实上的标准仍然是WordNet,但显然,即使人类在单词和"同步"之间的映射中通常不同意。换句话说,WordNet的含义太细粒了,无法提供可靠的映射。

通常,您需要建立自己的含义数据库(通常在树木中构成),从而使其与应用程序相同。有许多方法可以将单词映射到这种粗粒的含义,这是最简单但仍然非常有效的方法之一,是旧的天真贝叶斯分类器。我尚未尝试过的另一种方法是使用有关"单词帧"的信息(即某个单词的某些含义将与周围的单词具有某些关系)。

无论如何,现实是虽然是一个开放的问题。最初,您应该专注于针对特定子域的解决方案。