使用 NLP 创建用户助手
Create a user assistant using NLP
我正在学习 Coursera 上名为自然语言处理的课程,虽然该课程内容丰富,但我想知道所提供的内容是否符合我的要求。
基本上我想要实现 Cortana 的文本版本,或 Siri 现在作为一个项目,即用户可以用自然语言为计算机输入命令,它们将被处理并翻译成适当的 OS 命令。我的问题是
在处理语音后,上述应用程序的一般步骤顺序是什么?他们是标记文本然后解析它,还是有任何其他方法?
属于NLP的哪个应用?有人可以为我引用一些好的资源吗?我唯一怀疑的是,我现在所遵循的,是否对我的目标有重要的作用?
你想要创建的可以被认为是一个仔细限制的聊天机器人,除了你不是试图与用户进行一般对话,而是处理特定的自然语言输入并将其映射到特定的命令或动作。
从本质上讲,您需要一个能够对各种用户输入进行模式匹配的工具,提取或至少识别各种重要主题或主题元素,然后决定如何处理这些数据。
我不打算对自然语言处理进行抽象讨论,而是提出一个建议。 使用 ChatScript。 这是一个用于创建聊天机器人的免费开源工具,最近在 Loebner 聊天机器人竞赛中获得第一名,过去曾多次获得冠军:
http://chatscript.sourceforge.net/
该工具是用 C++ 编写的,但您无需接触源代码即可创建 NLP 应用程序;只需使用该工具提供的脚本语言即可。虽然最初是为聊天机器人编写的,但它已经扩展为一个非常 程序员友好 [=77=] 的工具,用于执行任何类型的 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 规则。您的应用程序将有许多这样的规则。此规则正在寻找来自用户的命令以打开和关闭房屋中的各种设备。 # 字符表示一行是注释。这是规则的 head:
的细分
- 由前缀u:组成。这告诉 ChatScript 一个规则,该规则接受 statement 或 question 格式的用户输入。
- 由匹配模式组成,也就是括号之间的内容。此匹配模式在句子中的任何位置查找单词 turn。接下来它会查找所需的用户操作。方括号告诉 ChatScript 匹配单词 on or 单词 off。方括号前面的 下划线 告诉 ChatScript 捕获 匹配的文本,就像括号在正则表达式中的作用一样。 ~2 标记是一个 范围受限通配符 。它告诉 ChatScript 在 turn 和名为 ~available_devices 的概念集之间允许最多 2 个中间词。
~available_devices是一个概念集。它在规则之上定义,包含用户可以打开和关闭的一组已知设备。概念集名称前面的下划线告诉 ChatScript 捕获用户在其输入中指定的设备名称。
如果规则模式匹配当前用户输入,它"fires"然后规则的正文执行。这条规则主体的内容相当明显,每行上方的注释应该可以帮助您理解这条规则在被触发时会做什么。它保存了所需的操作和从用户输入到变量中捕获的所需目标设备。 (ChatScript 变量名称前面有一个或两个美元符号。)然后它向操作系统发送 shell 以执行名为 devicemanager 的程序,该程序实际上将 on 或 关闭 所需的设备。
我想指出 ChatScript 的众多功能之一,这些功能使其成为强大且具有工业实力的 NLP 工具。如果您查看规则上方,您将看到两个句子,其前缀为由字符 #! 组成的字符串。这些 不是 评论,而是 验证语句 。您可以在 验证 模式下 运行 ChatScript。在 verify 模式下,它会在您的脚本中找到所有 validation sentences。然后它将应用每个验证语句到紧跟在it/them之后的规则。如果规则模式 不匹配 验证语句,则会将错误消息写入日志文件。这使得每个验证语句都变得很小,易于实现单元测试。因此,稍后当您对脚本进行更改时,您可以 运行 ChatScript 在 验证 模式下查看是否有任何损坏。
我正在学习 Coursera 上名为自然语言处理的课程,虽然该课程内容丰富,但我想知道所提供的内容是否符合我的要求。
基本上我想要实现 Cortana 的文本版本,或 Siri 现在作为一个项目,即用户可以用自然语言为计算机输入命令,它们将被处理并翻译成适当的 OS 命令。我的问题是
你想要创建的可以被认为是一个仔细限制的聊天机器人,除了你不是试图与用户进行一般对话,而是处理特定的自然语言输入并将其映射到特定的命令或动作。
从本质上讲,您需要一个能够对各种用户输入进行模式匹配的工具,提取或至少识别各种重要主题或主题元素,然后决定如何处理这些数据。
我不打算对自然语言处理进行抽象讨论,而是提出一个建议。 使用 ChatScript。 这是一个用于创建聊天机器人的免费开源工具,最近在 Loebner 聊天机器人竞赛中获得第一名,过去曾多次获得冠军:
http://chatscript.sourceforge.net/
该工具是用 C++ 编写的,但您无需接触源代码即可创建 NLP 应用程序;只需使用该工具提供的脚本语言即可。虽然最初是为聊天机器人编写的,但它已经扩展为一个非常 程序员友好 [=77=] 的工具,用于执行任何类型的 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 规则。您的应用程序将有许多这样的规则。此规则正在寻找来自用户的命令以打开和关闭房屋中的各种设备。 # 字符表示一行是注释。这是规则的 head:
的细分- 由前缀u:组成。这告诉 ChatScript 一个规则,该规则接受 statement 或 question 格式的用户输入。
- 由匹配模式组成,也就是括号之间的内容。此匹配模式在句子中的任何位置查找单词 turn。接下来它会查找所需的用户操作。方括号告诉 ChatScript 匹配单词 on or 单词 off。方括号前面的 下划线 告诉 ChatScript 捕获 匹配的文本,就像括号在正则表达式中的作用一样。 ~2 标记是一个 范围受限通配符 。它告诉 ChatScript 在 turn 和名为 ~available_devices 的概念集之间允许最多 2 个中间词。 ~available_devices是一个概念集。它在规则之上定义,包含用户可以打开和关闭的一组已知设备。概念集名称前面的下划线告诉 ChatScript 捕获用户在其输入中指定的设备名称。
如果规则模式匹配当前用户输入,它"fires"然后规则的正文执行。这条规则主体的内容相当明显,每行上方的注释应该可以帮助您理解这条规则在被触发时会做什么。它保存了所需的操作和从用户输入到变量中捕获的所需目标设备。 (ChatScript 变量名称前面有一个或两个美元符号。)然后它向操作系统发送 shell 以执行名为 devicemanager 的程序,该程序实际上将 on 或 关闭 所需的设备。
我想指出 ChatScript 的众多功能之一,这些功能使其成为强大且具有工业实力的 NLP 工具。如果您查看规则上方,您将看到两个句子,其前缀为由字符 #! 组成的字符串。这些 不是 评论,而是 验证语句 。您可以在 验证 模式下 运行 ChatScript。在 verify 模式下,它会在您的脚本中找到所有 validation sentences。然后它将应用每个验证语句到紧跟在it/them之后的规则。如果规则模式 不匹配 验证语句,则会将错误消息写入日志文件。这使得每个验证语句都变得很小,易于实现单元测试。因此,稍后当您对脚本进行更改时,您可以 运行 ChatScript 在 验证 模式下查看是否有任何损坏。