schema that we outline here and we provide insights into their similarities. We provide an overview of these modules and also present an exploration of the various techniques used to control and update each of these modules.

Most of the controllable text generation tasks can be framed as conditional language generation tasks. They have an input or a [*source*]{} sequence ${\mathbf{U}}$ and an output or a [*target*]{} sequence ${\mathbf{Y}}$ to be generated. In this case, we model the probability of the [*target*]{} sequence conditioned on the [*source*]{} sequence given by $P({\mathbf{Y}} | {\mathbf{U}}) = \prod^T_t P({\mathbf{y}}_t |{\mathbf{U}}, {\mathbf{y}}_{<t})$. The generation of the target tokens of the sequence ${\mathbf{Y}}$ unfolds as a time series where each token ${\mathbf{y}}_t$ is generated at a time step ${\mathbf{t}}$. At a given time step $t$, a generative model takes in the previous hidden state ${\mathbf{h}}_{t-1}$ and the input ${\mathbf{x}}_t$ at current time step. It performs a set of operations denoted by $\boldsymbol{G}$ to produce the output ${\mathbf{o}}_t$ which is used to predict token ${\mathbf{\hat{x}}}_t$. The ground truth token to be generated is denoted by ${\mathbf{y}}_t$. As shown in Figure \[fig:bg-overview\], we have identified the following five modules for controlling the generation process: (1) [**External Input**]{} 