如何使用word2vec嵌入设计word-RNN模型的输出层

时间:2017-10-08 10:42:00

标签: python tensorflow neural-network recurrent-neural-network word2vec

我尝试构建一个相当于Char-RNN的Word-RNN,网络应该在句子中生成下一个单词。

作为输入,我使用预训练的word2vec 100-dim向量,隐藏层大小为200.我的主要问题是输出层,它应该如何设计?

在char-rnn中,输出它是具有char概率分布(softmax)的词汇量大小(唯一字符的数量)向量。因此,生成下一个char只是从此分布中采样。 但是当我的单词词汇量超过300k时使用word2vec这种方法是不可行的。

我的输出是否应该生成100-dim向量然后我应该使用gensim similar_by_vector function

找到最近的相似单词

你能提供一些好的和易于理解的python和tensorflow实现,一些链接到github或发布。

我找到了similar question,但它没有回答我的问题:

1 个答案:

答案 0 :(得分:1)

您可以输出单词的索引(每个示例),从而避免单热词表示(确实非常大)。使用tf.contrib.legacy_seq2seq.sequence_loss_by_example

  

一系列logits的加权交叉熵损失(每个示例)。

     
      
  • logits:形状的2D张量列表[batch_size x num_decoder_symbols]。
  •   
  • targets:与logits长度相同的1D批量大小的int32张量列表。
  •   
  • weight:1D批量大小的列表   float-tensors与logits相同的长度。
  •   

请注意,它并没有减小模型的大小,但它通过计算稀疏编码标签的损失来节省大量内存。可以找到word-rnn实现的完整示例here,他们正好使用这种方法。