如何使用tflearn深度学习进行文档分类

时间:2017-01-25 20:15:22

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

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

1 个答案:

答案 0 :(得分:3)

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

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

任何长度文档的最快模型都是Bag of Words模型 - 一个平均嵌入单词的模型。这也是任何文档分类问题的推荐基线。然后你可以尝试更复杂的模型,如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之前添加logits,您可以轻松扩展更多完全连接的图层(例如DNN部分)。

您还可以使用tf.contrib.framework.init_from_checkpointsee documentation)使用word2vec或其他嵌入功能从预先训练的检查点初始化嵌入。