首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >口语对话系统的自然语言理解

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

Stack Overflow用户
提问于 2012-10-26 03:22:52
回答 1查看 1.1K关注 0票数 3

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

EN

回答 1

Stack Overflow用户

发布于 2012-10-27 03:51:39

这是一个相当广泛的话题,但由于我对这一领域的调查还很新鲜,让我分享一下我所学到的东西。

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

我正在使用以下python包装器与Stanford解析器进行交互:https://github.com/dasmith/stanford-corenlp-python

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

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

没有一个开放和免费的系统能够为通用句子做所有这些事情。这对于口语来说尤其困难。

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

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13075731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档