Как использовать tf.nn.embedding_look () когда увеличится первый тусклый цвет матрицы вложений?

Я применяю векторную модель слова к новостным статьям в интернете. Поскольку я могу получать новые статьи каждый день, я не смогу узнать «истинный» размер словаря.

Скажем, у меня есть 10 статей сейчас и есть словарь 1000. Я инициализирую матрицу встраивания слова в форму [1000, emb_size]и обучаю модель на основе 10 статей. После этого я получаю 1 новую статью, в которой есть 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?

1 ответ