2017-08-05 32 views
-1

我正在使用基于文本的自然语言处理自动化应用程序的任务流程。NLP通用英语对齐

这就像聊天应用程序,用户可以在文本区域输入。同时,python代码解释用户需要什么,并执行相应的操作。

应用具有命令/操作,如:

  1. 创建任务
  2. 给出名称为T1
  3. 添加任务的时间
  4. 连接T1到T2

用户可以键入聊天(自然语言)。例如:

  1. 您可以创建名称为t1的任务并为其分配时间。此外,连接t1到t2

我可以编写一个规则驱动器解析器,但它仅限于少数规则。

我可以使用哪种方法或算法来解决此任务? 如何将普通英语映射为命令或操作?

+0

这实际上是我的MS研究...真的太广泛了,特别是如果你正在寻找“示例代码”。你研究过什么方法?您需要确定:您对用户输入格式的要求有多严格?用户是否需要说出魔法字(“创建任务”),或者是否允许任何内容(例如“oops,给最后一个5分钟”或“t2应该从t1链接”)?你会允许用户反馈来训练你的机器人吗?实时?你有一套训练数据吗?所有这些都会影响你想采取的方法。 – whrrgarbl

回答

2

我认为最好的解决方案是使用外部服务,如API.aiwit.ai。您可以创建一个免费账户,然后您可以将某些文本映射到所谓的“意图”。

这些意图定义了系统的主要操作。您还可以定义将捕获任务名称的“实体”。请看看这些工具。我相信他们可以处理你的用例。

+0

其实我试图自己构建解决方案。没有钱购买许可证。希望一些Python库可以帮助我 – Sumeet

+2

即使是商业用途,上述两种工具都是完全免费的。 – Stergios

2

我认为你的问题涉及到基于规则的系统Wiki)。 你需要这样的项目的核心两个基本组成部分:

1-作用的基础:你的角色 名单。

2-推理引擎: 根据输入和规则库的相互作用推断信息或采取行动。

spacy是python的方法,我认为它会帮助你。 (More information)。

+0

你能举一些角色基地的例子吗?另外,我希望根据用户输入随时间改进规则或语料库数据。 – Sumeet

+1

@Sumeet角色基础是知识库。有关角色库的更多示例,请参见第3.4节[本文](https://dbs.uni-leipzig.de/file/cikm11-peukert-p2421.pdf)。 –

1

您可能想试试nltk。这是一个非常好的NLP图书馆,并且附有一个方便的book以帮助您入门。我认为你可能会发现chapter 8有助于发现句子结构,而chapter 7对于弄清楚你的用户请求机器人做什么很有用。如果你对NLP有更多的兴趣,我建议你阅读整篇文章,因为它大部分内容相当一般,可以在NLTK之外应用。

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帖子。

1

比方说文字“请订购比萨饼我”或“我可以有一个出租车预订从尤伯杯”

使用像NLTK一个好的图书馆和分析这些句子。由于社交英语通常在语法上不正确,因此您可能需要使用自定义的破碎的英语语料库来训练解析器。接下来,这些是您必须遵循的步骤,以了解用户想要的内容。

  1. 找出段落中的句号,牢记缩写词,像......这样的语言。等等。
  2. 接下来找到所有的动词和名词短语在单个句子中可以通过不同的图书馆POS(词性标注部分)完成。

之后,真正的工作开始了,我的方法是创建一个动词图,其中类似的动词彼此接近,不相似的动词非常遥远。 可以说,你有像排列,指令,命令,指令,听写这些更接近秩序的词。所以,如果你的用户在他们的文本中写上述任何一个动词,你的算法就会识别出这个用户真正意味着订购。您还可以使用该图的边来指定使用该动词的上下文。

现在,您必须根据在原始句子中解析的名词短语将动作分配给该动词“顺序”。 这只是对这种算法的高级解释,它有很多需要认真考虑的问题,其中一些列在下面。

  1. 在很短的时间内找到root_verb和给定动词之间的相似度索引。
  2. 在图表中没有条目的新单词。一种可能的方法是通过搜索谷歌这个词来更新你的图表,从它被提及的页面找到一个上下文,并在图表中为这个新词找到一个合适的位置。
  3. 拼写错误的词与适当的动词或名词的相似指数。

如果你想建立一个更复杂的模型,你可以为每个词类构建图形,并且可以从每个图形中选择合适的单词来形成句子以响应这些查询。上面提到的图表适用于动词词性。

1

虽然,@whrrgarbl是正确的。看起来你不想训练机器人。 那么,为了处理语言输入变化(词法,语义..),你需要一个预先训练好的机器人,你可以自定义(或者可能只是根据你的需要添加规则)。

最简单的商业导向解决方案是Amazon Lex。还有一个免费的预览程序。

另一种选择是使用Google的Parsey McParseface(一种预先训练的英语解析器,支持40种语言)并将其与聊天框架集成。这是一个link python回购,在那里作者声称安装和培训过程方便。

最后,this提供了各种聊天机器人平台的比较。