Comment former la couche LSTM de réseau profond

13

J'utilise un réseau lstm et feed-forward pour classer le texte.

Je convertis le texte en vecteurs uniques et les insère dans le lstm afin de pouvoir le résumer en une seule représentation. Ensuite, je le nourris à l'autre réseau.

Mais comment former le lstm? Je veux juste classer le texte en séquence - dois-je le nourrir sans formation? Je veux juste représenter le passage comme un élément unique que je peux alimenter dans la couche d'entrée du classificateur.

J'apprécierais grandement tout conseil avec cela!

Mise à jour:

J'ai donc un lstm et un classificateur. Je prends toutes les sorties du lstm et les mets en commun, puis j'introduis cette moyenne dans le classificateur.

Mon problème est que je ne sais pas comment former le lstm ou le classificateur. Je sais quelle devrait être l'entrée pour le lstm et quelle devrait être la sortie du classificateur pour cette entrée. Puisqu'il s'agit de deux réseaux distincts qui viennent d'être activés séquentiellement, j'ai besoin de savoir et de ne pas savoir quelle sortie idéale devrait être pour le lstm, qui serait également l'entrée pour le classificateur. Y a-t-il un moyen de faire cela?

wordSmith
la source

Réponses:

9

Le meilleur endroit pour commencer avec les LSTM est le blog d'A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Si vous utilisez Torch7 (ce que je suggère fortement), le code source est disponible sur github https://github.com/karpathy/char-rnn .

J'essaierais également de modifier un peu votre modèle. J'utiliserais une approche plusieurs-à-un pour que vous saisissiez des mots dans une table de recherche et ajoutiez un mot spécial à la fin de chaque séquence, de sorte que seulement lorsque vous saisirez le signe "fin de la séquence", vous lirez la classification sortie et calculer l'erreur en fonction de votre critère de formation. De cette façon, vous vous entraîneriez directement dans un contexte supervisé.

D'un autre côté, une approche plus simple consisterait à utiliser paragraph2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) pour extraire les fonctionnalités de votre texte d'entrée, puis exécuter un classificateur au-dessus de vos fonctionnalités. L'extraction des entités vectorielles de paragraphe est très simple et en python ce serait:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break
Yannis Assael
la source
Merci d'avoir répondu. Je vais les considérer. Avez-vous des conseils sur le problème spécifique de ma question - je l'ai mis à jour.
wordSmith
Je ne pense pas que votre procédure décrite produirait des résultats. Comment allez-vous vous entraîner contre le LSTM? Je ne suis pas sûr de comprendre pourquoi utiliser un LSTM dans ce cas pour l'apprentissage de fonctionnalités non supervisées pour une phrase entière. Avez-vous une documentation pertinente sur votre approche avec laquelle je pourrais vous aider? Cela pourrait également vous intéresser arxiv.org/abs/1306.3584 .
Yannis Assael
Je vais former le lstm sur la base d'un ensemble de données de passages de texte passés et de leurs classes. Je n'ai pas l'intention d'utiliser un apprentissage non supervisé. Je veux l'entraîner manuellement, mais je ne sais pas comment. Voici mon implémentation du lstm et du classificateur sans la bibliothèque d'apprentissage automatique, que je connais fonctionne: pastebin.com/63Cqrnef le lstm a une fonction de deepActivate qui active le lstm puis le classificateur comme je l'ai mentionné dans ma demande. Voici quelque chose comme ce que j'essaie de mettre en œuvre: deeplearning.net/tutorial/lstm.html
wordSmith
mais quand j'ai essayé de les activer tous les deux comme un seul réseau, je n'ai pas été défini à partir de chacune des couches de sortie. Plus d'informations à ce sujet ici: stats.stackexchange.com/q/159922/81435
wordSmith
1
Merci beaucoup! Vous avez fourni beaucoup plus d'aide que nécessaire. Merci d'être allé au-delà.
wordSmith