可控难度的问题生成论文解读


在这篇文章中,我将对最近阅读的几篇关于可控难度的问题生成的论文进行简单说明,共四篇分别为:
1 Difficulty Controllable Generation of Reading Comprehension Questions. IJCAI, 2019
2 Difficulty-controllable Multi-hop Question Generation From Knowledge Graphs. ISWC, 2019.
3 Guiding the Growth: Difficulty-Controllable Question Generation through Step-by-Step Rewriting. ACL, 2021.
4 Question Generation for Adaptive Education. ACL, 2021.

下面将对这几篇论文进行简单说明

目录
  • 1 Difficulty Controllable Generation of Reading Comprehension Questions 阅读理解题难度可控生成
    • 1.1 难题
    • 1.2 创新
    • 1.3 数据集及模型说明
      • 1.3.1 获取难度标签(数据集生成)
      • 1.3.2 模型说明
        • 1 探索邻近提示
        • 2 特性丰富的Encoder
        • 3 难度可控的Decoder
    • 1.4 实验与结果
  • 2 Difficulty-controllable Multi-hop Question Generation From Knowledge Graphs 从知识图生成难度可控的多跳问题
    • 2.1 难题
    • 2.2 创新
    • 2.3 模型说明
      • Knowledge Graph Encoding 知识图编码
      • Difficulty Level Modelling & Estimation 难度级别建模和估计
      • Complex Question Decoder 复杂问题解码器
    • 2.4 实验结果
  • 3 Guiding the Growth: Difficulty-Controllable Question Generation through Step-by-Step Rewriting 通过逐步重写生成困难可控的问题
    • 3.1 问题
    • 3.2 创新
    • 3.4 模型说明
      • 上下文图构建
      • 推理链选择
      • 分步(Step-by-step)问题生成
    • 3.5 数据集自动构建
    • 3.6 实验
  • 4 Question Generation for Adaptive Education
    • 4.1 模型
      • 问题陈述
      • 学生状态
      • LM-KT
      • 问题生成
    • 4.2 实验
  • 总结

1 Difficulty Controllable Generation of Reading Comprehension Questions 阅读理解题难度可控生成

本篇论文是最早的研究可控难度问题生成的开篇之作,该文着重于问题感知的QG问题,即假设答案已经给出,并针对阅读理解问题进行展开。

1.1 难题

可控难度的问题生成相比普通的问题生成,有几个难题(2019):

  1. 没有现有的大规模 QA 数据集具有问题的难度标签来训练可靠的神经网络模型。

  2. 对于单个句子和答案对,我们希望生成具有不同难度级别的问题。 然而,像 SQuAD 这样的当前数据集对于每个句子和答案对只有一个给定的问题

  3. 没有衡量问题难度的指标。

1.2 创新

针对以上几个问题,论文提出了对应的解决办法:

  1. 针对问题一,提出了一个难度可控的问题生成(DQG)数据集(一个带有难度标签的阅读理解问题数据集。)这个数据集是在 SQuAD的基础上,设计了一种方法对SQuAD 中的问题,进行自动的、具有多个难度级别的标记 。

  2. 针对问题二,提出了一种基于直觉的生成指定难度问题的框架。直觉有两个:
    2.1 比如回答一个 SQuAD 中的问题,往往需要去原文中找某一片段作为答案,因此如果答案周围有更多的提示来帮助定位答案位置,那么直觉上回答起来就会更容易。
    2.2 第二个直觉受到关于样式引导文本生成的研究的启发,该研究结合了潜在的样式表示(例如,情感标签或评论评分)作为生成器的输入。

  3. 对于最后一个问题,使用现有的阅读理解 (RC) 系统来评估生成问题的难度。直观地说,RC 系统无法回答的问题比正确回答的问题更难。同时,在定量评估中,将DQG 模型与最先进的模型和消融基线进行比较。来验证生成质量更好的问题、生成符合指定难度标签的问题的能力。最后,还采用了人工评测的方法。

1.3 数据集及模型说明

首先,先明DQG模型的确任务为:为给定的句子(答案)生成不同难度级别的类似 SQuAD 的问题,即给定 答案a、原文段落s 和指定的难度级别 d 作为输入,DQG 任务是生成一个问题 q,其答案为 a,同时应将 d 作为其难度级别。

1.3.1 获取难度标签(数据集生成)

  1. 定义了Hard和 Easy两个难度等级。

  2. 使用两个阅读理解系统R-Net和BiDAF来自动评估问题的困难度,标签的规则如下:
    如果两个都回答正确则为Easy
    如果两个都回答错误则为Hard
    其余结果都删除以防止歧义

  3. 同时对SQuAD采用恰当的划分,以防止训练两个阅读系统时过拟合化,导致所有问题都标Easy。

  4. 为了验证标签的合理性,使用人工评测进行验证。

1.3.2 模型说明

本文提出的模型,就是在传统的seq2seq框架的基础上,加入了位置嵌入信息(即获取答案提醒)和全局难度变量。输入句子s=(w1,w2,w3,...,wm)答案a,难度等级d,生成指定难度的问题。

下图为t时刻的框架图:

