超越Xcode界面:用命令行和文本编辑器深度管理iOS应用的entitlements
2026/6/4 19:25:58
本文我将带你深入了解如何使用循环神经网络(RNN)和Transformer生成序列数据,特别是文本生成。我们将探索这一技术的历史发展、核心原理,并通过完整的代码实现一个基于Transformer的文本生成模型。
语言模型的核心是给定前面的词元(单词或字符),预测序列中下一个词元的概率分布。
生成过程:
温度(Temperature)参数控制采样分布的熵:
温度调整公式:
importnumpyasnpdefreweight_distribution(original_distribution,temperature=1.0):distribution=np.log(original_distribution)/temperature distribution=np.exp(distribution)returndistribution/np.sum(distribution)importtensorflowastffromtensorflowimportkerasfromtensorflow.kerasimportlayers# 创建数据集batch_size=32sequence_length=100text_ds=tf.keras.utils.text_dataset_from_directory("aclImdb",label_mode=None,batch_size=batch_size)# 文本向量化vocab_size=15000text_vectorization=layers.TextVectorization(max_tokens=vocab_size,output_mode="int",output_sequence_length=sequence_length+1)与传统的"预测下一个单词"不同,我们使用序列到序列方法:
classTransformerDecoder(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()defget_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))returntf.tile(mask,[batch_size,1,1])classTextGenerator(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_everydefon_epoch_end(self,epoch,logs=None):if(epoch+1)%self.print_every!=0:returnprint(f"\n=== 第{epoch+1}轮 ===")fortemperatureinself.temperatures:print(f"\n温度:{temperature}")generated_text=self.generate_text(temperature)print(generated_text)以下是完整的文本生成模型实现:
# 完整代码见上方技术文章部分# 包含:数据准备、模型定义、训练循环、文本生成训练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当前的语言模型存在几个重要限制:
随着模型规模的增长和训练数据的扩充:
温度选择:
提示工程:
迭代优化:
文本生成技术已经从学术研究走向实际应用,为内容创作、对话系统、代码生成等领域提供了强大工具。然而,我们需要清醒认识到当前技术的局限性,既要充分利用其能力,也要理解其边界。
随着技术的不断发展,我们期待看到更加智能、更加理解人类意图的生成模型出现。在这个过程中,掌握基本原理和实践技能将帮助我们在AI时代保持竞争力。