---
# System prepended metadata

title: 讨论 2021-12-09
tags: [Fudan, '2021', tutorials]

---

讨论 2021-12-09
=
###### tags: `tutorials` `Fudan` `2021`

# 文本生成简述

## 语言模型
语言模型探究的是文本生成中最基础的问题，如何产生一句自然语言的句子。假设存在一个句子空间，其中每一个点都是一个真实的自然语言的句子，那么求解这个分布的任务就是语言模型。顾名思义，语言模型是一个描述语言本身的模型。

目前主流的语言模型都采用了全概率公式进行分解，这不是必要的，但很方便和有效。

\begin{align}
P(w_1,w_2,\cdots,w_n) = P(w_0) \prod_t P(w_t|w_{<t})
\end{align}

其实语言模型本身并没有要求采样功能，即我们训练一个模型，把整句话作为输入，只输出一个标量表示其存在的概率也是一个语言模型，不过此时的语言模型是不利于采样的。因为我们很难知道哪些句子概率高，哪些低，也就无从采样。

## 条件文本生成
语言模型本身难以完成复杂任务，因为大部分情况下我们需要机器按照我们的某种需求去生成文本而不是随意说一些流畅但跑题的句子。而条件文本生成有更多的使用价值，比如翻译，比如摘要。条件文本生成即在一定的已知条件下进行文本生成
也就是$P(w_1,w_2,\cdots,w_n|C)$，而其中又有三种不同的表达条件的方法

- 作为初值或一次性条件
- 作为背景，在每一步生成都发挥作用
- 作为素材，供注意力机制选取

这几种方法的适用方法有一定的区别，比如时态，情感的信息就更适合作为背景，而多个条件，每次只关注某个的情况就符合注意力机制的功能。

## 可控文本生成
除上述两种生成外，目前还有一个比较流行的文本生成任务，可控生成，其特点是给出一定条件，但仍留有较大的自由发挥空间。与语言模型相比，可控文本生成有明确的的条件和约束，要求生成的内容必须涵盖某些内容或符合某种模式。与条件文本生成相比，可控文本生成的条件又粗略了一些，一般在条件文本生成中不太要求自由发挥，比如翻译，只要翻译对就可以。而可控文本生成通常留有比较大的空间，比如给一个故事主干，补全内容等。
![](https://i.imgur.com/TckzhE8.png)

## 解码方向
一个序列的生成顺序是身份多样的，从左到右是一种非常自然也非常有效的方式，但探讨其他顺序也有着相应的道理。另外，语言模型中总会设计两个问题，一是生成顺序，一个估计句子概率的顺序，这两者有很深的联系，但又有所不同。
https://aclanthology.org/D18-1324.pdf
![](https://i.imgur.com/DwWOBqY.png)

此外，包括Mask language model在内的 infilling 范式采用了一种不同的理解，他们无法直接求出句子的概率。其对应的生成过程也是Gibbs Sampling
\begin{align}
P(w_i|w_{-i})
\end{align}
## 解码算法

### 马尔可夫条件
马尔可夫条件是一个非常强的假设，其假定序列中的第t次决策只和t-1的状态相关，与t-2到更之前的状态都无关。这种性质也叫作无后效性，即所作出的决定只影响下一步而不在影响后续决策。

$P(x_t|x_{<t}) = P(x_t|x_{t-1})$


- 不合符条件可以创造条件，类似状态压缩动态规划的做法，对于有后效性的状态，可以把多个状态合并成一个状态，直到没有后效性为止，但这种压缩会使状态空间变得很大，最终退化。
- 可以把原问题拆分，保证局部最优就是全局最优，不管是估计参数还是解码都十分简单，迅速。

### 维特比解码
对于任意有向无环图（DAG），我们可以利用动态规划的思想，对任意点的转移方程即是前驱节点的代价加上从该节点转移过来之和的最优者。

![](https://i.imgur.com/Rwu4hSG.png)

### beam search
脱离了马尔可夫条件之后，虽然能建模更加复杂的规律，但也引入了后效性，导致无法用维特比算法解码（也用不起，词表过大，意味着状态数太多）。beam search是对贪心算法的拓展，每次保留Top-K种方案。虽然是贪心算法，但beam search实际效果很好，并且保留的方案数也不需要很多，这要是序列的每个决策实际上只集中在少数几个选择上。（其余大部分选项趋于0）

Beam search的变种很多，有局部打分，全局打分，保持活性等众多不同修改。但遗憾的是这些改进的超参数通常只适用于某一个数据集。

### decoding penalty
![](https://i.imgur.com/PAoTgjx.png =500x)
其中lp为length penalty，cp为coverage penalty，$p_{i,j}$为Attention score。可以看到，在生成时我们鼓励长句子和高覆盖。
其中超参设置可参见https://arxiv.org/pdf/1609.08144.pdf

$$ep(X,Y) = \gamma \frac{|X|}{|Y|}$$
另外还有对EOS的控制，希望翻译得到的句子长度和原句符合一定的比例关系。

## 非概率模型的文本生成

文本生成中有一类工作认为新的文本可以通过不断地修改得到，即不停的增加，和删除词语来形成新的句子。

![](https://i.imgur.com/CmzvB8t.png)