1 探索邻近提示

  • 作者首先定义了疑问词邻近提示(Question Word Proximity Hint ),即通过计算出现在输入句子中的问题词与答案片段的平均距离来表示难易度。通过统计可以发现,出现在 输入句子中的疑问词到答案的平均距离要远小于句子词到答案的距离。

  • 并且困难问题的距离明显大于简单问题的距离。这也更好的验证了作者提出的直觉推断。即如果一个问题有更明显的邻近提示(即包含更多靠近答案的单词) 相应的句子,解决起来会更容易。 作者分别为简单问题和困难问题建模 QWPH,并将此称为难度级别接近提示 (DLPH)。

  • 如上图左下角所示(proximity hints),为了实现QWPH直觉,作者使用模型学习了一个查找表,该表将每个句子单词的距离映射到答案片段,其中0代表答案词,1、2...代表位置嵌入p0,p1,p2...pL,L是认为的最大距离。

  • 与难度不可知的QWPH不同,DLPH直觉额外探索了问题难度水平的信息。作者定义了两个查找表,简单表:\(\left(\mathbf{p}_{0}^{e}, \mathbf{p}_{1}^{e}, \mathbf{p}_{2}^{e}, \ldots, \mathbf{p}_{L}^{e}\right)\),困难表:\(\left(\mathbf{p}_{0}^{h}, \mathbf{p}_{1}^{h}, \mathbf{p}_{2}^{h}, \ldots, \mathbf{p}_{L}^{h}\right)\)。注意,上面的位置嵌入不仅携带了句子单词位置的信息,还让我们的模型知道用位置0的嵌入问哪个方面(即答案)

2 特性丰富的Encoder

特征丰富的Encoder将几个特征合并到上下文化表示中,使用双向LSTM 作为基础模型。

  • 首先对于每一个句子中的词,要通过一个嵌入查找表(word emb),将句子中的标记映射成密集向量:(w1,w2,...,wm)。

  • 然后将其单词嵌入和位置嵌入(邻近提示)连接起来,得到一个特征丰富的嵌入:x =[w;p]。

  • 最后,使用双向LSTMs来编码序列(x1,x2,...,xm)来获取每个标记的上下文化表示:

\[\overrightarrow{\mathbf{h}}_{i}=\overrightarrow{\operatorname{LSTM}}\left(\overrightarrow{\mathbf{h}}_{i-1}, \mathbf{x}_{i}\right), \overleftarrow{\mathbf{h}}_{i}=\overleftarrow{\operatorname{LSTM}}\left(\overleftarrow{\mathbf{h}}_{i+1}, \mathbf{x}_{i}\right) \]

并将两个方向的合并起来获得最终的结果hi。

3 难度可控的Decoder

使用一个单向LSTM作为解码器来生成问题。并且使用难度标签d和encoder最后一个隐藏状态融合起来,来共同初始化解码器的隐藏状态。同时,在解码过程中,作者结合了注意力和复制机制来提高性能。

  1. 全局难度控制

作者把难度可控的问题的生成,看作是生成特定风格(即简单或困难)句子的问题,所以在模型中引入一个全局难度变量来控制生成。

  • 首先,对于特定的难度等级d,作者将其映射(使用diff level)为对应的难度变量d(向量)。

  • 然后,将d和encoder的最后隐藏状态融合为u0 = [hm; d],作为deoder隐藏状态的初始化。

  • 请注意,在训练阶段,向模型馈送真实难度标签,而在测试阶段,模型可以采用任何指定的难度标签,即难度可控的标签来生成问题。

  1. Decoder中的注意力和复制功能
  • 解码器预测每个解码时间步长的单词概率分布,以生成问题。在第t个时间步长,它读取嵌入字wt和前一个时间步长的隐藏状态ut-1,以生成当前隐藏状态ut = LSTM(ut-1,wt)。

  • 同时,解码器采用注意机制和复制机制,通过复制句子中的单词从预定义的词汇表中生成单词来生成问题。这两个部分的实现,前面介绍的文章都有实现,可以看或者。

  • 需要注意的是注意力机制中使用到了decoder的隐藏状态,这里并不冲突,因为注意力机制是decoder阶段的模块,狮子啊encoder全部运行完后才开始执行的。(解释这个,是因为对于新手可能会被图所误导)。

1.4 实验与结果

  • 数据集:根据SQuAD数据集划分,在训练集、验证集和测试集中,拆分比例约为7:1:1,三者的简单样本比例约为58%。

  • 基线模型:只使用基于神经网络的方法作为基线,因为它们比非神经方法表现得更好,第一个基线将问题生成建模为一个包含注意机制的seq2seq问题,叫L2A。第二个基线为Ans,它将答案指示符嵌入添加到seq2seq模型中。

  • 消融测试:仅对是否使用疑问词接近提示QWPH难度等级接近提示DLPH两种消融实验。此外,还检查了与 QWPH 和 DLPH 相结合的全局难度控制 (GDC) 的有效性,将它们称为 QWPH-GDC 和 DLPH-GDC。 所有这些方法都通过复制机制得到增强。

  • 实验结果:使用了自动评测和人工评测标准。结果表明,提出的框架生成的问题不仅在 BLEU 等指标下具有更好的质量,而且符合指定的难度标签。

2 Difficulty-controllable Multi-hop Question Generation From Knowledge Graphs 从知识图生成难度可控的多跳问题

这是首次提出基于知识图谱(KG)自动生成复杂的多跳问题。

  • 本文提出了一种基于端到端(end-to-end,基于transformer)神经网络的方法,用于在知识图上自动生成复杂的多跳问题。并且在多跳 QA 数据集进行实验,代码开源

2.1 难题

