1

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

4

1 回答 1

3

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

在示例文件夹中甚至还有各种文档分类模型的示例: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

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

您还可以使用 word2vec 或其他嵌入从预训练的检查点初始化嵌入tf.contrib.framework.init_from_checkpoint请参阅文档)。

于 2017-01-25T22:08:26.297 回答