3

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

4

1 回答 1

3

这是一个相当广泛的话题,但由于我对这个领域的研究很陌生,让我分享一下我学到的东西。

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

我正在使用这个 python 包装器连接到斯坦福解析器: https ://github.com/dasmith/stanford-corenlp-python

通常,第二步是将每个单词映射到一个“意义”,即所谓的词义消歧 (WSD)。

一旦您了解了每个单词的含义以及它们之间的关系,您应该能够理解句子并触发所需的动作。

没有开放和免费的系统能够为通用句子开箱即用地完成所有这些工作。这对于口语来说尤其困难。

例如,像斯坦福解析器这样的语法解析器通常会提供针对报纸文章文本类型训练的语言模型,这往往与口语有很大不同。您很可能希望训练一种新的语言模型,将您希望在系统中接收的句子类型添加到训练“树库”中。(Stanford Parser 提供了这样的模型训练器应用程序)。

不幸的是,没有很好的通用软件库来进行词义消歧 (WSD)。主要原因是“感官”一词还没有实用的参考。该领域事实上的标准仍然是 WordNet,但显然即使是人类也经常在单词和“同义词集”之间的映射上存在分歧。换句话说,WordNet 含义过于细化,无法提供可靠的映射。

很多时候,您会想要建立自己的含义数据库(通常以树结构),为您的应用程序创建尽可能粗粒度的数据库。有许多方法可以将单词映射到这种粗粒度的含义,其中一种最简单但仍然非常有效的方法是古老的朴素贝叶斯分类器。另一种我自己还没有尝试过的方法是使用关于“词框”的信息(即某个词的某种含义会与它周围的词有某种关系)。

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

于 2012-10-26T19:51:38.773 回答