QG实际上是QA的一个衍生,因此首先说明一下QA的难题:

  • 1,基于知识图谱的问答模型(KG QA)的最优模型往往是基于神经网络的,并且需要大量的数据用于训练。由于数据的需求,有很多包括单跳的、简单的数据和多跳的或者需要离散推理的困难数据数据被创造或正在创造出来。

  • 2,虽然有很多数据集开始被创造,但是KG QA模型的改进仍受到数据的限制:简单的数据量大,但是易回答很难对模型有改进困难问题能促进模型的进步但是很难创造,并且往往都是由人工或者半自动创造的。

本文基于PathQuestion和ComplexWebQuestions,两个多条数据集,为了说明基于知识图谱的QG的难题,作者给出如下,分别来自两个数据集的例子(每个示例都包含一个子图、一个关于它的问题以及答案。):

  • 第一个示例来自 PathQuestion,它具有由特殊标记 # 分隔的实体和谓词,子图的末尾由标记 表示,然后是答案实体。 它包含由两个谓词连接的三个实体。下图是由parents和spouse两个谓词连接的。

  • 第二个示例来自 ComplexWebQuestions,它的三元组由特殊标记 分隔。 该示例是一个三跳子图。 与前面的例子不同,这个子图不是一个三元组序列而是星形的,并且有多个答案。

从上面两个例子可以看到,对于基于KG的QG模型的一些难题:

  • 输入是一个图,而且不一定是一个标记序列,比如第二个例子,该实体具有连接到其他三个实体的三个传出谓词,并且显然不是一个序列结构。然而,传统的文本生成方法基于序列到序列(seq2seq)模型,例如循环神经网络 (RNN),该模型假设输入是序列。这种不匹配可能会对 QG 的质量产生负面影响。

  • 同样,对于复杂的多跳问题,模型需要反复查看图形的不同部分以生成句法流畅的问题。这对于顺序操作的基于 RNN 的技术来说是困难的。

2.2 创新

解决了在 KG 上自动生成复杂的多跳问题的重要问题。

  • 提出了一种基于 Transformer 架构的端到端的、自注意力的 QG 方法, Transformer 架构允许我们自然地将图视为图,而不是三元组序列。将子图和答案作为输入,基于transformer的模型会生成一个自然语言问题。

  • 结合了基于命名实体流行度(named entity popularity)的难度估计来建模和估计给定子图-问题对的难度级别,以生成不同难度级别的问题。

2.3 模型说明

作者将知识图上的问题生成,建模为序列到序列 (Seq2Seq) 的学习问题。

我们假设一个背景知识图 \(\mathcal{G}\),包括一组三元组(事实)。给定一个子图G={f1,f2,...fn}?包含n个事实的\(\mathcal{G}\),那么生成问题的思想可以写为下式:

\[\begin{aligned} Q^{*} &=\underset{Q}{\arg \max } P\left(Q \mid G, E_{A} ; \Theta\right) \\ &=\underset{w_{1}, \ldots, w_{m}}{\arg \max } \prod_{i=1}^{m} P\left(w_{i} \mid w_{1}, \ldots, w_{i-1}, G, E_{A} ; \Theta\right) \end{aligned} \]

其中, EA是出现在 G 中的某些三元组中的一组实体,代表答案;Θ 表示模型参数。Q一个自然语言问题,QQ = (w1, . . . , wm),其中wi是单词。
进一步给出总体框架图(左边为encoder,右边为decoder):

  • 编码器由一叠 Transformer 组成,将子图、答案实体和子图的估计难度级别作为输入。

  • 解码器是另一个 Transformer 堆栈,它根据用户指定的难度设置对给定编码器输出的多跳问题进行解码。

下面进行详细说明。

Knowledge Graph Encoding 知识图编码

  • 输入:encoder的输入为子图嵌入向量,答案嵌入向量和难度嵌入向量的融合,这里首先对子图嵌入向量进行说明。

    • 对于子图G的嵌入向量,其嵌入由G中三元组(这里的三元组时子图中的谓语和连接的实体(主语、宾语),不是数据集的)的嵌入构造而成。在初始化时,三元组的嵌入是将三元组的主语、谓语和宾语的嵌入连接起来,其余的值随机初始化以匹配三元组嵌入维dg。

    • EA中的每个答案实体还被嵌入到一个去维向量中,通过MLP(多层感知器)了解它是否是一个答案实体。然后对答案嵌入和原始实体嵌入进行元素加法,得到每个答案实体的最终嵌入。(看的好懵逼,好像这个答案实体是子图中的而不是answer encoding,而且好像是代表的可能是答案的所有实体,作者都不说清楚吗,妈的,等我先看看代码)

因此,如果子图G由n个三元组,其维度就是(n,dg),当子图G输入时,Transformer编码器将其映射到一个连续表示序列\(\underline{\boldsymbol{Z}}=\left(z_{1}, \cdots, z_{n}\right) \in \mathbb{R}^{n \times d_{v}}\)

模型的一些公式(结合transformer去看参考):

  • 设Q,K,V表示编码器Transformer的query查询、key键和value值矩阵。给定输入G,我们使用查询矩阵V软选择相关的注意点积缩放的三元组:

