首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NLP创建用户助理

使用NLP创建用户助理
EN

Stack Overflow用户
提问于 2015-09-24 20:39:28
回答 1查看 623关注 0票数 1

我正在学习一门名为“自然语言处理”的课程,虽然这门课程内容丰富,但我不知道所提供的内容是否能满足我所寻找的内容。

基本上,我想作为一个项目来实现Cortana或Siri的文本版本,即用户可以输入自然语言的计算机命令,并将它们处理并转换成适当的OS命令。我的问题是

  • 一般情况下,在处理完语音后,上述应用的步骤顺序是什么?他们是标记文本,然后解析它,还是有其他方法?
  • NLP的适用范围是什么?有人能为我引用一些好的资源吗?我唯一的疑问是,我现在所遵循的是,这是否有助于实现我的目标的任何重要部分?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-25 12:12:26

你想要创造的东西可以被认为是一个谨慎约束的聊天机器人,除了你不是试图与用户进行一般性的对话,而是处理特定的自然语言输入,并将它映射到特定的命令或动作。

本质上,您需要一个工具,该工具可以通过提取或至少识别各种重要的主题或主题元素来匹配各种用户输入,然后决定如何处理这些数据。

与其对自然语言处理进行抽象的讨论,不如提出一个建议。Use ChatScript.这是一个免费的开源工具,用于创建聊天机器人,它最近在Loebner聊天机器人竞赛中占据了第一位,就像它在过去几次这样做的那样:

http://chatscript.sourceforge.net/

该工具是用C++编写的,但是您不需要接触源代码就可以创建NLP应用程序;只需使用该工具提供的脚本语言即可。虽然最初是为聊天机器人编写的,但它已经扩展为一个非常友好的程序员工具,可以做任何类型的NLP应用程序。

最重要的是,您是,而不是受工具哲学限制的,也不是工具提供的框架所限制的。它拥有大多数脚本语言的所有功能,所以你不会发现自己为了完成你的应用程序而走了很长的路,但在最后一英里里却发现了一些致命的限制,它击败了你的应用程序,或者至少严重地削弱了它。

它还包括大量的本体,它们可以极大地启动您的开发工作,并且内置的预处理器可以完成语音部分解析、输入一致性和许多其他对编写脚本至关重要的任务,这些任务可以很容易地被概括为处理用户输入中的大量变化。它还具有与WordNet同步集数据库的完整接口。ChatScript中还有许多其他重要的特性,使得NLP开发变得更加容易,这里列出的太多了。它可以作为服务器在、Linux、或上运行,可以使用TCP套接字连接进行访问。

下面是一些ChatScript脚本代码的一个很小且过于简单的例子:

代码语言:javascript
复制
# Define the list of available devices in the user's household.
concept: ~available_devices( green_kitchen_lamp stove radio )

#! Turn on the green kitchen lamp.
#! Turn off that damn radio!
u: ( turn _[ on off ] *~2 _~available_devices )
    # Save off the desired action found in the user's input.  ON or OFF.
    $action = _0

    # Save off the name of the device the user wants to turn on or off.
    $target_device = _1

    # Launch the utility that turns devices on and off.
    ^system( devicemanager $action $target_device )

上面是一个典型的ChatScript规则。你的应用程序会有很多这样的规则。这个规则是寻找来自用户的命令来打开和关闭房屋中的各种设备。#字符表示一行是注释。这是该规则的head的细目

  • 它由前缀u:组成。这告诉ChatScript一条规则,该规则接受语句或问题格式的用户输入。
  • 它由匹配模式组成,它是括号之间的内容。这个匹配模式查找句子中任意位置的单词转折。接下来,查找所需的用户操作。方括号告诉ChatScript与上的单词off匹配。方括号前面的下划线告诉ChatScript捕获匹配的文本,就像正则表达式中的括号一样。~2令牌是一个范围受限的通配符。它告诉ChatScript允许在单词转身和名为~available_devices的概念集之间最多有2个插入词。~available_devices是一个概念集。它是在规则上面定义的,包含了用户可以打开和关闭的一组已知设备。概念集名称前面的下划线告诉ChatScript捕获用户在输入中指定的设备的名称。

如果规则模式与当前用户输入匹配,它将“触发”,然后执行规则的body。这个规则正文的内容是相当明显的,每一行上面的注释将帮助您理解如果触发规则会做什么。它保存了从用户输入到变量中捕获的所需操作和所需目标设备。(ChatScript变量名前面有一个或双美元符号。)然后,它执行一个名为devicemanager的程序,该程序实际上将打开或关闭所需的设备。

我想指出ChatScript的许多特性之一,这些特性使它成为一个强大的工业优势NLP工具。如果您查看以上规则,您将看到两个句子的前缀是一个由字符#!组成的字符串。这些不是评论,而是有效的句子。您可以在验证模式下运行ChatScript。在验证模式下,它将在脚本中找到所有验证语句。然后,它将对紧接它/它们之后的规则应用每个验证语句。如果规则模式与验证语句不匹配,则会将错误消息写入日志文件。这使得每个验证语句都是一个很小,易于实现的单元测试。因此,稍后,当您对脚本进行更改时,您可以在验证模式下运行ChatScript,并查看是否有任何问题发生。

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

https://stackoverflow.com/questions/32770511

复制
相关文章

相似问题

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