我尝试构建一个相当于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,但它没有回答我的问题:
答案 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,他们正好使用这种方法。