\[\operatorname{Att}(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\operatorname{softmax}\left(\frac{\boldsymbol{Q} \boldsymbol{K}^{T}}{\sqrt{d_{k}}}\right) \boldsymbol{V} \]

  • 为了能够注意到来自不同表示子空间的不同三元组的信息,使用了k个头的多头注意,并将其聚合为:

\[\operatorname{MultiAtt}(\boldsymbol{Q}, \boldsymbol{G})=\operatorname{concat}\left(\boldsymbol{a}_{1 \min \min } \boldsymbol{a}_{k}\right) \boldsymbol{W}^{O} \]

  • 聚合的多头注意输出被传递到transformer的每个编码器堆栈中的前馈神经网络(FFNN),其中输出x经过两个线性变换:

\[\operatorname{FFNN}(\boldsymbol{x})=\max \left(0, \boldsymbol{x} \boldsymbol{W}_{1}+\boldsymbol{b}_{1}\right) \boldsymbol{W}_{2}+\boldsymbol{b}_{2} \]

在除第一层以外的所有编码器层中,我们直接将前一层的输出作为输入。编码器顶部的输出最终转换为两个注意矩阵,键\(\boldsymbol{K}_{\text {encdec }}\)和值\(\boldsymbol{V}_{\text {encdec }}\)

原始的Transformer是为处理序列而设计的,为此,它提供了位置编码来编码每个输入令牌的位置。由于子图不一定构成一个三元组序列(参见示例1中的第二个图),所以作者在编码器中不使用位置编码。

Difficulty Level Modelling & Estimation 难度级别建模和估计

本文使用问题和子图的特征来估计难度,即(1)问题中实体连接(entity-linking)的置信度,(2)子图中实体的表面形式的选择性。采用NER(命名实体识别)系统来进行实体识别和连接。

  • 置信度Confidence:从直观上看,NER系统对entity-mention及链接的高置信度可能是由于mention(mention就是自然文本中表达实体(entity)的语言片段,可参考这里)的低模糊性和上下文的高可微性,这两者都使子图易于理解,生成的问题易于回答。

例如,给定mention“冷战”,如果 NER 系统为entity实体(即一个知识图谱中包含冷战的实体,可以参考前面mention的参考) freebase:m.034y4w 返回比 freebase:m.011 更高的置信度分数,则包含前者的问题更有可能是正确的,因此更容易回答。
简单来说,就是mention就是起一个分类的特征的作用(本文是答案),符合这个特征的所有实体中置信度高的就代表相关性大,那么包含这个实体的问题就代表和答案相关性越大,那么就越是正确的问题,答案也就相应的更准确。

  • 选择性Selectivity:另一方面,越少选择性的提及(即对于这一mention,对应的entity数量比较少,那么可选择的就更少),包含该提及的问题就越令人困惑。我们查询维基百科的每一个mention,并使用返回点击数作为其选择性的估计,点击数越高,选择性越低,因此问题越难。(我猜的是用返回键的点击数,比如搜一个词,如果结果比较少,那么点返回的就更多)

给定一个子图G和问题q的训练实例(G, q),用Con(q)表示置信度,方法是对q中所有已识别的提到进行平均,并对训练语料库进行最小-最大归一化。用Sel(G)表示子图的选择性,通过对G中的所有实体进行平均和最小-最大标准化。估计给定子图和问题Dif(G, q)的难度等级如下:

\[\operatorname{Dif}(G, q)=\frac{1+\operatorname{Sel}(G)}{1+\operatorname{Con}(q)} \]

然后将难度估计 Dif(G, q) 归一化为闭区间 [0, 1],最后通过阈值化转换为二元向量 x,其中 (0, 1) 和 (1, 0) 分别代表容易和困难。使用一个one-hot向量来表示难度级别,这样就很容易将其归纳为多个难度级别。

Complex Question Decoder 复杂问题解码器

解码器是一堆(a stack)Transformer解码器,条件是要生成的问题的难度级别。与编码器类似,解码器也有多个缩放的点积注意层以及前馈神经网络层。除自注意外,解码器在其ecoder注意层中的最后的输出注意矩阵(键\(\boldsymbol{K}_{\text {encdec }}\)和值\(\boldsymbol{V}_{\text {encdec }}\))作为输入,这有助于解码器注意(聚焦)输入子图中的重要三元组。

  • encoder-decoder 注意层的工作原理与前面提到的多头自注意层非常相似。主要区别在于encoder-decoder 注意力层使用decoder中位于其下方的层计算查询矩阵 (Q),并从encoder输出中获取键 (K) 和值 (V) 矩阵。

  • 解码器堆栈的输出向量被馈送到完全连接的神经网络(线性层),该网络将其投影到 logits 向量。 最后,softmax 层将此 logits 向量转换为词汇表的概率分布,从中解码问题。

  • 使用多层感知器 DE 将难度编码到解码器中,该感知器 DE 由一个输入线性层、一个整流线性单元 (ReLU) 层和一个输出线性层组成。 DE 的输入是一个长度为 2 的向量 x(因为用one-hot表示),表示给定的难度级别。

\[\underline{\mathrm{DE}(\boldsymbol{x})=\operatorname{Linear}(\operatorname{ReLU}(\boldsymbol{W} \boldsymbol{x}+\boldsymbol{b}))} \]

其中 x 是难度级别,W ∈ Rdg×2 和 b ∈ Rdg是可训练的模型参数。 将 DE(x) 与decoder输入相加到条件解码器以生成编码难度的问题。在解码器端,问题词的顺序很重要。因此,我们向解码器输入注入/添加序列顺序信息。为了表示序列的顺序,我们使用具有不同频率的正弦和余弦函数的固定位置编码

\[\begin{aligned} \mathrm{PE}_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\mathrm{g}}}\right) \\ \mathrm{PE}_{(p o s, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\mathrm{g}}}\right) \end{aligned} \]

