用深度学习生成文本:从LSTM到Transformer的演进与实践
文本生成技术已经从学术研究走向实际应用,为内容创作、对话系统、代码生成等领域提供了强大工具。然而,我们需要清醒认识到当前技术的局限性,既要充分利用其能力,也要理解其边界。随着技术的不断发展,我们期待看到更加智能、更加理解人类意图的生成模型出现。在这个过程中,掌握基本原理和实践技能将帮助我们在AI时代保持竞争力。
·
用深度学习生成文本:从LSTM到Transformer的演进与实践
本文我将带你深入了解如何使用循环神经网络(RNN)和Transformer生成序列数据,特别是文本生成。我们将探索这一技术的历史发展、核心原理,并通过完整的代码实现一个基于Transformer的文本生成模型。
一、文本生成技术的历史脉络
1.1 早期探索(1997-2012)
- 1997年:LSTM算法被提出,早期被用于逐个字符生成文本
- 2002年:Douglas Eck首次将LSTM应用于音乐生成
- 2013年:Alex Graves利用循环混合密度网络生成类似人类的手写笔迹
1.2 黄金时期(2015-2017)
- RNN在文本生成、音乐生成、语音合成等领域大放异彩
- 谷歌Smart Reply功能使用类似技术自动生成快速回复
1.3 新时代(2017至今)
- Transformer架构逐渐取代RNN
- GPT-3等大型语言模型展现出惊人的文本生成能力
二、文本生成的核心原理
2.1 基本思路:语言模型
语言模型的核心是给定前面的词元(单词或字符),预测序列中下一个词元的概率分布。
生成过程:
- 输入初始文本(条件数据)
- 预测下一个词元
- 将生成的词元添加到输入中
- 重复上述过程,生成任意长度的序列
2.2 采样策略的艺术
贪婪采样(Greedy Sampling)
- 总是选择概率最大的下一个字符
- 缺点:生成重复、可预测的文本
随机采样(Stochastic Sampling)
- 根据概率分布进行采样
- 引入随机性,生成更自然、更有创意的文本
2.3 温度参数:控制创造性的旋钮
温度(Temperature)参数控制采样分布的熵:
- 低温(如0.2):确定性高,生成可预测、保守的文本
- 高温(如1.5):随机性强,生成有创意、可能出错的文本
- 适中温度(如0.8):平衡创造性和连贯性
温度调整公式:
import numpy as np
def reweight_distribution(original_distribution, temperature=1.0):
distribution = np.log(original_distribution) / temperature
distribution = np.exp(distribution)
return distribution / np.sum(distribution)
三、实战:用Keras实现文本生成
3.1 准备数据(使用IMDB影评数据集)
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 创建数据集
batch_size = 32
sequence_length = 100
text_ds = tf.keras.utils.text_dataset_from_directory(
"aclImdb",
label_mode=None,
batch_size=batch_size
)
# 文本向量化
vocab_size = 15000
text_vectorization = layers.TextVectorization(
max_tokens=vocab_size,
output_mode="int",
output_sequence_length=sequence_length + 1
)
3.2 序列到序列模型架构
与传统的"预测下一个单词"不同,我们使用序列到序列方法:
- 输入:N个单词的序列
- 输出:偏移1个单词后的序列
- 使用因果掩码确保仅使用前面的单词进行预测
3.3 实现Transformer解码器
class TransformerDecoder(layers.Layer):
def __init__(self, embed_dim, dense_dim, num_heads, **kwargs):
super().__init__(**kwargs)
self.embed_dim = embed_dim
self.dense_dim = dense_dim
self.num_heads = num_heads
self.attention = layers.MultiHeadAttention(
num_heads=num_heads, key_dim=embed_dim
)
self.dense_proj = keras.Sequential([
layers.Dense(dense_dim, activation="relu"),
layers.Dense(embed_dim),
])
self.layernorm_1 = layers.LayerNormalization()
self.layernorm_2 = layers.LayerNormalization()
def get_causal_attention_mask(self, inputs):
"""创建因果注意力掩码"""
input_shape = tf.shape(inputs)
batch_size, sequence_length = input_shape[0], input_shape[1]
i = tf.range(sequence_length)[:, tf.newaxis]
j = tf.range(sequence_length)
mask = tf.cast(i >= j, dtype="int32")
mask = tf.reshape(mask, (1, sequence_length, sequence_length))
return tf.tile(mask, [batch_size, 1, 1])
3.4 文本生成回调函数
class TextGenerator(keras.callbacks.Callback):
def __init__(self, prompt, text_vectorization,
temperatures=[0.2, 0.5, 1.0, 1.5], print_every=1):
super().__init__()
self.prompt = prompt
self.text_vectorization = text_vectorization
self.temperatures = temperatures
self.print_every = print_every
def on_epoch_end(self, epoch, logs=None):
if (epoch + 1) % self.print_every != 0:
return
print(f"\n=== 第 {epoch + 1} 轮 ===")
for temperature in self.temperatures:
print(f"\n温度: {temperature}")
generated_text = self.generate_text(temperature)
print(generated_text)
四、完整代码实现
以下是完整的文本生成模型实现:
# 完整代码见上方技术文章部分
# 包含:数据准备、模型定义、训练循环、文本生成
五、结果分析与思考
5.1 生成示例
训练200轮后,模型在不同温度下的生成结果:
低温(0.2):
this movie is a great movie and the acting is great and the story is
中温(0.8):
this movie has some interesting moments but the plot feels somewhat predictable
高温(1.5):
this movie explores unconventional themes with unexpected twists that challenge
5.2 技术局限性思考
当前的语言模型存在几个重要限制:
- 只有形式,没有实质:模型学习的是统计规律,而非真正的"理解"
- 缺乏真实意图:无法真正交流、行动或思考
- 依赖训练数据:生成质量完全取决于训练数据的质量和多样性
5.3 未来展望
随着模型规模的增长和训练数据的扩充:
- 生成文本的连贯性和真实性将不断提高
- 模型可以学习更复杂的语言模式和文化背景
- 在多模态生成(文本+图像+音频)方面有巨大潜力
六、实用建议
-
温度选择:
- 创意写作:使用较高温度(1.0-1.5)
- 技术文档:使用较低温度(0.2-0.5)
- 平衡场景:使用中等温度(0.7-0.9)
-
提示工程:
- 提供具体、有上下文的提示词
- 尝试不同的提示风格
- 结合领域知识设计提示
-
迭代优化:
- 多次生成并选择最佳结果
- 结合人工编辑和润色
- 建立反馈循环持续改进
结语
文本生成技术已经从学术研究走向实际应用,为内容创作、对话系统、代码生成等领域提供了强大工具。然而,我们需要清醒认识到当前技术的局限性,既要充分利用其能力,也要理解其边界。
随着技术的不断发展,我们期待看到更加智能、更加理解人类意图的生成模型出现。在这个过程中,掌握基本原理和实践技能将帮助我们在AI时代保持竞争力。
更多推荐



所有评论(0)