【问题标题】:Word Embedding for Convolution Neural Network卷积神经网络的词嵌入
【发布时间】:2016-07-07 10:28:18
【问题描述】:

我正在尝试将 word2vec 应用于卷积神经网络。我是 TensorFlow 的新手。这是我的预训练层代码。

W = tf.Variable(tf.constant(0.0, shape=[vocabulary_size, embedding_size]),
                trainable=False, name="W")
embedding_placeholder = tf.placeholder(tf.float32, [vocabulary_size, embedding_size])
embedding_init = W.assign(embedding_placeholder)
sess = tf.Session()
sess.run(embedding_init, feed_dict={embedding_placeholder: final_embeddings})

我想我应该使用embedding_lookup,但不知道如何使用它。我真的很感激有人可以提供一些建议。

谢谢

【问题讨论】:

    标签: tensorflow conv-neural-network word2vec


    【解决方案1】:

    Tensorflow 有一个使用 word2vec-cnn 进行文本分类的例子:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/skflow/text_classification_cnn.py

    【讨论】:

    • 感谢您的回复。他们的代码差别不大。他们使用 onehot 向量对单词进行编码,而不是真正的 word2vec 在这一行中:我可以用 final_embedded 更改它吗? byte_list = tf.reshape(learn.ops.one_hot_matrix(x, 256), [-1, MAX_DOCUMENT_LENGTH, 256, 1])
    【解决方案2】:

    你在正确的轨道上。由于embedding_lookup 在假设单词表示为整数 id 的情况下工作,因此您需要转换输入向量以符合此要求。此外,您需要确保转换后的单词正确索引到嵌入矩阵中。我所做的是使用从嵌入模型生成的有关索引到单词映射的信息(我使用 gensim 来训练我的嵌入)来创建一个单词到索引查找表,我随后用它来转换我的输入向量.

    【讨论】:

    • 谢谢 Frobb,我很高兴听到这个消息。我尝试使用 "embedding_lookup" ,但是我在传递参数时遇到了麻烦。我有标记的训练数据,我使用 word2vec_basic.py 来预训练我的数据。我在许多网站上读到有人说我必须将词向量映射到字典。像这样embedded_chars = tf.nn.embedding_lookup(W,dictionary) 但它给出了错误,与张量的维度有关,我试图用'data'或'reverse_dictionary'更改变量'dictionary'但没有帮助。你能给我任何建议吗?谢谢
    • embedding_lookup 的第二个参数应该是包含输入数据的张量。查看@Kashyap 提供的博客文章,您会看到第二个参数是(批量)输入的占位符张量。您只需确保输入数据中的单词已根据我之前提到的单词到索引方案转换为整数。
    • 在博客中,作者说“将词汇词索引映射到低维向量表示”。在“word2vec_basic.py”中,变量“data”存储字典的索引。所以我这样做了:embedded_chars = tf.nn.embedding_lookup(W, data) 我运行它,它没有给出任何错误。你认为这是一个正确的方法吗?谢谢
    • 我不确定我是否跟随。我以前没有使用过此代码,但似乎word2vec_basic.pydata 变量(如果您指的是this 源代码?)包含解压缩原始数据的word-to-index-transformed 版本包含在words 变量中。这是您要输入 CNN 嵌入层的内容吗?
    • 是的,这就是我使用的代码,我尝试将索引与我创建的“重量”相匹配。这是完整代码W = tf.Variable(tf.constant(0.0, shape=[vocabulary_size, embedding_size]), trainable=False, name="W")embedding_placeholder = tf.placeholder(tf.float32, [vocabulary_size, embedding_size]) embedding_init = W.assign(embedding_placeholder)sess = tf.Session()sess.run(embedding_init, feed_dict={embedding_placeholder: final_embeddings})embedded_chars = tf.nn.embedding_lookup(W, data)embedded_chars_expanded = tf.expand_dims(embedded_chars, -1)
    【解决方案3】:

    我正在做类似的事情。我偶然发现了这个实现论文“用于句子分类的卷积神经网络”的博客。这个博客很好。 http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

    【讨论】:

    • 是的,我看到了,但他们不使用词嵌入。
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2016-10-20
    • 2020-10-07
    • 2020-10-19
    • 2020-10-19
    相关资源
    最近更新 更多