其中 pos 是位置,i 是维度索引。

  • Label smoothing标签平滑:添加标签平滑进行正则化(参考)可减少预期的校准误差,本文设置不确定性为 0.1。本文的的标签平滑技术基于 Kullback-Leibler 散度损失。没有使用普通的 one-hot 问题词分布,而是构建了一个对正确词有信心的分布,并将平滑质量的其余部分分布在整个输出词汇表中

2.4 实验结果

  • 数据集:WebQuestionsSP, ComplexWebQuestions , and PathQuestion.

    • WebQuestionsSP, ComplexWebQuestions总的每个实例都包含一个自然语言问题、一个相应的 SPARQ 查询和答案实体以及一些其他辅助信息。,对于WebQuestionsSP, ComplexWebQuestions中的每个实例,我们通过将其从 SELECT 查询更改为 CONSTRUCT 查询,将其 SPARQL 查询(参考)转换为返回子图而不是答案实体。我们将这两个数据集结合起来,称为 WQ

    • PathQuestion(以下简称PQ)类似于WQ。 然而,PQ 只包含口头实体和谓词,而不包含它们的 Freebase ID,因此,以不同的方式处理这个数据集。从概念上讲,WQ 和 PQ 都是一组元组 {(Qt, G,EA)},其中 Qt 是一个自然语言问题,G 是问题的衍生子图,EA 是问题 Qt 的答案实体集

    • 对于每个数据集(WQ 和 PQ),将其分成 80%、10% 和 10% 用于训练、验证和测试。

  • 对比:使用(2019)最先进的自然语言 QG 模型 Learning to Ask (以 L2A)作为基线模型进行比较。

  • 评估:使用广泛使用的指标进行自动评估,包括 BLEU、GLEU 和 METEOR,以及人工评估。

  • 结果:与(2019)最先进的文本问题生成技术相比,本文的方法生成的问题更流畅,难度级别可调。

3 Guiding the Growth: Difficulty-Controllable Question Generation through Step-by-Step Rewriting 通过逐步重写生成困难可控的问题

本文使第一次把问题难度定义为回答问题的推理步骤的文章,并且构建了一个可以帮助训练将问题重写为更复杂的问题的数据集。

3.1 问题

本文是2021年发表的,针对目前的两个问题进行了改进:

  1. 很难定义一个问题的难度等级。

2.很难灵活的控制难度的变化,并且目前提出的一些方案缺少难度变化的合理性说明(比如第2篇更多靠直觉欸,并且只有两个难度等级)

注:实际上,基于图结构的方法,能很好实现决难度可控和推理步骤的控制,但是目前该方法在QA中主要用于提高文档的表示(可以参考前面提到的graph encoder的一篇)

3.2 创新

基于以上文艺,提出了一个新颖的框架,该框架在提取的推理链的指导下通过逐步重写来逐步增加问题难度。下面详细说明:

  1. 通过得到答案所需要的推理步骤的次数定义问题难度。

  2. 基于图的思想,提出了一个高度可控的QG框架,通过逐步重写,逐步增加生成问题的难度。

    • 为便于理解,对基本步骤进行简单说明:如下是基于从已构造的上下文图中提取的推理链,通过逐步重写生成复杂问题的示例。

  • 首先,将给定的原始文本转换为上下文图,从中我们对生成的问题的答案和推理链进行抽样。

  • 然后,设计了一个问题生成器和一个问题改写器来生成一个初始的简单问题,并逐步将其改写成更复杂的问题。比如上图的例子,“Tom Cruise”是选择的答案,Q1是初始问题,然后通过在推理链中增加一个推理步骤(即N1←N2),将其调整为Q2。也就是说,在回答Q1之前,需要推断《Top Gun》是“ Tony Scott导演的电影”。同样地,我们可以进一步提高它的难度级别,并逐步扩展到更困难的问题(即Q3, Q4和Q5)。

  1. 构建了一个可以帮助训练将问题重写为更复杂的问题的数据集,并与构建的上下文图和问题的潜在推理链配对。
    • 我们设计了有效的策略来自动从现有的QA数据集构建训练数据,而不是通过大量的人力努力从头开始构建。

    • 具体来说,利用HotpotQA数据集(一个QA数据集),其中大多数问题需要两个推理步骤才能回答,可以分解为两个单跳问题。因此,得到了包含两跳问题及其对应的一跳推理步骤的数据集。

    • 在学习了如何使用此数据集将 1 跳问题重写为 2 跳问题后,本文的框架可以轻松扩展到仅使用少量相应数据从 n 跳问题生成 (n+1) 跳问题,因为 无论 n 的确切值如何,重写操作都遵循一定的模式(参考上图)。

3.4 模型说明

模型的总体功能可以概述为:给定输入上下文文本 C 和特定难度级别 d,生成(question,answer)对(Q,A),其中 A 是 C 的子跨度,Q 需要 d-hop 推理才能回答。
首先给出提出的框架的概述,所选推理链以浅蓝色节点标识:

