【问题标题】:How to use tflearn deep learning for document classification如何使用 tflearn 深度学习进行文档分类
【发布时间】:2017-06-11 04:20:50
【问题描述】:

我正在使用 tflearn 和 tensorflow 对文档进行分类。但是我面临文档大小和训练时间的问题,我最大的文档长度约为 98000 字,使用它来构建网络将非常耗时。我正在寻找不同的方法来减少数据的维度或一些足够快来训练模型的技术。我看到了 doc2vec 和 word2vec 并构建了各自的模型,但不确定如何将它们与 tflearn 一起使用。我还通过创建 doc2vec 和 word2vec 模型对文档进行分类,并通过平均文档中模型词汇表中存在的所有单词的特征向量来获取特征向量。我可以将这个最终特征向量用于 DNN,还是有人有其他我可以使用的建议。

【问题讨论】:

    标签: machine-learning tensorflow nlp deep-learning tflearn


    【解决方案1】:

    您可以使用 TensorFlow 轻松构建文档分类模型并将其集成到 TF.Learn 库中。

    examples文件夹中甚至还有各种文档分类模型的示例:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/learn#text-classification

    对于任何长度的文档,最快的模型将是词袋模型 - 一种平均词嵌入的模型。这也是任何文档分类问题的推荐基准。然后你可以尝试更复杂的模型,比如 RNN 或 CNN。

    这是它的示例代码:

    def bag_of_words_model(features, target):
      """A bag-of-words model. Note it disregards the word order in the text."""
      target = tf.one_hot(target, 15, 1, 0)
      features = tf.contrib.layers.bow_encoder(
          features, vocab_size=n_words, embed_dim=EMBEDDING_SIZE)
      logits = tf.contrib.layers.fully_connected(features, 15, activation_fn=None)
      loss = tf.losses.softmax_cross_entropy(target, logits)
      train_op = tf.contrib.layers.optimize_loss(
          loss,
          tf.contrib.framework.get_global_step(),
          optimizer='Adam',
          learning_rate=0.01)
      return ({
        'class': tf.argmax(logits, 1),
        'prob': tf.nn.softmax(logits)
        }, loss, train_op)
    

    有关如何运行它的更多详细信息,请参阅此处 - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/text_classification.py

    您可以通过在计算 logits 之前添加 tf.contrib.layers.fully_connected 轻松扩展更多全连接层(例如 DNN 部分)。

    您还可以使用 word2vec 或其他嵌入从预训练的检查点初始化嵌入,方法是使用 tf.contrib.framework.init_from_checkpoint(see documentation)。

    【讨论】:

    • 感谢您的回复。我是深度学习和 tflearn 的新手,我正在使用这个示例 [链接]github.com/tflearn/tflearn/blob/master/examples/nlp/… 并想更改网络的第一层并使用深度网络分类器,关于如何实现这一点的任何建议? Max_document_length 是主要问题,想要某种降维不是别的
    • 您指出的模型中的第一层 - 是嵌入。分类可以在最后一层net = regression(切换。注意,tflearn 与 TensorFlow 自己的库不同。但在这种情况下,同样的事情也适用 - 要更改为 DNN,您只需添加更多 fully_connected 层。
    • 我之前确实弄清楚了,关于 softmax 和分类。我想知道的是,在将其传递给嵌入层之前,是否有办法使用 doc2vec 或 word2vec 或其他一些技术来减少特征数量
    猜你喜欢
    • 2017-05-20
    • 2013-11-07
    • 2018-10-19
    • 2020-05-29
    • 2016-09-02
    • 2019-09-13
    • 2021-03-31
    • 2017-11-08
    • 2021-06-17
    相关资源
    最近更新 更多