传统文本生成(如 GPT 系列)依赖大规模语料训练,生成内容具有随机性,难以满足工业级应用的精确需求。而可控文本生成(Controllable Text Generation)指通过预设约束条件或引导信号,使 AI 模型生成符合特定要求的文本内容。这些 “可控” 维度包括但不限于:主题(科技新闻, 医学报告等), 风格(正式或口语化, 幽默或严肃), 格式(诗歌, 电邮, 代码等), 语义属性(情感倾向, 信息量, 逻辑结构等).

可控文本生成技术

可控文本生成核心原理

将控制信号作为模型输入的一部分,通过 n-gram 条件概率模型建模生成过程。

\[P(y|x,c) = \Pi^T_{t=1}P(y_t|y_{\lt t}, x, c)\]

其中, $x$ 为输入文本, $c$ 为控制信号(标签, 提示词等), $y$ 为生成文本.

常规可控文本生成方法

  1. 基于输入条件的显式控制

    • 提示工程: 通过精细化设计的提示词指定生成要求, 此处 $c$ 就是提示词指令.

      例如: 以莎士比亚风格写一首关于人工智能的十四行诗,要求押韵且包含‘机器之心’一词

    • 条件编码: 将控制信号(如情感标签 “积极”)转化为 multi-hot 向量,与输入文本一同输入编码器(如 BERT),引导模型生成对应内容。

  2. 基于模型干预的隐式控制

    • 参数微调: 使用带标签的数据集对预训练模型进行微调, 例如: 使用 “正式邮件” 语料微调模型以生成商务文本.

    • 推理时干预: 在模型生成过程中修改隐藏层表示,例如通过调整 Transformer 的注意力权重控制生成文本的长度或主题集中度.

  3. 基于强化学习的动态控制

    基于生成文本与控制目标的匹配度设计奖励函数, 例如:

    • 主题相关性: 生成文本是否属于某一主题.

    • 格式合规性: 生成文本是否是合法 JSON 格式.

技术挑战和前沿研究

  1. 多模态可控生成: 结合图像、音频等信息进行文本生成.

  2. 基于知识图谱的可控生成: 将结构化知识(实体关系图谱等), 作为控制信号, 确保生成内容的事实准确性.

Conditional Transformer Language Model (CTRL): 基于条件 Transformer 的可控文本生成模型

Paper: https://doi.org/10.48550/arXiv.1909.05858

CTRL(Conditional Transformer Language Model)的核心目标是解决传统语言模型的不可控问题,通过引入控制代码(control codes) 实现对生成过程的显式调节。这些控制代码可直接指定生成文本的领域(如维基百科、亚马逊评论)、风格(恐怖故事、学术论文)、任务类型(问答、翻译),甚至实体关系和日期等细粒度特征。例如,用户只需输入对应控制代码(如 Reviews Rating: 4.0),模型即可生成符合该领域和评分要求的评论,而无需依赖复杂的提示词设计。这种控制方式将传统模型的 “隐式引导” 转化为 “显式指令”,大幅提升了生成过程的可预测性。

方法论

CTRL 采用基于 Transformer 的条件语言模型架构,核心创新在于将控制代码作为条件输入融入生成过程:

  1. 条件概率建模: 常规语言模型如 GPT 学习文本的概率分布 $p(x)$, 而 CTRL 学习条件概率 $p(x | c)$, 其中 c 为控制代码, 概率分解如下:

    \[p(x|c) = \Pi^n_{i=1}p(x_i|x_{\lt i}, c)\]

    训练的目标函数 (此处为损失函数) 则是负对数似然函数 (此处是对数概率):

    \[\textbf{L}(D) = - \sum^{|D|}_{k=1}logp_{\theta}(x^k_i|x^k_{\lt i}, c^k)\]
  2. 输入处理

    控制代码 $c$ 作为序列的首个 token,与原始文本一同嵌入。每个 token 的嵌入由学习到的词嵌入和正弦位置嵌入 (把这里换成 RoPE 矩阵算不算创新点?) 叠加而成.

  3. 网络结构

    模型包含 48 层 Transformer,每层由多头注意力(16 头)和前馈网络组成。多头注意力使用因果掩码避免关注未来 token,前馈网络采用 ReLU 激活,内层维度为 8192。每层引入层归一化和残差连接,提升训练稳定性。

控制代码的设计是 CTRL 实现可控生成的关键,其核心原则是从训练数据的自然结构中提取,而非人工设计。具体来源包括:

  1. 领域相关代码: 如 Wikipedia、Project Gutenberg、亚马逊评论等大规模语料库对应独立控制代码;Reddit 子版块数据则使用 r/subdomain 格式(如 r/science

  2. 任务相关代码: 问答 Questions, 翻译 Translation 等任务对应的专用控制代码, 可与领域代码结合使用, 例如 Translation English: French: + Reviews

  3. URL 结构代码: OpenWebText 数据集中的 URL 被用作控制代码,其结构(如域名、路径、日期)被模型学习,支持通过自定义 URL 生成特定主题内容(如https://www.cnn.com/2023/01/science 生成科技新闻)。

除了模型创新外, 为解决传统采样方法中 “贪婪采样易重复” 与 “随机采样易偏离” 的矛盾,CTRL 提出了另一个创新点, 也就是带惩罚的采样策略:

\[p_i = \frac {exp(x_i / (T \cdot I(i \in g)))} {\sum_j exp(x_j / (T \cdot I(j \in g)))}\]

其中 $g$ 为已生成序列, $I(i \in g)$ 为指示函数, 当 token 已生成时惩罚其得分. 该方法在保证生成真实性的同时减少重复, 由于传统 top_k 或核采样 (top_p).

CTRL 的贡献

  1. 多维度可控文本生成

    • 领域控制: 通过领域代码生成不同领域文本

      • Wikipedia: 生成百科全书式条目.

      • Horror: 生成恐怖故事.

      • Review Rating: 5.0: 生成正面产品评论.

    • 风格控制: 同一领域可通过子代码调整风格

      • Books Genre: Science Fiction: 生成科幻小说片段.

      • New Tone: Opinion: 生成观点类新闻文章.

      • Poetry Style: Shakespearean: 生成莎士比亚风格十四行诗.

    • 任务控制: 支持多种自然语言处理任务

      • 问答: Questions Q: What is AI? A: Completion 生成问题答案.

      • 翻译: Translation English: Spanish: The sun rises in the east. 生成西班牙语翻译.

      • 摘要: Summarize Article: [原文] 生成文本摘要.

  2. 零样本跨领域任务

    通过混合代码实现跨领域任务

    • 领域 + 任务混合: Science + Questions 生成科学领域的问答对.

    • 多语言混合: French Literature + Translation to German 生成德语的法国文学片段.

    • 实体关系控制: 通过 URL 中的实体参数生成相关内容, https://www.bio.com/Marie_Curie 生成居里夫人的传记段落.

  3. 源归因分析

    CTRL 的源归因功能可分析生成文本与训练数据各子集的相关性, 例如输入一段关于 “人工智能伦理” 的文本,模型可输出其最可能源自的 Reddit 子版块.

  4. 长文本生成和上下文一致性维护

    通过滑动窗口技术和改进的采样策略,CTRL 可生成超出训练序列长度的连贯文本,且保持上下文一致性, 例如生成多段落的小说章节,各段落风格、主题一致, 续写新闻报道,后续段落与开头事件描述连贯, 生成多轮对话,保持角色语气和话题一致性…