2017-04-22 17 views
0

NLP 문제에서 keras를 사용하고 있습니다. 이전 단어에 따라 다음 단어를 예측하려고 할 때 단어 임베딩에 대한 질문이옵니다.keras가 벡터를 원더 온으로 다시 포함

word_vector = Embedding(input_dim=2000,output_dim=100)(word_one_hot) 

을 그리고 뭔가를이 word_vector를 사용하여 모델이 마지막에 또 다른 word_vector을 제공합니다 : 이미 같은 keras 매립층을 통해 단어 벡터에 한 뜨거운 단어를 설정했다. 그러나 예측 단어가 실제로 무엇인지 알아야합니다. 어떻게 word_vector를 word_one_hot으로 되돌릴 수 있습니까?

답변

1

이 질문은 오래되었지만 삽입물이 무엇이며 어떤 목적으로 제공되는지에 대한 혼란의 공통점과 관련이있는 것으로 보입니다.

첫 번째로, 이후에 퍼가려면 한 번 핫으로 변환해서는 안됩니다. 이것은 단지 낭비적인 단계 일뿐입니다.

원시 데이터로 시작하여 토큰 화해야합니다. 이것은 단순히 어휘의 각 요소 (데이터에서 가능한 모든 단어/문자 세트)에 고유 한 정수를 할당하는 프로세스입니다. Keras는 이에 대한 편리한 기능을 제공합니다.

from keras.preprocessing.sequence import pad_sequences 
from keras.preprocessing.text import Tokenizer 
max_words = 100 # just a random example, 
# it is the number of most frequently occurring words in your data set that you want to use in your model. 
tokenizer = Tokenizer(num_words=max_words) 
# This builds the word index 
tokenizer.fit_on_texts(df['column']) 

# This turns strings into lists of integer indices. 
train_sequences = tokenizer.texts_to_sequences(df['column']) 

# This is how you can recover the word index that was computed 
print(tokenizer.word_index) 

Embedding은 표현을 생성합니다. 모델의 최신 레이어는 이전 표현을 사용하여보다 추상적 인 표현을 생성합니다. 최종 표현은 가능한 클래스 수에 대한 확률 분포를 생성하는 데 사용됩니다 (분류 가정).

모델에서 예측을 수행하면 word_index의 각 정수에 대한 확률 추정값을 제공합니다. 따라서 '고양이'가 다음 단어로 가장 많이 사용되며 word_index는 {cat : 666}과 유사합니다. 모델이 666 (고양이가 아님)에 대한 가능성이 높을 것입니다. 이게 말이 돼? 모델은 임베딩 벡터를 예측하지 않으며 임베딩 벡터는 단어/문자/클래스와 관련된 정수를 예측하는 데 유용하게 사용되는 입력 데이터의 중간 표현입니다.