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