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

标签 nlp speech

<分区>

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

最佳答案

这是一个相当宽泛的话题,但由于我刚接触该领域的调查,所以让我分享一下我学到的东西。

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

我正在使用这个 python 包装器连接到 Stanford Parser: https://github.com/dasmith/stanford-corenlp-python

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

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

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

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

不幸的是,没有好的通用软件库来进行词义消歧 (WSD)。主要原因是“感官”一词尚无实际引用。该领域的事实标准仍然是 WordNet,但显然即使是人类也经常不同意单词和“synset”之间的映射。换句话说,WordNet 的含义粒度太细,无法提供可靠的映射。

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

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

关于nlp - 口语对话系统的自然语言理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075731/

相关文章:

python - 从单词列表中提取更多相似的单词

c# - 仅识别两个命令时如何使 MS speech API 更准确

audio - 改变音调的算法

speech-recognition - 语音制作流程

java - 找到一种有效的方法将不同的语言库集成到一个项目中,使用 Python 作为 "glue"

java - MetaMap java.lang.OutOfMemoryError : Java heap space

prolog - 如何在序言中为 MT 进行树转移

machine-learning - 用于字符串反转的 Seq2Seq

matlab - 使用时间值更改波形图的颜色

ios - 无法将 iSpeech 导入我的 iOS Swift 项目