【问题标题】:NLP general English to actionNLP 通用英语到行动
【发布时间】:2018-01-13 11:33:54
【问题描述】:

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

它类似于聊天应用程序,用户可以在文本区域中键入内容。同时 python 代码解释用户想要什么并执行相应的操作。

应用程序具有以下命令/操作:

  1. 创建任务
  2. 将名称命名为 t1
  3. 为任务添加时间
  4. 将 t1 连接到 t2

用户可以输入聊天(自然语言)。这就像一般的英语对话,例如:

  1. 您能否创建一个名为 t1 的任务并为其分配时间。另外,将 t1 连接到 t2

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

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

【问题讨论】:

  • 这基本上是我的 MS 研究......真的太宽泛了,特别是如果你正在寻找“示例代码”。你研究过哪些方法?您需要确定:您对用户输入格式有多严格?用户是否需要说魔术词(“创建任务”),或者您是否要允许任何事情(例如“哎呀,再给最后一个 5 分钟”或“t2 应该从 t1 链接”)?你会允许用户反馈来训练你的机器人吗?实时?你有训练数据集吗?所有这些都会影响您想要采取的方法。

标签: python machine-learning nlp deep-learning nltk


【解决方案1】:

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

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

【讨论】:

  • 实际上我正在尝试自己构建解决方案。没有钱购买许可证。希望一些 Python 库可以帮助我
  • 上述两个工具即使用于商业用途也是完全免费的。
【解决方案2】:

我认为您的问题与基于规则的系统 (Wiki) 有关。 您需要像这样在项目核心中包含两个基本组件:

1- 角色基础: 你的角色列表。

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

spacy 是 python 方法,我认为它会对您有所帮助。 (More information)。

【讨论】:

  • 你能再举一些角色库的例子吗?我还想根据用户输入随着时间的推移改进规则或语料库数据。
  • @Sumeet 角色库是知识库。有关角色库的更多示例,请参阅第 3.4 节 [本文] (dbs.uni-leipzig.de/file/cikm11-peukert-p2421.pdf)。
【解决方案3】:

您可能想试试nltk。这是一个出色的 NLP 库,并带有方便的 book 以帮助您入门。我想你可能会发现chapter 8 有助于查找句子结构,chapter 7 有助于弄清楚你的用户要求机器人做什么。如果您对 NLP 感兴趣,我建议您阅读整本书,因为其中大部分内容非常笼统,可以在 NLTK 之外应用。

【讨论】:

    【解决方案4】:

    您所描述的是一个普遍的问题,有很多可能的解决方案。您的业​​务需求(我们不知道)将严重影响正确的方法。

    例如,您需要对自然语言输入进行标记。您应该使用基于规则的方法还是机器学习方法?也许两者兼而有之?让我们考虑一下您的输入字符串:

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

    【讨论】:

      【解决方案5】:

      假设文本是“请为我点一份披萨”或“我可以从优步预订出租车”

      使用像 nltk 这样的好的库并解析这些句子。由于社交英语通常在语法上不正确,因此您可能必须使用自定义的破英语语料库来训练您的解析器。接下来,您必须遵循这些步骤才能了解用户想要什么。

      1. 找出段落中的句号,记住缩写,术语,如 ...., ???等
      2. 接下来查找单个句子中的所有动词和名词短语可以通过不同的库通过POS(词性标注)来完成。

      真正的工作开始之后,我的方法是创建一个动词图,其中相似的动词彼此接近,不同的动词相距甚远。 假设您有诸如安排、指令、命令、指令、指示之类的词,它们更接近于顺序。因此,如果您的用户在其文本中写下上述任何一个动词,您的算法将识别出该用户的真正意思是暗示顺序。您还可以使用该图的边来指定使用动词的上下文。

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

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

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

      【讨论】:

        【解决方案6】:

        虽然,@whrrgarbl 是对的。似乎您不想训练机器人。 因此,要处理语言输入变化(词汇、语义......),您需要一个可以自定义的预训练机器人(或者可能只是根据您的需要添加规则)。

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-30
          • 2014-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-05
          • 1970-01-01
          • 2014-09-07
          相关资源
          最近更新 更多