2017-01-25 5 views
1

Ich verwende tflearn und tensorflow, um Dokumente zu klassifizieren. Allerdings habe ich Probleme mit der Größe des Dokuments und der Trainingszeit, die Länge meines größten Dokuments beträgt ~ 98000 Wörter und die Verwendung dieses für das Gebäude wird das Netzwerk extrem zeitaufwendig sein. Ich habe verschiedene Methoden untersucht, um die Dimensionen der Daten zu reduzieren, oder eine Technik, die schnell genug ist, um das Modell zu trainieren. Ich habe doc2vec und word2vec gesehen und die entsprechenden Modelle gebaut, bin mir aber nicht sicher, wie ich sie mit tflearn verwenden soll. Ich klassifiziere die Dokumente auch, indem ich das doc2vec- und das word2vec-Modell erstelle und den Merkmalsvektor durch Mittelung der Merkmalsvektoren aller Wörter erhält, die im Modellvokabular im Dokument vorhanden sind. Kann ich diesen letzten Merkmalsvektor für DNN verwenden oder hat jemand andere Vorschläge, die ich verwenden kann.So verwenden Sie das Tflearn-Deep-Learning für die Dokumentklassifikation

Antwort

3

Sie können einfach Dokumentklassifikationsmodelle mit TensorFlow erstellen und in die TF.Learn-Bibliothek integrieren.

Es gibt auch Beispiele für die verschiedenen Dokumentklassen-Modelle in den Beispielen Ordner: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/learn#text-classification

Das schnellste Modell für jede Länge Dokument Bag of Words Modell sein wird - eine, die im Durchschnitt Einbettungen von Wörtern. Dies ist die empfohlene Basis für alle Dokumentklassifikationsprobleme. Dann können Sie kompliziertere Modelle wie RNNs oder CNNs ausprobieren.

Hier Codebeispiel dafür:

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) 

Für weitere Details, wie es laufen, finden Sie hier - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/text_classification.py

Sie leicht mehr vollständig verbundenen Schichten (zB DNN Teil) durch Zusatz erweitern können tf.contrib.layers.fully_connected vor logits werden berechnet.

Sie können auch Einbettungen von vortrainierten Prüfpunkten mit word2vec oder anderen Einbettungen mithilfe von tf.contrib.framework.init_from_checkpoint (10) initialisieren.

+0

Danke für die Antwort. Ich bin neu zu Deep Learning und Tflearn Ich habe dieses Beispiel [link] https://github.com/tflearn/tflearn/blob/master/examples/nlp/bidirectional_lstm.py verwendet und wollte die 1. Schicht des Netzwerks ändern und Verwenden Sie einen tiefen Netzwerk-Klassifikator, irgendwelche Vorschläge, wie Sie das vielleicht erreichen? Die Max_document_length ist das Hauptproblem und möchte eine Art von Dimensionsreduktion ist nichts anderes –

+0

die erste Schicht in dem Modell, auf das Sie hingewiesen haben - ist Einbettungen. Die Klassifikation kann in der letzten Schicht 'net = Regression ('. Hinweis: 'tflearn' ist anders als TensorFlow eigene Bibliotheken. Aber in diesem Fall gilt das Gleiche - Um zu DNN zu ändern, müssen Sie nur mehr' full_connected' Schichten hinzufügen – ilblackdragon

+0

Ich habe es früher herausgefunden, über Softmax und Klassifizierung.Was ich wissen möchte, ist, wenn es eine Möglichkeit gibt, die Anzahl der Features mit doc2vec oder word2vec oder einer anderen Technik zu reduzieren, bevor Sie es an die Einbettungsschicht übergeben –

Verwandte Themen