Como treinar camada LSTM de rede profunda

13

Estou usando uma rede lstm e feed-forward para classificar o texto.

Converto o texto em vetores muito quentes e alimento cada um no lstm para que eu possa resumir como uma única representação. Então eu o alimento para a outra rede.

Mas como eu treino o lstm? Eu só quero classificar o texto em sequência - devo alimentá-lo sem treinamento? Eu só quero representar a passagem como um único item que eu possa alimentar na camada de entrada do classificador.

Eu gostaria muito de receber algum conselho com isso!

Atualizar:

Então, eu tenho um lstm e um classificador. Eu pego todas as saídas do lstm e as agrupo com média, depois alimento essa média no classificador.

Meu problema é que não sei como treinar o lstm ou o classificador. Eu sei qual deve ser a entrada para o lstm e qual deve ser a saída do classificador para essa entrada. Como são duas redes separadas que estão sendo ativadas seqüencialmente, preciso saber e não saber qual deve ser a saída ideal para o lstm, que também seria a entrada para o classificador. Existe uma maneira de fazer isso?

escritor
fonte

Respostas:

9

O melhor lugar para começar com LSTMs é a postagem no blog de A. Karpathy http://karpathy.github.io/2015/05/05/21/rnn-effectiveness/ . Se você estiver usando o Torch7 (o que eu sugeriria fortemente), o código fonte está disponível no github https://github.com/karpathy/char-rnn .

Eu também tentaria alterar um pouco o seu modelo. Eu usaria uma abordagem muitos-para-um para que você insira palavras através de uma tabela de pesquisa e adicione uma palavra especial no final de cada sequência, para que somente quando você inserir o sinal "final da sequência" você lerá a classificação saída e calcule o erro com base no seu critério de treinamento. Dessa forma, você treinaria diretamente em um contexto supervisionado.

Por outro lado, uma abordagem mais simples seria usar o parágrafo 2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) para extrair recursos para o texto de entrada e, em seguida, executar um classificador sobre seus recursos. A extração do recurso de vetor de parágrafo é muito simples e em python seria:

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
fonte
Obrigado por responder. Vou considerar isso. Você tem algum conselho sobre o problema específico da minha pergunta? Eu o atualizei.
wordSmith 5/07
Eu não acho que o procedimento descrito possa produzir resultados. Em que você treinará contra o LSTM? Não sei se entendi por que usaria um LSTM nesse caso para o aprendizado de recursos não supervisionados de uma frase inteira. Você tem alguma literatura relevante sobre sua abordagem com a qual eu poderia ajudá-lo? Isso também pode ser do seu interesse arxiv.org/abs/1306.3584 .
Yannis Assael
Vou treinar o lstm com base em um conjunto de dados de passagens anteriores do texto e de suas classes. Não pretendo usar aprendizado não supervisionado. Quero treiná-lo manualmente, mas não sei como. Aqui está minha implementação do lstm e do classificador sem a biblioteca de aprendizado de máquina, que eu sei que funciona: pastebin.com/63Cqrnef o lstm tem uma função de deepActivate que ativa o lstm e o classificador como mencionei no meu questionário. Há algo aqui como o que eu estou tentando implementar: deeplearning.net/tutorial/lstm.html
WordSmith
mas quando tentei ativá-los como uma rede, fiquei indefinido de cada uma das camadas de saída. Veja mais sobre isso aqui: stats.stackexchange.com/q/159922/81435
wordSmith
1
Muito obrigado! Você forneceu muito mais ajuda do que o necessário. Obrigado por ir acima e além.
wordSmith