Natural Language Generation I

Natural Language Generation I

NLG Tasks

传统的 NLG 问题可以被划分为如下子问题,越靠前的问题与实际数据的结合越紧密,越往后的问题越具有普适性:

  1. Content determination:
    • 选择何种内容传递给受众;
    • 使用的方法:
      • HMM;
      • 考虑信息之间的联系。
  2. Text structuring:
    • 考虑信息传递的顺序;
    • 使用的方法:
      • Hand-crafted, domain-dependent rules;
      • ML-approach: find an optimal ordering of ‘information-bearing items’.
  3. Sentence aggregation:
    • 将一些信息 (message level) 聚集到一个单句中;
    • 使用的方法:
      • Hand-crafted, domain-dependent rules;
      • ML-approach: 根据相似性判定数据库中的条目是否需要聚合,聚合的时候考虑一定的语法规则修改结果,之后找到全局最优的聚合策略。
  4. Lexicalisation:
    • 将聚合后的句子转换为自然语言,需要语法及表达进行一定的处理;
    • 候选项越多,问题越复杂;
    • 考虑内容约束和风格约束;
    • 使用的方法:
      • 直接将 message 转化为 lexical item,但可能会引入语义类似但在语境下有偏差的替代词,而且这个转化的映射也很难定义;
      • Unification-based with grammer rules encoding lexical as well as syntactic choices.
  5. Referring expression generation:
    • 从文章中选择出能标识该文章领域的单词和短语 ;
    • 使用的方法:
      • 分类指代词;
      • 根据描述属性是否具有区分性选择。
  6. Linguistic realisation:
    • 将句子修改为符合语法和日常习惯的表达;
    • 使用的方法:
      • human-crafted templates: 只需要往对应位置填空,质量可控,但泛化能力较弱,需要手动构造模板;
      • human-crafted grammer-based systems:基于语法的模板,有一定的泛化性,但很难设计出符合所有输入及句式的模板;
      • statistical approaches:在大量语料中学习到语法规则的概率模型,一类是先利用低层次手工构造语法构建词组等可供选择的语料,再使用统计模型将候选排序并选择(或者直接使用统计模型生成)最优的选项,另一类全部使用统计信息生成,或者也可以对生成的语句进行进一步地优化。

由上可以看出,这些任务的发展趋势都是由手工构造、领域特定逐步过渡到由大量语料学习到的基于概率统计建模方法。

NLG Architecture and Approaches

  1. Modular architecture: 将任务划分为多个子模块进行求解;
  2. Planning perspectives: 从规划视角看问题,提供一种更少划分的解决方案;
  3. Intergrated or global approches: 从整体解决问题,也是现在 NLP 的主要趋势,比较依赖于统计学习或者机器学习。

两大类:数据驱动和知识(手工)驱动。

Modular Architecture

大致分为如下步骤:

  • Text Planner: content selection + text structuring,决定 what to say;
  • Sentence Planner: sentence aggregation + lexicalisation + referring pression generation,决定 how to say;
  • Linguistic Realiser:应用语法规则等对最终输出的句子做进一步修改。

有时做这样很清晰的划分并不适用于所有任务,所以有人提出了更加灵活的架构,不对任务做清晰划分。

缺陷:

  • 上游的错误不可避免地影响到下游;
  • 在前期的任务中难以用规则限制错误。

一种改进方案是加入下游任务和上游任务之间的反馈,以及可以不断迭代最终生成的版本。这样就减小了上游任务错误可能导致的影响。

Planning-Based Approaches

使用规划的思想,将初始目标分解为小目标进行求解。这种分解并不像上面的 pipeline 一样对每个问题都进行同样的划分,而是在不同层级的任务上对任务提出不同的约束来控制最后的输出。

Planning through the Grammar

对语法进行修改,可以将一些语法结构抽象为 operator 的形式,进一步控制生成过程。例如:考虑句子 Mary likes the white rabbit,我们可以将 like 抽象为如下 operator:

likes(u, x, y):

  • Preconditions:
    • x likes y 应该在 knowledge base 中(被支持的,符合常理的情况);
    • x 是有生命的事物;
    • 语句 u 可以被 S (比如语法树之类的结构)推导出来。
  • Effect:
    • u 变为 S 的一部分;
    • 为 x, y 增加名词词组的节点,并在后续过程中填入。

