我正在将词向量模型应用于在线新闻文章。因为我每天都能收到新文章,所以我不能知道“真实”的词汇量。
假设我现在有10篇文章,词汇量为1000。我将单词嵌入矩阵初始化为[1000, emb_size]形状,并基于10篇文章训练模型。在这之后,我得到了一篇有5个新词的新文章,所以词汇量变成了1005。为了用额外的文章训练模型,我必须保留旧的嵌入矩阵,并在底部添加5行新行,即[1005, emb_size]的形状。
嵌入矩阵最初是通过以下方式创建的:
self.word_embedding = tf.get_variable(
name = 'word_embedding',
shape = [1000, opts.embed_size],
initializer = tf.random_uniform_initializer(-init_width, init_width)
)我通过以下方式更新矩阵:
old_word_embedding = self.word_embedding
new_word_embedding = tf.get_variable(
name = 'new_word_embedding',
shape = [5, opts.embed_size],
initializer = tf.random_uniform_initializer(-init_width, init_width)
)
tf.initialize_variables([add_word_embedding]).run()
self.word_embedding = tf.Variable(tf.concat(0, [old_outside_embedding, new_outside_embedding]), name = 'word_embedding')如果我使用print self.word_embedding.get_shape(),它确实会给出正确的形状[1005, embsize]。但是,当模型开始训练新文章时,它会给我一个错误:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Aborted我想知道是不是因为这句话:
center_emb = tf.nn.embedding_lookup(self.word_embedding, center)
在哪里embedding_lookup仍然使用旧的[1000, embed_size]嵌入矩阵?如果是这样,如何让它使用新的self.word_embedding
发布于 2016-11-04 09:54:04
您可以使用tf.pad()在维度上展开。
https://stackoverflow.com/questions/40414045
复制相似问题