使用NLP创建用户助手

我在Coursera上参加了一个名为自然语言处理的课程,虽然课程内容丰富,但我怀疑这些内容是否符合我的需求。

基本上,我现在想作为一个项目来实现一个类似Cortana或Siri的文本版本,即用户可以用自然语言输入命令,计算机会处理并转换成相应的操作系统命令。我的问题是

  • 在处理语音之后,上述应用程序的一般步骤顺序是什么?它们是先标记文本然后解析,还是有其他方法?
  • 这属于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该规则接受用户输入的陈述问题格式。
    • 它由匹配模式组成,即括号之间的内容。该匹配模式在句子中的任何位置寻找单词turn。接下来它寻找用户期望的动作。方括号告诉ChatScript匹配单词on单词off下划线在方括号前告诉ChatScript捕获匹配的文本,就像正则表达式中的括号一样。~2标记是一个范围受限的通配符。它告诉ChatScript在单词turn和名为~available_devices的概念集之间允许最多2个干扰词。~available_devices是一个概念集。它在规则上方定义,包含用户可以打开或关闭的已知设备集。概念集名称前的下划线告诉ChatScript捕获用户在输入中指定的设备名称。

    如果规则模式与当前用户输入匹配,它就会“触发”,然后规则的主体执行。这条规则主体的内容相当明显,每行上方的注释应该能帮助你理解如果触发,规则会做什么。它将用户输入中捕获的期望动作和目标设备保存到变量中。(ChatScript变量名前有一个或两个美元符号。)然后它调用操作系统执行一个名为devicemanager的程序,该程序将实际打开或关闭所需的设备。

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

    Related Posts

    L1-L2正则化的不同系数

    我想对网络的权重同时应用L1和L2正则化。然而,我找不…

    使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

    我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

    f1_score metric in lightgbm

    我想使用自定义指标f1_score来训练一个lgb模型…

    通过相关系数矩阵进行特征选择

    我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

    可以将机器学习库用于流式输入和输出吗?

    已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

    在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

    我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注