2017-01-25 15 views
1

Я использую tflearn и tensorflow для классификации документов. Однако я столкнулся с проблемой размера документа и времени обучения, длина моего самого большого документа составляет ~ 98000 слов, и использование этого для построения сети будет чрезвычайно трудоемким. Я рассматривал различные методы, чтобы уменьшить размеры данных или некоторую технику, которая будет достаточно быстрой для обучения модели. Я видел doc2vec и word2vec и построил соответствующие модели, но не уверен, как их использовать с tflearn. Я также классифицирую документы, создавая модель doc2vec и word2vec и получая вектор признаков, усредняя векторы признаков всех слов, которые существуют в словаре моделей в документе. Могу ли я использовать этот последний вектор функций для DNN или у кого-то есть другие предложения, которые я могу использовать.Как использовать глубокое обучение tflearn для классификации документов

ответ

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

Вы можете легко расширить более полно связные слои (например, DNN часть), добавив tf.contrib.layers.fully_connected до logits.

Вы также можете инициализировать вложения с предварительно подготовленной контрольной точки с помощью word2vec или других вложений, используя tf.contrib.framework.init_from_checkpoint (see documentation).

+0

Спасибо за ответ. Я новичок в глубоком обучении и tflearn. Я использовал этот пример [link] https://github.com/tflearn/tflearn/blob/master/examples/nlp/bidirectional_lstm.py и хотел изменить 1-й уровень сети и использовать глубокий классификатор сети, любые предложения о том, как этого достичь? Max_document_length является основной проблемой и хочет, чтобы какое-то уменьшение размеров было ничем иным: –

+0

первый слой в указанной вами модели - это вложения. классификация может быть переключена в последнем слое 'net = регрессия ('. Примечание, 'tflearn' отличается от собственных библиотек TensorFlow, но в этом случае применяется то же самое - для изменения DNN вам просто нужно добавить еще« полностью »связанные слои – ilblackdragon

+0

Я раньше выяснял, о softmax и классификации. Я хочу знать, есть ли способ уменьшить количество функций с помощью doc2vec или word2vec или какой-либо другой техники, прежде чем передавать ее на уровень внедрения –