Dense embedding model 和 sparse embedding model 对比

Dense embedding modelsparse embedding model 都是将高维稀疏向量嵌入到低维稠密向量的技术,常用于自然语言处理 (NLP) 任务中。两种模型的主要区别在于它们如何表示嵌入向量:

Dense embedding model 使用稠密向量来表示每个单词或短语。每个维度的值代表该单词或短语在语义空间中对应方面的重要性。例如,一个维度的值可能表示该单词的积极性或消极性,另一个维度的值可能表示该单词的正式程度或非正式程度。

Sparse embedding model 使用稀疏向量来表示每个单词或短语。只有少数维度的值是非零的,这些值代表该单词或短语在语义空间中的重要特征。例如,一个单词的嵌入向量可能只有几个非零维度,表示该单词与其他几个单词的语义相关性很强。

以下是一些 dense embedding model 和 sparse embedding model 的优缺点比较:

特性Dense embedding modelSparse embedding model
参数数量更多更少
计算成本更高更低
稀疏性更低更高
可解释性更低更高

drive_spreadsheet导出到 Google 表格

Dense embedding model 的优点是能够捕捉到单词或短语在语义空间中的更细粒度信息。但是,它们的参数数量更多,计算成本也更高。

Sparse embedding model 的优点是参数数量更少,计算成本更低。但是,它们可能无法捕捉到单词或短语在语义空间中的所有信息。

在实际应用中,哪种模型更好取决于具体的任务和数据集。 如果数据集很大,并且计算资源充足,那么 dense embedding model 可能是更好的选择。如果数据集较小,或者计算资源有限,那么 sparse embedding model 可能是更好的选择。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以将最佳权重保存路径添加到代码中,如下所示: ```python import numpy as np import tensorflow as tf import os # 加载数据集 with open('poems.txt', 'r', encoding='utf-8') as f: data = f.read() # 构建词典 vocab = sorted(set(data)) char2idx = {char: idx for idx, char in enumerate(vocab)} idx2char = np.array(vocab) # 将文本数据转换为数字 text_as_int = np.array([char2idx[c] for c in data]) # 定义训练数据和标签 seq_length = 100 examples_per_epoch = len(data) // (seq_length + 1) char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int) sequences = char_dataset.batch(seq_length + 1, drop_remainder=True) def split_input_target(chunk): input_text = chunk[:-1] target_text = chunk[1:] return input_text, target_text dataset = sequences.map(split_input_target) BATCH_SIZE = 128 BUFFER_SIZE = 10000 dataset = dataset.shuffle(BUFFER_SIZE).batch(BATCH_SIZE, drop_remainder=True) # 构建模型 vocab_size = len(vocab) embedding_dim = 256 rnn_units = 1024 def build_model(vocab_size, embedding_dim, rnn_units, batch_size): model = tf.keras.Sequential([ tf.keras.layers.Embedding(vocab_size, embedding_dim, batch_input_shape=[batch_size, None]), tf.keras.layers.GRU(rnn_units, return_sequences=True, stateful=True, recurrent_initializer='glorot_uniform'), tf.keras.layers.Dense(vocab_size) ]) return model model = build_model( vocab_size=len(vocab), embedding_dim=embedding_dim, rnn_units=rnn_units, batch_size=BATCH_SIZE) # 定义损失函数 def loss(labels, logits): return tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True) # 编译模型 model.compile(optimizer='adam', loss=loss) # 定义检查点 checkpoint_dir = './training_checkpoints' checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_{epoch}") checkpoint_callback=tf.keras.callbacks.ModelCheckpoint( filepath=checkpoint_prefix, save_weights_only=True) # 定义最佳权重检查点 BEST_MODEL_PATH = './best_model.h5' best_checkpoint = tf.keras.callbacks.ModelCheckpoint(BEST_MODEL_PATH, monitor='val_loss', save_best_only=True, mode='min', save_weights_only=True) # 训练模型 EPOCHS = 50 history = model.fit(dataset, epochs=EPOCHS, callbacks=[checkpoint_callback, best_checkpoint]) # 生成诗歌 def generate_text(model, start_string): num_generate = 100 input_eval = [char2idx[s] for s in start_string] input_eval = tf.expand_dims(input_eval, 0) text_generated = [] temperature = 1.0 model.reset_states() for i in range(num_generate): predictions = model(input_eval) predictions = tf.squeeze(predictions, 0) predictions = predictions / temperature predicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy() input_eval = tf.expand_dims([predicted_id], 0) text_generated.append(idx2char[predicted_id]) return (start_string + ''.join(text_generated)) # 加载检查点 model = build_model(vocab_size, embedding_dim, rnn_units, batch_size=1) model.load_weights(BEST_MODEL_PATH) model.build(tf.TensorShape([1, None])) # 生成一首诗 print(generate_text(model, start_string=u"山中")) ``` 现在,模型将保存最佳的权重到文件 `best_model.h5`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值