我正试图在NLG的帮助下生成产品描述。例如,如果我指定产品(例如移动电话)的属性,例如它的操作系统、RAM、处理器、显示器、电池等,它应该输出一个可读的移动电话描述。我看到了一些付费服务(Quill,Wordsmith等)做同样的事。然后,我看到了NLG - 单纯性的开源Java。我知道如何通过指定句子短语和特征(如时态、询问等)来创建句子,但我看不到从文本中创建描述的选项。
有没有人知道如何用简单的语言来创建文字描述?
是否有其他工具/框架/API可用于完成此任务(不限于Java)?
发布于 2017-10-22 09:19:17
SimpleNLG主要是一个表面写真器。它需要格式良好的输入,但随后可以执行任务,如更改句子的时态。在上面的链接中可以找到对现实程序可以执行的任务类型的解释。
生成像您描述的那些句子需要额外的组件来处理文档规划和微观规划。这些组件之间的确切界限是模糊的,但广义地说,这将让您在文档计划中定义您想要说的内容,然后让微计划者执行任务,例如参考表示生成(选择是否说“it”而不是“移动电话”)和聚合,这是句子的合并。SimpleNLG对聚合有一定的支持。
也值得注意的是,这三个阶段的过程不是唯一的方式来执行NLG,它只是一个常见的方法。
没有神奇的解决方案,我知道,从一个随机域获取一些信息,并产生可读的和有意义的文本。在您的手机示例中,将描述链接在一起并形成如下内容是非常简单的:
iPhone 7有iOS11,2GB内存,1960 mA·h锂离子电池,32 2GB的零售价为649美元。
但这只是简单的字符串连接或从您的数据内插。它没有解释细微差别的问题,例如是否最好说:
iPhone 7运行 iOS11,有 2GB内存,由1960年mA·h锂离子电池供电。32 It的It零售价为649美元。
在第二个例子中,我调整了动词(因此也是名词短语),使用了“it”的指代表达式,并将我们的长句分成两部分(由于拆分而作了一些进一步的修改)。进行这些更改需要了解单词及其在域中的用法(因此也需要计算规则)。它很快就变得不平凡了。
如果你的要求很简单,只有5到6条关于手机的信息,如果没有NLG软件,你可能会做得很好,只需创建某种模板,并确保所有的数据在插入时都是有意义的。然而,一旦你超越了手机,描述汽车,你就需要为新领域再次完成所有这些工作。
值得一看的是Ehud Reiter的博客 (SimpleNLG的最初作者)。也有一些论文,如Albert Gatt (自然语言生成的最新状况:核心任务、应用程序和评估),虽然后者有点密集,如果你只是涉足一点编程,但是它确实描述了NLG是什么,它可以做什么,以及它目前的限制是什么。
https://stackoverflow.com/questions/44118463
复制相似问题