您想要创建的内容可以被认为是一个受到严格限制的聊天机器人,除非您不是试图与用户进行一般性对话,而是处理特定的自然语言输入并将其映射到特定的命令或操作。
本质上,您需要一种工具,可以对各种用户输入进行模式匹配,提取或至少识别各种重要的主题或主题元素,然后决定如何处理这些数据。
我不会对自然语言处理进行抽象讨论,而是提出建议。 使用 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 规则。你的应用会有很多这样的规则。这条规则是寻找来自用户的命令来打开和关闭房子里的各种设备。 # 字符表示一行是注释。以下是规则head的细分:
- 它由前缀 u: 组成。这告诉 ChatScript 一个规则,该规则接受 statement 或 question 格式的用户输入。
- 它由匹配模式组成,即括号之间的内容。此匹配模式在句子中的任何位置查找单词 turn。接下来,它会寻找所需的用户操作。方括号告诉 ChatScript 匹配单词 on 或 单词 off。方括号前面的 下划线 告诉 ChatScript 捕获匹配的文本,就像括号在正则表达式中所做的一样。 ~2 标记是范围受限的通配符。它告诉 ChatScript 在词 turn 和名为 ~available_devices 的概念集之间最多允许 2 个插入词。
~available_devices 是一个概念集。它在规则上方定义,包含用户可以打开和关闭的一组已知设备。概念集名称前面的下划线告诉 ChatScript 捕获用户在其输入中指定的设备名称。
如果规则模式匹配当前用户输入,它会“触发”,然后规则的body 会执行。该规则正文的内容相当明显,每行上方的 cmets 应该可以帮助您了解该规则在被触发时的作用。它将从用户输入中捕获的所需操作和所需目标设备保存到变量中。 (ChatScript 变量名前面有一个单或双美元符号。)然后它向操作系统发送 shell 以执行一个名为 devicemanager 的程序,该程序实际上将打开 on 或 关闭所需的设备。
我想指出 ChatScript 的众多功能之一,这些功能使其成为强大的工业级 NLP 工具。如果您查看规则上方,您会看到两个句子,前面有一个由字符 #! 组成的字符串。这些不是 cmets,而是验证句。您可以在 verify 模式下运行 ChatScript。在 verify 模式下,它会在你的脚本中找到所有的验证语句。然后它会将每个验证语句应用到紧随其后的规则。如果规则模式与验证语句不匹配,则会将错误消息写入日志文件。这使得每个验证语句都成为一个很小的、易于实现的单元测试。因此,稍后当您对脚本进行更改时,您可以在 verify 模式下运行 ChatScript 并查看是否破坏了任何内容。