Я использую tflearn и tensorflow для классификации документов. Однако я столкнулся с проблемой размера документа и времени обучения, длина моего самого большого документа составляет ~ 98000 слов, и использование этого для построения сети будет чрезвычайно трудоемким. Я рассматривал различные методы, чтобы уменьшить размеры данных или некоторую технику, которая будет достаточно быстрой для обучения модели. Я видел doc2vec и word2vec и построил соответствующие модели, но не уверен, как их использовать с tflearn. Я также классифицирую документы, создавая модель doc2vec и word2vec и получая вектор признаков, усредняя векторы признаков всех слов, которые существуют в словаре моделей в документе. Могу ли я использовать этот последний вектор функций для DNN или у кого-то есть другие предложения, которые я могу использовать.Как использовать глубокое обучение tflearn для классификации документов
ответ
Вы можете легко создавать модели классификации документов с помощью 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).
Спасибо за ответ. Я новичок в глубоком обучении и tflearn. Я использовал этот пример [link] https://github.com/tflearn/tflearn/blob/master/examples/nlp/bidirectional_lstm.py и хотел изменить 1-й уровень сети и использовать глубокий классификатор сети, любые предложения о том, как этого достичь? Max_document_length является основной проблемой и хочет, чтобы какое-то уменьшение размеров было ничем иным: –
первый слой в указанной вами модели - это вложения. классификация может быть переключена в последнем слое 'net = регрессия ('. Примечание, 'tflearn' отличается от собственных библиотек TensorFlow, но в этом случае применяется то же самое - для изменения DNN вам просто нужно добавить еще« полностью »связанные слои – ilblackdragon
Я раньше выяснял, о softmax и классификации. Я хочу знать, есть ли способ уменьшить количество функций с помощью doc2vec или word2vec или какой-либо другой техники, прежде чем передавать ее на уровень внедрения –