딥 네트워크의 LSTM 계층을 훈련시키는 방법


13

텍스트를 분류하기 위해 lstm 및 피드 포워드 네트워크를 사용하고 있습니다.

텍스트를 one-hot 벡터로 변환하고 각각을 lstm에 공급하여 단일 표현으로 요약 할 수 있습니다. 그런 다음 다른 네트워크에 공급합니다.

그러나 lstm을 어떻게 훈련합니까? 텍스트를 순서대로 분류하고 싶습니다. 훈련없이 텍스트를 제공해야합니까? 나는 구절을 분류기의 입력 레이어에 공급할 수있는 단일 항목으로 표현하고 싶습니다.

나는 이것에 대한 조언을 크게 감사하겠습니다!

최신 정보:

그래서 lstm과 분류 기가 있습니다. 나는 lstm의 모든 출력을 가져 와서 평균 풀링 한 다음 그 평균을 분류기로 보냅니다.

내 문제는 lstm 또는 분류기를 훈련시키는 방법을 모른다는 것입니다. lstm에 대한 입력 내용과 해당 입력에 대한 분류기의 출력 내용을 알고 있습니다. 그것들은 순차적으로 활성화되는 두 개의 별도 네트워크이기 때문에 lstm에 대한 이상적인 출력이 무엇인지 알아야하며, 분류기에 대한 입력이기도합니다. 이 방법이 있습니까?

답변:


10

LSTM으로 시작하기에 가장 좋은 곳은 A. Karpathy의 블로그 게시물 http://karpathy.github.io/2015/05/21/rnn-effectiveness/ 입니다. Torch7을 사용하는 경우 (강력하게 제안 할 것입니다) 소스 코드는 github https://github.com/karpathy/char-rnn 에서 사용할 수 있습니다 .

또한 모델을 약간 변경하려고합니다. 룩업 테이블을 통해 단어를 입력하고 각 시퀀스의 끝에 특수 단어를 추가 할 수 있도록 다 대일 접근 방식을 사용하므로 "시퀀스의 끝"기호를 입력 할 때만 분류를 읽을 수 있습니다. 훈련 기준에 따라 오류를 출력하고 계산합니다. 이렇게하면 감독되는 상황에서 직접 훈련 할 수 있습니다.

반면에보다 간단한 방법은 단락 2vec ( https://radimrehurek.com/gensim/models/doc2vec.html )를 사용하여 입력 텍스트의 기능을 추출한 다음 기능 위에 분류기를 실행하는 것입니다. 단락 벡터 기능 추출은 매우 간단하며 파이썬에서는 다음과 같습니다.

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

답장을 보내 주셔서 감사합니다. 나는 그것들을 고려할 것이다. 내 질문의 특정 문제에 대한 조언이 있습니까? 업데이트했습니다.
wordSmith

설명 된 절차로 인해 결과가 생성 될 것이라고 생각하지 않습니다. LSTM에 대해 무엇을 훈련 할 것입니까? 이 경우 전체 문장에 대해 감독되지 않은 기능 학습에 LSTM을 사용하는 이유를 잘 모르겠습니다. 내가 도울 수있는 접근 방식에 대한 관련 문헌이 있습니까? arxiv.org/abs/1306.3584 뿐만 아니라 관심의 대상이 될 수 있습니다 .
Yannis Assael

나는 과거의 텍스트 구절과 그 클래스의 데이터 세트를 기반으로 lstm을 훈련시킬 것입니다. 감독되지 않은 학습을 사용하고 싶지 않습니다. 수동으로 훈련하고 싶지만 방법을 모르겠습니다. 여기가 작동하는 기계 학습 라이브러리없이 lstm 및 분류, 내 구현은 다음과 같습니다 pastebin.com/63Cqrnef lstm는 내 후 질문에서 언급 lstm 다음 분류를 활성화 deepActivate하는 기능을 갖는다. 여기에 내가 구현하려고하는 것과 같은 것이 있습니다 : deeplearning.net/tutorial/lstm.html
wordSmith

그러나 두 네트워크를 모두 하나의 네트워크로 활성화하려고 할 때 각 출력 레이어에서 정의되지 않았습니다. 더 많은 것을에이 여기에 있습니다 : stats.stackexchange.com/q/159922/81435
단어의 달인

1
대단히 감사합니다! 필요한 것보다 훨씬 많은 도움을 제공했습니다. 계속해서 감사합니다.
wordSmith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.