这种方法的好处:一旦实现,可以在很多基于规划的方法中使用;但坏处是人工确定规则工作量大,效率不高。

Stochastic Planning under Uncertainty using Reinforcement Learning

上面使用的大部分都是基于规则的,考虑一个动作及其影响,这样在复杂的场景下很难有很好的效果。

试图达到一个很好的目标可以看作一个随机优化问题,这和强化学习的想法是相近的。

生成过程可以看作为一个马尔科夫决策过程,t 时刻到 t + 1 时刻的转移与动作 a 及其概率有关。RL 的架构能更好地处理变化环境中的非确定性。

RL 的结构可以通过共享子任务中学得的知识,并适应对子任务的不同约束。一些层次化的联合的模型被提出,它完成从选择内容到最终美化输出一系列的任务,相比对多个子任务分别建模,联合建模能控制子任务之间的联系,表现更好。

Data-driven Approach

获取数据

数据是 data-driven 方法的前提。

研究人员尝试从之前常用的 tree-bank 数据和近期的大语料数据中构建新的数据集。

比较重要的方法是如何对数据进行对齐,以及如何处理半结构化的数据。

有人提出使用概率生成模型进行数据对齐,概率值综合考虑三种不同的因素,之后最大化期望。

另外有人提出使用众包策略收集信息,尽可能简化标注难度以获得更多更优质的数据。

依赖对齐数据的模型只适用于特定的几个领域,泛化能力较差。目前更多的模型避免了对齐数据的需要,在训练过程中可以自动对齐(例如:神经网络 + Attention 等)。

Sequential, Stochastic Process

当可以使用对齐数据时,一种生成方法是使用统计模型进行内容选择,之后使用规则、模板等进行真实化。

有研究人员将生成过程建模为一个序列马尔科夫过程。选择内容根据历史对话数据以及重要属性(对话生成领域),真实化使用模板加 n-gram 模型。

一般的决策过程只考虑历史数据对当前数据的影响,而没有考虑到当前的决策可能影响到以后的决策,于是有人提出了递归预测左右成分的解决方案,效果比只从单方向考虑要好。

Mairesse and Young 提出使用动作树 + 语义栈来进行对话生成,选择概率最大的 stack 序列对应的 word sequence 生成。

Classification and optimisation

NLG 也可以看作一个分类问题,当前状态生成的词可以看作是根据当前输入和上个分类器的输入,在若干候选词中进行选择。之后,生成多个待选词并排序的途径也被提出。

Pipeline 结构的生成有错误传播的风险,于是可以将 NLG 看成一个优化问题,多次迭代减小上游误差对下游的影响。实验发现优化的方法会比 分类+pipeline 的方法表现好。

Parsing

使用 Probabilistic Context-Free Grammar 的思想,用表达式推导来表示决策过程。语言生成过程可以看成自下而上的构建过程(是否可以构建出开始的目标),过程中可以使用像 CYK 这样自下而上的算法帮助构建。

Deep Learning Methods

目前逐渐成为主流方法。目前使用神经网络的一个很重要的应用是学习语言的高层次抽象表征,特别是 dense, low-dimensional, distributed 表征。

Encoder-Decoder 结构

使用 RNN 将输入编码到一个表征向量中,之后使用 decoder-RNN 得到输出。输入和输出的解码使得输入的编码具有在多个子任务中使用的可能性。Attention 机制的提出使得在生成过程中可以自动考虑和 input 序列之间的联系,无需手动对齐。所以 SEQ2SEQ + Attention 是目前比较常用的生成方法。

Conditioned Language Models

另一种生成方法是将 generator 看成 conditioned language model,输出是从以输入特征作为条件的分布中采样得到的,这里的输入特征可以有很多种,例如语义、内容或者风格属性等。

讨论

目前的发展趋势越来越倾向于模糊化各个子任务之间的边界,区分的不是那么明显。对于数据驱动的方法,获取高质量的数据是生成高质量文本的重要条件。有些系统对数据的要求比较高,需要对齐的数据,另一些系统则要求不高(例如 attention 机制)。目前非常重要的一方向是试图学习到分布式的、可重用的特征表达(例如:word-embedding 等),这些特征表达无需重复训练,之后的任务可以直接使用,提高了效率,会产生比较广泛的影响(transfer learning,现在的 bert 等)。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 Bowen
  • Powered by Hexo Theme Ayer

请我喝杯咖啡吧~

支付宝
微信