【问题标题】:Natural Language Processing for Smart Homes智能家居的自然语言处理
【发布时间】:2013-09-09 21:35:01
【问题描述】:

我正在为我的学士学位编写一个智能家居软件,它只会模拟实际的房子,但我被困在项目的 NLP 部分。这个想法是让客户端监听语音输入(已经完成),将其转换为文本(完成)并将其发送到服务器,由服务器完成所有繁重的工作/决策。

所以我所有的输入都会很短(比如“请打开门廊灯”)。基于此,我想决定对哪个对象采取行动,以及如何采取行动。所以我想出了一些事情要做,以便写一些有效率的东西。

  1. 去掉不必要的词(在前面的例子中,“please”和“the”是不会改变需要做的事情的意思的词;但是如果我说“关闭my 灯”,“我的”确实有相当重要的含义)。
  2. 处理同义词(“打开灯”应该和“启用灯”一样——我知道这是一个愚蠢的例子)。我猜唯一的选择是拥有某种字典(可能是 XML),并且只为房子中的一个特定对象提供一个可能的单词列表。
  3. 检测动词和主语。 “打开”是动词,“灯”是主语。我需要一种很好的方法来检测这一点。
  4. 一般实施。这些东西通常在算法方面是如何开发的?我只在 Smart Homes 中找到了一篇关于 NLP 的文章,内容非常模糊(而且英语很差)。欢迎任何链接。

我希望这个问题足够独特(我已经看到关于 SO 的 NLP 问题,没有一个真正有帮助),它不会被关闭。

【问题讨论】:

  • 你需要在 NLP 位上花费多少时间?使用开源sphinx 等已经可用于语音识别的工具可能是有意义的。看看这些two questions 的命令(假设您已经完成了语音到文本的识别)。 pattern.en 可能特别有用。另外 - 我不清楚你的第四点是什么问题。
  • @amp 我还有大约 1 年的时间,我不想使用现有的工具,因为我的项目没有我需要获得高分的复杂部分 :) 我我宁愿自己写点东西,即使我要花几个月的时间。

标签: algorithm nlp


【解决方案1】:

如果您没有太多时间花在 NLP 问题上,您可以使用 Wit API (http://wit.ai) 将自然语言句子映射到 JSON:

它基于机器学习,因此您需要提供句子示例 + JSON 输出以根据您的需要进行配置。它应该比基于语法的方法更健壮,尤其是因为语音转语音引擎可能会犯错误而破坏您的语法(但机器学习模块仍然可以获取句子的含义)。

【讨论】:

  • 正是我想要的,但是我不能使用外部服务,我想创建那个服务:) 你有什么建议吗?
【解决方案2】:

我绝不是 NLP 的先驱(虽然我喜欢它),但让我试试这个。对于您的项目,我建议您通过Stanford Parser

  1. 根据您的问题定义,我猜您不需要动词和名词以外的任何东西。 SP 生成 POS(词性标签),你可以用它来修剪你不需要的词。

  2. 为此,我想不出比您现在想到的更好的选择。

  3. 为此,您可以再次使用 SP 中的语法依赖结构,我非常确定它足以解决这个问题。

  4. 这是您的研究部分所在。我想您可以使用 GD 和 POS 标签找到足够的模式来为您的问题提出算法。我几乎不怀疑任何算法都足以有效地处理每组输入句子(结构化+非结构化),但准确率超过 85% 的算法对您来说应该足够了。

【讨论】:

    【解决方案3】:

    首先,我将构建一个所有可能命令的列表(不是所有可能的命令方式,只是实际功能本身:“打开厨房灯”和“打开厨房灯”是相同的命令)基于智能房屋可用的实际功能。我假设其中有不超过数百个的离散数量。为每个人分配某种标识符代码。

    然后你的工作就是映射以下输入:

    • 一句英文文本
    • 扬声器位置
    • 一天中的时间,一周中的一天
    • 任何其他输入数据

    到每个命令的置信水平(0.0 到 1.0)的输出。

    如果置信度超过某个可调阈值(比如超过 0.70),系统将执行最佳匹配命令。

    从这里它变成了一个机器学习应用程序。有许多不同的方法(此外,方法可以通过让它们根据输入的特征进行竞争来组合在一起)。

    首先我会通过NLP book from Jurafsky/Manning from Stanford 工作。这是对当前 NLP 算法的一个很好的调查。

    从那里您将获得一些关于如何机器学习映射的想法。更重要的是,如何将自然语言分解为机器学习的数学结构。

    一旦对文本进行语义分析,首先尝试的最简单的机器学习算法将是监督算法。要生成具有正常 GUI 的训练数据,请说出您的命令,然后手动按相应的命令。这形成了一个单一的监督训练案例。做一些大量的这些。留出一些用于测试。这也是非技术性工作,因此其他人可以提供帮助。然后,您可以将它们用作 ML 算法的训练集。

    【讨论】:

    • 好点!不过,浏览 Jurafsky/Manning + 语料库创建 + 培训本身就是一个完整的项目! :P 这是一种有原则的方法,我很欣赏,但也许不是最直接的?
    • @amp:我认为这是一种经典的结构化方法,您尝试手动编写代码,使用手动设计的对象模型对输入文本进行语义分析,将名词映射到房屋中的对象,将动词映射到动作,等等,等等——与“统计”机器学习方法相比,实施和给出更差的结果需要更长的时间。我不确定这是否是您所说的最直接的方式?
    • 我同意手动执行此操作需要工作,尽管我怀疑它的性能会更糟,因为正如您所说,案例数量有限! (而且可能没有那么多数据可以训练。)无论如何,这不是我的主要观点——我的意思是已经有可以使用的 ML/NLP 库,而不是尝试构建和在阅读 Jurafsky/Manning 之后训练自己! (虽然如果您真的进入 NLP,而不仅仅是将它用作项目中的一个组件,那么阅读它会很棒。)
    • @amp:当然,系统的哪些部分是您自己编写的,哪些部分是您现成的,我并没有真正谈论过。我建议的是整体系统架构,如果您可以使用第三方库构建它,那就这样吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2016-04-19
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多