3

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

有谁知道如何使用 simplenlg 从单词创建文本描述?

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

4

1 回答 1

8

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

像你描述的那样生成句子需要额外的组件来处理文档规划和微规划。这些组件之间的确切界限是模糊的,但从广义上讲,您可以在文档计划中定义您要说的内容,然后让微计划器执行诸如引用表达生成之类的任务(选择是否说“它”而不是“手机”) ') 和聚合,即句子的合并。SimpleNLG 对聚合有一些支持。

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

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

iPhone 7 配备 iOS11、2GB RAM、1960 mA·h 锂离子电池,32GB 型号零售价为 649 美元。

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

iPhone 7运行iOS11,具有2GB 的 RAM,并由1960 mA·h 锂离子电池供电。 32GB 型号的零售价为 649 美元

在第二个例子中,我调整了动词(因此也调整了名词短语),使用了“it”的指称表达,并将我们的长句分成两部分(由于拆分,还有一些进一步的变化)。进行这些更改需要了解单词及其在域中的用法(因此需要计算规则)。它很快变得不平凡。

如果您的要求只是关于一部手机的 5 或 6 条信息,您可能不用 NLG 软件就可以做得很好,只需创建某种模板并确保您的所有数据在插入时都有意义。然而,一旦你超越了手机,比如描述汽车,你就需要为新领域再次做所有这些工作。

看看Ehud Reiter 的博客(SimpleNLG 的最初作者)是值得的。还有一些论文,例如 Albert Gatt(自然语言生成技术现状调查:核心任务、应用程序和评估),尽管如果您只是涉足一点编程,后者有点密集,但它确实给出了一个说明 NLG 是什么,它可以做什么以及它目前的局限性是什么。

于 2017-10-22T09:19:17.520 回答