由上图可以看到,总体步骤哦导致为:

  1. 首先,构建一个与给定上下文对应的上下文图,从中选择一个子图 GT 作为生成问题的推理链。

  2. 接下来,将推理链和其他上下文信息作为输入,问题生成器 生成初始简单问题 Q1。

  3. 然后,Q1 被馈送到问题重写模块,该模块迭代地将其重写为更复杂的问题 Qi

下面对上面几个步骤详细说明:

上下文图构建

本文构建上下文图\(\mathcal{G}_{CG}\)的方法参考自:使用本地知识图构建将 Seq2Seq 模型扩展到多文档输入Using Local Knowledge Graph Construction to Scale Seq2Seq Models to Multi-Document Inputs.

  1. 首先应用开放信息抽取(open information extraction ),从上下文句子中提取三元组。

  2. 将每个三元组转换为由有向边连接的两个节点,这两个节点分别代表 subject和object,有向边代表两个节点之间的relation。

  3. 最后,使用引用解析(Coreference resolution)来合并指向同一实体的节点。(例如上图中的A Perfect Murder )

推理链选择

通过构造上下文图,我们从上下文图(这里暂时认为是无向的)中抽取一个由d+1节点(d是难度等级)组成的连通子图(在一个无向图G中,若从顶点到顶点有路径相连)\(\mathcal{G}_{T}\)作为生成问题的推理链。

  1. 首先选取答案N0,如果节点N0是或链接到一个具有多个节点度的命名实体,则将其作为问题的答案进行采样。

  2. 接下来,从上下文图\(\mathcal{G}_{CG}\)中提取一棵最大生成树\(\mathcal{G}_{L}\)(: 在一个图的所有生成树中边权值和最大的生成树即为最大生成树),根节点为N0,(参考第一个图,在这一步,GCG暂时被认为是一个无向图)。

  3. 然后,将\(\mathcal{G}_{L}\)裁剪为\(\mathcal{G}_{T}\),只保留d+1个节点。在剪枝过程中,需考虑每个节点被提取的句子位置,以使推理链与更多的上下文相关。

  4. 将GT中的一个节点表示为Ni (i = 0,1,…,d),其中每个节点下标为\(\mathcal{G}_{T}\)预序遍历,NP(i)为Ni的父节点。

分步(Step-by-step)问题生成

首先给出本文可控难度的深度学习框架的实现流程:

  • 可以看到,输入上下文C和难度等级d,返回有难度的问题和对应答案。

  • 其中5~11行就是逐步的问题生成(step-by-step QG)过程,其中Qi (i = 1, 2, . . . , d) 代表每一步的问题生成, Qd 代表最终的问题, Qi+1 通过对 Qi重写(多了一个推理跳)得到Si表示上下文句子,我们从中提取出三元组Ni→NP(i)。Ri代表Qi的重写(rewritten)类型。

  • 第9行的Bridge和Intersection分别代表重写的两种类型,Bridge用修改后的子句替换实体(即替换节点),而 Intersection 向问题中的现有实体添加了另一个限制(即插入节点)。这两种类型可以通过Ni是否为其父节点的第一个子节点来区分,即其父节点是否已经用Bridge风格重写过一次。(对应后面的生成和重写过程)

  • 第10行,为了生成要求难度为d的最后一个问题,首先使用问题生成器\(\mathbf{Q} \mathbf{G}_{\text {Initial }}\)基于N1, N0和相应的上下文句子S1生成一个初始简单问题。然后,根据节点Ni及其父节点NP(i),上下文句子Si,以及改写类型Ri ,反复(d?1次)使用\(\mathbf{Q} \mathbf{G}_{\text {Rewrite }}\)将问题Qi?1改写为更复杂的问题。生成和重写过程可以写成如下格式:

\[\begin{gathered} \mathcal{Q}_{1}=\underset{\overline{\mathcal{Q}}_{1}}{\arg \max } P\left(\overline{\mathcal{Q}}_{1} \mid \mathcal{N}_{1}, \mathcal{N}_{0}, \mathcal{S}_{1}\right) \\ \mathcal{Q}_{i}=\underset{\overline{\mathcal{Q}}_{i}}{\arg \max } P\left(\overline{\mathcal{Q}}_{i} \mid \mathcal{Q}_{i-1}, \mathcal{N}_{i}, \mathcal{N}_{P(i)}, \mathcal{S}_{i}, \mathcal{R}_{i}\right) \end{gathered} \]

