2017-01-25 3 views
1

J'utilise tflearn et tensorflow pour classer des documents. Cependant, je suis confronté à la taille du document et le temps de formation, la longueur de mon plus grand document est ~ 98000 mots et en utilisant cela pour le bâtiment, le réseau va prendre beaucoup de temps. Je regardais différentes méthodes pour réduire les dimensions des données ou une technique qui serait assez rapide pour entraîner le modèle. J'ai vu doc2vec et word2vec et construit les modèles respectifs, mais je ne suis pas sûr de la façon de les utiliser avec tflearn. Je classifie également les documents en créant un modèle doc2vec et word2vec et en obtenant le vecteur de caractéristiques en faisant la moyenne des vecteurs caractéristiques de tous les mots qui existent dans le vocabulaire du modèle dans le document. Puis-je utiliser ce dernier vecteur de fonctionnalité pour DNN ou quelqu'un a-t-il d'autres suggestions que je peux utiliser.Comment utiliser l'apprentissage en profondeur tflearn pour la classification de documents

Répondre

3

Vous pouvez facilement créer des modèles de classification de documents avec TensorFlow et les intégrer dans la bibliothèque TF.Learn.

Il y a même des exemples des différentes classifications de documents modèles dans le dossier des exemples: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/learn#text-classification

Le modèle le plus rapide pour tout document de longueur sera de modèle Sac mots - qui en moyenne incorporations de mots. Cette référence est recommandée pour tous les problèmes de classification de documents. Ensuite, vous pouvez essayer des modèles plus compliqués comme les RNN ou les CNN.

Voici un exemple de code pour elle:

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) 

Pour plus de détails comment l'exécuter, voir ici - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/text_classification.py

Vous pouvez facilement étendre les couches plus complètement connecté (par exemple partie DNN) en ajoutant tf.contrib.layers.fully_connected avant logits sont calculées.

Vous pouvez également initialiser des incorporations à partir d'un point de contrôle pré-formé avec word2vec ou d'autres incorporations en utilisant tf.contrib.framework.init_from_checkpoint (see documentation).

+0

Merci pour la réponse. Je suis nouveau à l'apprentissage en profondeur et tflearn j'utilisais cet exemple [link] https://github.com/tflearn/tflearn/blob/master/examples/nlp/bidirectional_lstm.py et je voulais changer la première couche du réseau et utiliser un classificateur de réseau profond, des suggestions sur la façon d'y parvenir peut-être? Le Max_document_length est le problème principal et vous voulez une sorte de réduction dimensionnelle n'est rien d'autre –

+0

la première couche dans le modèle que vous avez pointé - est des plongements. la classification peut être commutée dans la dernière couche 'net = régression ('.) Notez que 'tflearn' est différent des bibliothèques propres à TensorFlow, mais dans ce cas la même chose s'applique - pour changer en DNN, il suffit d'ajouter plus de couches' fully_connected' – ilblackdragon

+0

Je l'ai compris plus tôt, à propos du softmax et de la classification, ce que je veux savoir, c'est s'il existe un moyen de réduire le nombre de fonctionnalités avec doc2vec ou word2vec ou une autre technique avant de le passer à la couche d'intégration –