我正在Coursera上学习一门名为“自然语言处理”的课程,尽管该课程内容丰富,但我想知道所提供的内容是否符合我的需求。基本上,我现在想将文本版本的Cortana或Siri实施为项目,即用户可以使用自然语言输入计算机命令,然后将它们处理并转换为适当的OS命令。我的问题是
处理语音后,上述应用程序的一般步骤顺序是什么?他们是标记文本然后解析文本,还是有其他方法?

NLP属于哪种应用?有人可以引用我一些好的资源吗?我唯一的疑问是,我现在所遵循的将对我的目标起重要作用吗?

最佳答案

您可以将要创建的内容视为经过仔细限制的聊天机器人,除非您不是要与用户进行一般对话,而是要处理特定的自然语言输入并将其映射到特定的命令或操作。

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

与其对自然语言处理进行抽象讨论,不如提出建议。使用ChatScript。它是一个免费的开放源代码工具,用于创建聊天机器人,该工具最近在Loebner聊天机器人竞赛中排名第一,因为它在过去曾多次这样做:

http://chatscript.sourceforge.net/

该工具是用C ++编写的,但是您无需触摸源代码即可创建NLP应用。只需使用该工具提供的脚本语言即可。尽管最初是为聊天机器人编写的,但它已扩展为对程序员非常友好的工具,可以执行任何类型的NLP应用。

最重要的是,您不会受到工具原理的束缚,也不会受到工具提供的框架的限制。它具有大多数脚本语言的全部功能,因此您不会发现自己在完成应用程序上花费了很多精力,而只是在最后一英里发现了一些破坏性限制,使您的应用失败或至少使其严重瘫痪。

它还包含大量可以极大地启动您的开发工作的本体,并且它的内置预处理器可以完成词性分析,输入一致性以及许多其他任务,这些任务对于编写易于推广的脚本至关重要处理用户输入中的较大差异。它还具有与WordNet同义词集数据库的完整接口。 ChatScript中还有许多其他重要功能,这些功能使NLP开发变得更加容易,此处未列出太多。它可以作为服务器运行在Linux或Windows上,可以使用TCP-IP套接字连接进行访问。

这是一些ChatScript脚本代码的一个小而过于简单的示例:

# 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规则。您的应用程序将具有许多此类规则。该规则正在寻找来自用户的命令,以打开和关闭房屋中的各种设备。 #字符表示一行是注释。以下是该规则的主要内容:


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


如果规则模式与当前用户输入匹配,它将“触发”,然后规则的主体将执行。该规则正文的内容非常明显,每行上方的注释应有助于您理解该规则被触发后的作用。这样可以省去从用户输入到变量的所需动作和所需目标设备。 (ChatScript变量名前面带有一个或两个美元符号。)然后,它将运行到操作系统中以执行名为devicemanager的程序,该程序实际上将打开或关闭所需的设备。

我想指出的是ChatScript的众多功能之一,使其成为强大且具有工业实力的NLP工具。如果您在规则上方看,您将看到两个句子,前面有一个由字符#!组成的字符串。这些不是注释,而是验证语句。您可以在验证模式下运行ChatScript。在验证模式下,它将在脚本中找到所有验证语句。然后,它将紧随其后将每个验证语句应用于规则。如果规则模式与验证语句不匹配,则会将错误消息写入日志文件。这使每个验证语句成为一个很小的,易于实现的单元测试。因此,稍后在对脚本进行更改时,可以在验证模式下运行ChatScript,以查看是否损坏了任何内容。

关于machine-learning - 使用NLP创建用户助手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32770511/

10-12 16:31