我正致力于使用基于文本的自然语言处理自动化应用程序的任务流程。
这类似于聊天应用程序,用户可以在其中键入文本区域。同时python代码解释用户想要的内容并执行相应的操作。
应用程序具有以下命令/操作:
用户可以输入聊天(自然语言)。它就像一般的英语会话,例如:
我可以编写规则驱动器解析器,但它仅限于少数规则。
我可以使用哪种方法或算法来解决此任务? 如何将通用英语映射到命令或操作?
答案 0 :(得分:3)
我认为您的问题与基于规则的系统(Wiki)有关。 您需要在项目核心中使用两个基本组件,如下所示:
1-角色基础: 你的角色列表。
2-推理引擎 根据输入和规则库的相互作用推断信息或采取行动。
spacy
是python方法,我认为它会对你有所帮助。 (More information)。
答案 1 :(得分:3)
我认为最好的解决方案是使用API.ai或wit.ai等外部服务。您可以创建一个免费帐户,然后您可以将某些文本映射到所谓的“意图”。
这些意图定义了系统的主要操作。您还可以定义'实体'例如,它将捕获任务的名称。请看看这些工具。我确定他们可以处理你的用例。
答案 2 :(得分:1)
您可以尝试nltk。这是一个优秀的NLP库,附带一个方便的book来帮助您入门。我认为您可能会发现chapter 8有助于查找句子结构,而chapter 7可用于确定您的用户请求机器人执行的操作。如果你对NLP有更多的兴趣,我会建议你阅读整篇文章,因为大部分内容非常普遍,可以在NLTK之外应用。
答案 3 :(得分:1)
您所描述的是一个普遍的问题,有很多可能的解决方案。您的业务需求,我们不知道,会严重影响正确的方法。
例如,您需要标记自然语言输入。您应该使用基于规则的方法还是机器学习方法?也许两者?让我们考虑一下你的输入字符串:
Can you create a task with name t1 and assign time to it. Also, connect t1 to t2
我们的系统可能会以下列方式对此输入进行标记:
Can you [create a task] with [name] [t1] and [assign] [time] to it. Also, [connect] [t1] to [t2]
括号表示语义信息,完全没有结构。结构是否重要?您是否需要知道connect t1
与文本本身中的t2
相关,或者我们是否可以认为这是因为所有输入都将遵循此结构?
如果输入将始终遵循此结构,并且将始终包含这些类型的语义,那么您可以使用正则表达式并提供预构建方法来解析它。
如果输入是真正的自然语言(即,你正在建立一个siri或alexa竞争对手)那么这将变得非常复杂,并且你不会在SO中获得有用的答案发布这样的。相反,如果你对语言学和计算机科学有足够的熟悉,可以让你系统地解决问题,那么你就可以在你面前找到几千个SO帖子。
答案 4 :(得分:1)
让我们说文字是#34;请为我订一份披萨"或者"我可以从uber"
预订出租车使用像nltk这样的好库并解析这些句子。由于社交英语通常在语法上不正确,您可能需要使用自定义的英语语料库训练您的解析器。接下来,这些是您必须遵循的步骤,以了解用户想要的内容。
在那之后真正的工作开始了,我的方法是创建一个动词图,其中类似的动词彼此接近,不同的动词非常远。 让我们说你有更接近订单的安排,指令,命令,指令,指令等词。因此,如果您的用户在其文本中写入上述动词中的任何一个,您的算法将识别该用户确实意味着暗示订单。您还可以使用该图的边来指定使用动词的上下文。
现在,你必须为这个动词分配动作"命令"基于在原始句子中解析的名词短语。 这只是对该算法的高级解释,它有许多需要认真考虑的问题,其中一些列在下面。
如果您想构建更复杂的模型,您可以为每个词性构建图形,并可以从每个图形中选择适当的单词以形成响应查询的句子。上面提到的图表用于动词词性。
答案 5 :(得分:1)
虽然@whrrgarbl是正确的。看起来你不想训练机器人。 那么,为了处理语言输入变化(词法,语义......),您需要一个可以自定义的预训练机器人(或者可以根据您的需要添加规则)。
最简单的面向业务的解决方案是Amazon Lex。还有一个免费的预览程序。
另一种选择是使用Google Parsey McParseface(预训练的英语解析器,支持40种语言)并将其与聊天框架集成。这是一个link到python repo,作者声称这使得安装和培训过程变得方便。
最后,this提供了各种聊天机器人平台的比较。