其中 \(i=2,3, \ldots, d\)

  • 在本文的实现中,\(\mathbf{Q} \mathbf{G}_{\text {Initial }}\)\(\mathbf{Q} \mathbf{G}_{\text {Rewrite }}\)都是用预先训练的GPT2-small模型初始化的,然后在构建的数据集上进行微调。

  • 如上图所示的重写部分的encoder,如果Ni 指向 NP(i),那么输入序列可以表示为如下形式:

    • 其中,\(\mathcal{E}_{i}\)代表Ni和NP(i)之间的边,Ni代表孩子节点,相应NP(i)是父节点。如果两者指向变了(父节点指向子节点),那么这两个表示的位置(前后顺序)也会相应的对换。 Ri 代表重写类型,Qi?1代表上一步生成的问题。如果是生成器\(\mathbf{Q} \mathbf{G}_{\text {Initial }}\),那么是没有 Ri 和Qi?1的,其余都一样。

    • segment embedding layer用来识别不同的片段,对于 Si 和 Qi?1 中与 NP(i) 相同或指代相同实体((的那些部分,作者将它们的段嵌入替换为 NP(i) 之一,考虑到 Ni 的父节点起着重要的作用**表示要问什么或重写哪部分的角色(如第一个图所示)。

3.5 数据集自动构建

  • 在本文的工作中,训练数据是从 HotpotQA(一个 QA 数据集,其中大多数问题需要两个推理步骤才能回答,并且可以分解为两个 1 跳问题。)构建的,该训练集中每个上下文 C 由两个段落 {P1, P2} 组成,大多数问题需要两跳推理,每一跳都涉及一个段落。HotpotQA 还注释了支持事实\(\mathcal{F}\),这是与问题最相关的上下文部分。

  • 除了HotpotQA中已有的信息,还需要以下信息来训练\(\mathbf{Q} \mathbf{G}_{\text {Initial }}\)\(\mathbf{Q} \mathbf{G}_{\text {Rewrite }}\)

    • 用于训练\(\mathbf{Q} \mathbf{G}_{\text {Initial }}\)的简单的初始问题及其答案(Q1, A1)

    • 从Q1到Q2的重写的重写类型R2

    • Q2的推理链{N0,N1,N2}

    • 抽取N0 N1 N2的上下文句子Si (i = 1,2)

给出自动生成数据集的代码如下:

由上可以以看到:

  • 输入为, HotpotQA训练集中的上下文C,QA对(大部分为2跳的),支持事实\(\mathcal{F}\),从中学习如何构建多跳,并最终输出所需的各类信息(可以参见上一部分):生成Q1的类型R1,1跳问答对(Q1,A1),上下文句子 S1、S2,生成Q2的推理链{N0, E1,N1, E2,N2}。

  • 在推理类型分类器 (TypeClassify) 和问题分解器 (DecompQ) 的帮助下,构建过程得以简化,对于 HotpotQA 中的每个问题(即 Q2),我们首先区分其推理类型(这里的推理类型对应于重写类型Ri。),并过滤掉那些不是 Bridge 和 Intersection 的。

  • 然后,DecompQ 根据跨度预测和语言规则将 Q2 分解为两个子问题 subq1 和 subq2。. 例如,图 2 中的 Q2 将分解为 subq1=“To which film A Perfect Murder was a modern remake?”,和subq2=“Who directed Dial M for Murder?”。这样就将问题分解为了两个 1 跳问题。

  • 之后,利用现成的单跳 QA 模型来获取两个子问题的答案,再上免得例子中是Dial M for Murder” a和 “Alfred Hitchcock” 。这样就获得了(subq1,suba1)(subq2,suba2)。

  • 至于Q1(第5行),它是子问题之一也是要输出的用于构建数据集的元素,所以需要找到合适的A1。当 Q2 为Intersection类型时,Q1 可以是 subq1 或 subq2。对于 Bridge 类型,它是与 A2 共享相同答案的子问题(比如第二个图的Q1和Q2答案都是Alfred Hitchcock)。对于上面的示例,Q1 是 subq2,因为 suba2 = A2(这里的A2未输入就是原来的2跳问题Q2的,所以如果子问题与A2相同,那一定是Bridge类型,所以Q1一定是与 A2 共享相同答案的子问题,这里是subq2)。对于其他的情况,比如A2 = suba1则Q1=subq1,或者是Intersection类型,Q1是哪个都行,就默认选择第一个子问题。

  • 上下文句子 Si (第6行)应该提供包含在关于 Qi (i = 1, 2) 的段落\(\mathcal{F}\)中的支持事实(只需注意对应即可)。对于推理链,首先定位N2,然后通过与两个子问题的文本匹配找到N0,N1,从局部上下文图中选择。

  • 通过如上步骤,最终将问题分解为了两个 1 跳问题,并得到包含 2 跳问题及其相应的 1 跳推理步骤的数据集。

3.6 实验

  • 数据集:基于HotpotQA自动生成的数据集

  • 对比模型(baseline):NQG++、ASs2s、SRL-Graph and DP-Graph、GPT2

  • 评估标准:自动评估(BLEU3, BLEU4、METEOR、CIDEr)、人工评估(Well-formed、Concise、Answerable、Answer Matching)

  • 结果:提出的方法可以有效控制生成问题的难度,并同时保持高问题质量。

4 Question Generation for Adaptive Education

本文将可控难度的问题生成应用到教育领域(本文针对翻译),针对现在然而,现有在线教育系统依赖于一系列手工问题,限制了它们在适应个别学生时的细粒度和开放性的问题,通过微调用于深度知识追踪 (LM-KT,learning models knowledge tracing) 的预训练语言模型(本文用GPT2)。达到针对不同学生生成指定难度的翻译问题的效果。

4.1 模型

给定任何自回归语言模型(例如 GPT-2),可以微调 LM-KT 模型(\(p_{\theta_{K T}}\))来预测单个学生是否会正确回答下一个问题。 如果该模型具有经过良好校准的不确定性,可以使用其正确答案的预测概率作为学生问题难度的代理。 然后训练一个问题生成模型 (\(p_{\theta_{Q G}}\)) 以生成一个以学生和所需目标难度为条件的新问题LM-KT和问题生成是分别在两个GPT2上微调的视为自回归的语言模型。

如下图 1是基于提出的模型生成指定难度问题的例子:

  • 其中中间是 LM 的知识追踪模型,下面是问题生成模型的示例输入和输出,顶部是用于在线逆向语言翻译任务。此任务中的一个问题由学生(在本例中为西班牙语学习者)翻译的目标短语组成(例如“女人”)。

问题陈述

  • 与将问题视为 ID 或简单的手工特征的标准 DKT(Deep Knowledge Tracing) 不同,本文完全用文本表示问题(例如图 1 中的“she eats”)(这是本文工作的一个关键贡献,也在文本中生成问题的最终目标所必需的),并且允许模型利用跨语言特征的相似性

  • 因此,本文将问题 q 表示为一个带有前缀和后缀标记的单词序列

\[q_{i}=\langle Q\rangle w_{1}^{(i)} w_{2}^{i} w_{3}^{i} \ldots w_{n}^{i} \]

学生状态

  • 本文将学生表示为一个随时间变化的问题及其回答的序列。 与之前的 KT 工作一样,将学生的回答简单地表示为正确/不正确,并使用特殊标记 。 因此,学生的当前状态表示为所有过去的问题和回答对的序列

\[s_{j}=q_{1}^{j} a_{1}^{j} q_{2}^{j} a_{2}^{j} \ldots q_{m}^{j} a_{m}^{j}, a_{i} \in\{<\mathrm{Y}>,<\mathrm{N}>\} \]

LM-KT

  • 考虑到学生学习随时间推移的顺序性,可以轻松地将知识追踪构建为自回归语言建模任务。给定学生 s1, s2, ..., s|D| 的数据集 D,我们采用标准训练目标,即找到最小化参数 \({θ}_{KT}\):

\[\mathscr{L}_{K T}=-\sum_{i=1}^{|D|} \sum_{t=1}^{\left|\mathbf{x}^{(i)}\right|} \log p_{\theta_{K T}}\left(x_{t}^{(i)} \mid x_{

  • 其中\(\mathbf{x}^{(j)}=\left(x_{1}^{(j)}, \ldots, x_{|\mathbf{x}|}^{(j)}\right)\)是对应于学生 sj 的整个序列标记,由他们过去的所有问题和答案组成

  • 使用 LM-KT 模型 (\(p_{\theta_{K T}}\)) 的 softmax 输出,估计学生回答特定问题的(逆)难度为\(d_{q s}=p_{\theta_{K T}}(\langle Y\rangle \mid s, q)\)(可以发现,使用的是正确答案的预测率作为难度等级)。通过后续实验发现\(p_{\theta_{K T}}\)校准良好,可以很好地代表真正的问题难度。

问题生成

  • 将问题生成框架化为对新的自回归 LM 进行微调。给定来自未用于训练 LM-KT 的留存集中的随机学生样本和问题,可以构建一个由 si、 di、 、qi 序列组成的新数据集 D',其中 是特殊的生成标记(用来标记问题文本),d_{i}=p_{\theta_{K T}}(\langle Y\rangle \mid s, q)$是 LM-KT 分配的连续难度值。si是学生状态,qi是问题词序列。

  • 本文学习了一个线性层来将连续输入的难度映射到一个与 LM 词嵌入匹配的维度的难度控制向量 \(c_d\),并将其附加到令牌嵌入中。与 LM-KT 不同,本文训练的问题生成模型 pθQG 仅通过最小化出现在 标记之后的问题文本的损失

\[\mathscr{L}_{Q G}=-\sum_{i=1}^{\left|D^{\prime}\right|} \sum_{t=t_{g}+1}^{\left|\mathbf{x}^{(i)}\right|} \log p_{\theta_{Q G}}\left(x_{t}^{(i)} \mid x_{

  • 其中序列 x(j) 包含完整的 sj djqj 序列。 在测试时,我们生成以 sj dj 前缀为条件的标记 w1...wn

4.2 实验

  • 数据集:Second Language Acquisition Modeling dataset(Second Language Acquisition Modeling)

  • 学生建模评估:

    • 实验:将 LM-KT 模型的保留测试集上的 AUC-ROC(一个分类器评价指标) 与标准 DKT 进行了比较,后者使用问题 ID 而不是文本,以及忽略学生状态的基线,仅使用问题文本表示。

    • 结果显示LMKT 优于标准 DKT,尤其是在新问题上——生成的必要泛化能力

  • 问题生成评估:评估了四个方面:(i)难度控制程度,(ii)新颖性,(iii)流畅性和(iv)延迟。

    • 目标难度的程度:选取了 15 名未见过的学生,并针对 9 个输入难度 (0.1-0.9) 中的每一个生成 30 个问题。 然后,我们使用 LM-KT(经过良好校准的真实难度代理)来衡量每个学生生成的这些问题的难度。
    • 新颖性:通过利用预训练语言模型操纵结构的能力,可以生成整个 Duolingo 问题集中不存在的新问题。
    • 流畅性和延迟(直接测试系统的延迟,比如用一个主机模仿用户测试)直接给出了结果,详见论文。
  • 结论:本文方法的局限性包括大型 LM 的计算约束和训练数据的可用性。虽然允许控制个别学生的难度,但它留下了使用难度导向问题生成优化课程设计的问题。

总结

  • 难度可控的问题生成主要的思路都是这几个方面:
    • 改进对难度等级的定义,目前比较好的是使用图结构。
    • 创建能够更好提供多难度训练的数据集。
    • 使用更好的预训练模型。
    • 使用特定的知识图谱,对具体领域进行应用
    • 或者如教育领域,用随时间变化的结果来描述困难,进行具体应用

以上只是自己的猜想,具体还要进行可行性验证。