2017-02-15 7 views
2

나는 this blog postKeras - 입력 및 출력용으로 학습 된 Embedding() 레이어를 사용하는 방법?

이 모델은 사용에 유사한 텍스트를 생성하는 모델을 훈련하고 싶은 - 지금까지 내가 그것을 이해 - 다음과 같은 구조를
[워드 지수의 순서] -> [임베딩] -> [ LSTM] -> [1 핫 인 코드 된 "다음 단어"]

기본적으로 저자는 프로세스를 분류 문제로 모델링합니다. 여기서 출력 레이어는 코퍼스의 단어만큼 많은 차원을 갖습니다.


내가 예측과 실제 삽입 사이의 거리를 최소화 한 후 배운 묻어을 다시 사용하여 회귀 문제로 프로세스를 모델링하고 싶은

. 기본적으로

:

[워드 지수의 순서] -> [임베딩] -> [LSTM] -> 모델로

내 문제는 [ "다음 단어"의 매립 벡터, 즉석에서 embedding을 배우는 방법, 입력을 단어 색인처럼 입력 한 다음 모델에 "출력을 사용하기 전에 포함 벡터로 바꿉니다"라고 말한 것과 같은 방법으로 출력을 공급할 수 있습니까?


교육 단계에서

+0

이 작업을 수행 했습니까? 그렇다면 코드/블로그 (또는 자체 응답)에 대한 링크 - 정확하게 표시된 대답은 당신이하고 싶은 회귀 접근법이 아니라 분류 접근법만을 보여줍니다. –

답변

1

:-) 모든 도움을 주셔서 대단히 감사합니다

당신은 두 개의 입력 (목표를위한 하나의 입력을위한 하나를 사용할 수 있습니다, 1의 존재의 오프셋 이 두 시퀀스 사이에서) 삽입 레이어를 재사용합니다. 문장을 [1, 2, 3, 4]로 입력하면 in = [1, 2, 3], out = [2, 3, 4]의 두 시퀀스를 생성 할 수 있습니다. 그런 다음 Keras 함수 API를 사용하여 삽입 레이어를 다시 사용할 수 있습니다.

emb1 = Embedding(in) 
emb2 = Embedding(out) 
predict_emb = LSTM(emb1) 
loss = mean_squared_error(emb2, predict_emb) 

사실 Keras 코드가 아닌 의사 코드입니다. 테스트 단계에서

:

일반적으로, 당신은 당신의 자신의 디코드 함수를 작성해야합니다. 첫째, 당신은 한 단어 (또는 몇 단어)를 선택합니다. 그런 다음이 단어 (또는 짧은 단어 시퀀스)를 네트워크에 공급하여 다음 단어의 삽입을 예측합니다. 이 단계에서 자신의 샘플 함수를 정의 할 수 있습니다. 예를 들어 다음 단어와 같이 예상되는 단어에 가장 가까운 단어를 선택하거나 다음 단어를 다음 단어로 샘플링 할 수 있습니다. 예측 된 임베딩에보다 가까운 임베딩은 선택 될 확률이 더 크다. 다음 단어를 선택하고 네트워크로 보내고 다음 단어를 예측하십시오.

따라서 전체 시퀀스를 네트워크에 입력하는 대신 한 번에 하나의 단어 (다른 방식으로 삽입)를 생성해야합니다. 위의 문장이 당신을 위해 너무 추상적 경우

, 여기에 좋은 예이다 : https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

라인 (85)은 무작위로 작업 할 코퍼스에서 텍스트의 작은 조각을 선택 도입 부분이다. 90 번째 줄에는 루프가 있습니다. 각 단계에서 문자를 샘플링합니다 (이것은 char-rnn이므로 각 timestep은 char을 입력합니다.귀하의 경우에는 단어가 아닌 숯이어야합니다.) L95는 다음 char의 분포 L96 샘플을 예측합니다. 희망이 충분히 명확하다.

+0

대단히 고마워요, 훈련에 의미가 있습니다! 하지만 런타임에 무엇을해야합니까? 내가 '밖으로'예측하고 그것을 네트워크에 공급하고 싶지 않을 때? –

+0

답변을 업데이트했습니다. 희망이 도움이됩니다. – soloice

+0

예, 감사합니다! –

관련 문제