NLG - 使用simplenlg创建文本描述

时间:2017-05-22 17:05:25

标签: java nlg simplenlg

我正在尝试在NLG的帮助下生成产品说明。例如,如果我指定产品的属性(例如移动电话),例如 OS RAM 处理器显示电池等,它应该输出一个可读的手机描述。 我看到有一些付费服务(Quill,Wordsmith等)也是如此。 然后我遇到了NLG的开源Java API - simplenlg。我看到如何通过指定句子短语和特征(例如时态,询问等)来创建句子,但是没有看到从文本创建描述的选项。

有人知道如何使用simplenlg创建文字说明吗?

是否有其他工具/框架/ API可用于完成此任务(不限于Java)?

1 个答案:

答案 0 :(得分:2)

SimpleNLG主要是Surface Realizer。它需要格式良好的输入,但可以执行诸如更改句子时态之类的任务。可以在上面的链接中找到实现者可以执行的任务类型的说明。

生成与您描述的句子类似的句子需要额外的组件来处理文档规划和微缩图。这些组件之间的确切界限是模糊的,但从广义上讲,您将在文档计划中定义您想要说的内容,然后让微型工作人员执行任务,例如引用表达生成(选择是否说'它'而不是'手机' ')和聚合,这是句子的合并。 SimpleNLG对聚合有一些支持。

值得注意的是,这个3阶段过程并不是执行NLG的唯一方法,它只是一个常见的过程。

我不知道从随机域中获取一些信息并生成可读且有意义的文本。在您的手机示例中,将描述链接在一起并形成如下内容将是微不足道的:

  

iPhone 7拥有iOS11,2GB内存,1960 mA·h锂离子电池和32GB型号零售价649美元。

但这只是简单的字符串连接或数据插值。它没有考虑细微差别,就像是否更好地说:

  

iPhone 7 运行 iOS11, 2GB内存,供电   通过 1960 mA·h锂离子电池。 32GB型号的零售价为649美元。

在第二个例子中,我调整了动词(因此也就是名词短语),使用了'it'的引用表达式并将我们的长句分成两部分(由于分裂而进行了一些进一步的更改)。进行这些更改需要知道(以及因此计算规则)单词及其在域内的使用。它很快变得非常重要。

如果您的要求与手机的5或6条信息一样简单,那么在没有NLG软件的情况下,您可以做得很好,只需创建某种模板并确保插入时所有数据都有意义。然而,一旦你超越手机,描述说汽车,你需要再次为新域做这一切。

值得一看Ehud Reiter's blog(SimpleNLG的最初作者)。还有一些论文,如Albert Gatt(自然艺术现状调查) 语言生成:核心任务,应用程序 虽然后者有点密集,如果你只涉及一点点编程,但它确实会说明NLG是什么,它能做什么以及它目前的局限是什么。