0%

SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning

论文概要

主要描述一下该论文 column attention。

Sequence-to-set

直观地说,where 子句中出现的列名是所有列名的子集。因此,我们可以仅仅预测子集中的列名,而不是生成列名序列(博主注:他的意思可能是,不要将 sql 语句中 "select Column A, Column B, Column C..." 的 "Column A, Column B, Column C..." 当做生成序列的任务,而是将其当做 slot filling)。我们把这个想法称为 sequence-to-set 的预测。 尤其是我们计算 \(P_{wherecol}(col|Q)\),其中 col 是列名,q 是自然语言问题。为此,将计算 \(P_{wherecol}(col|Q)\) 表达为 \[ P_{wherecol}(col|Q) = \sigma(u^T_c E_{col} + u^T_q E_Q) \] 其中 \(\sigma\) 是 sigmoid 函数,\(E_{col}\)\(E_Q\) 分别是 column name 和自然语言问题的嵌入, \(u_c\)\(u_q\) 是两个可训练的列向量。。。(后面还有一大段话省略了,主要看 column attention

Column attention

上一节的 \(P_{wherecol}(col|Q)\) 的计算公式在使用 \(E_Q\) 上有一个问题,因为只计算了自然语言语句的隐藏状态,它也许不能记住在预测特定列名时有用的特定信息。。。(后面举了个例子) 为了融入这一直觉,我们设计了 column attention 机制去计算 \(E_{Q|col}\) 来代替 \(E_Q\)。假定 \(H_Q\) 是 dxL 的矩阵,L 代表自然语言问题的长度。\(H_Q\) 的第 i 列代表问题中对应的第 i 个 token 的 LSTM 的隐藏状态输出。 我们对问题中的每一个 token 都计算 attention weight w,w 是 L 维的列向量(博主注:此处应该指的是在计算一个 token 的情况下,论文中未详细指明,仅为猜测)。计算公式如下: \[ \begin{aligned} w & = softmax(v) \\ v_i & = (E_{col})^T W H^i_Q \qquad \forall i \in {1, \dots, L} \\ \end{aligned} \] \(v_i\) 表示 v 的第 i 维,\(H^i_Q\) 表示 \(H_Q\) 的第 i 列,W 是一个 dxd 大小的可训练矩阵。 在 attention weights w 被计算出来之后,我们可以基于 w 计算 \(E_{Q|col}\),作为每个 token 的隐藏输出的加权和,此处的隐藏状态指 LSTM 上的(这句话极其的绕,懒得解释了。只需要注意一点,这句话是在计算一个单词的情况下,而并非计算整个 question)。 \[ E_{Q|col} = H_Q w \]Sequence-to-set 中的表达式,我们可以将 \(E_Q\) 替换为 \(E_{Q|col}\),以获得 column attention model。 \[ P_{wherecol}(col|Q) = \sigma(u^T_c E_{col} + u^T_q E_{Q|col}) \] (下面的略)

博主注

论文中似乎没有很明确地说明 column 的 embedding 是如何训练的。但是这一环很重要,因为这篇论文是关于 wikiSQL 数据集,训练 seq2sql 的比较前的论文,也就是说后面的论文有一些就是使用这篇论文的方法。所以这一点没搞懂,导致也看不懂其他的论文。