이걸 못피했네
tf.keras.preprocessing.sequence.pad_sequences(inputs,
value=word_to_index['<PAD>'],
padding='post', maxlen=5) # return sequence padded
학습시키기 전에 train data, test data 모두 반드시 처리
표준정규분포표를 활용하자
https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80%EC%A0%95%EA%B7%9C%EB%B6%84%ED%8F%AC%ED%91%9C
데이터가 표준정규분포를 따르지 않을 것이지만, 비율을 결정할 때 수치상의 도움을 줄 수 있다.
padding = 'post' or 'pre'
일반적으로 pre가 성능이 좋은 것으로 알려져있다.
가장 마지막 입력이 큰 영향을 미치는데 이 값이 의미없는 패딩값보다는 의미 있는 값으로 되어야 한다.
# vocab_size; the number of vocabulary in a dictionary
vocab_size = len(word_to_index)
# a dimension by which words represent vector shape
# in other words, we express the words into digits
word_vector_dim = 4
tf.keras.layers.Embedding(input_dim=vocab_size, output_dim=word_vector_dim, input_shape=(None, ), mask_zero=True)
# return embedding layer
비슷한 문맥에서 자주 등장하는 단어들은 비슷한 위치에 위치시키도록 함
outputs.shape
# Embedding Layer
outputs = embedding(inputs)
print(outputs.shape)
입력문장의 개수, 입력문장의 최대 길이, 임베딩 차원
https://keras.io/api/datasets/imdb/
tensorflow.keras.datasets.imdb
tf.keras.datasets.imdb.load_data(
path="imdb.npz",
num_words=None,
skip_top=0,
maxlen=None,
seed=113,
start_char=1,
oov_char=2,
index_from=3,
**kwargs
)
return (x_train, y_train), (x_test, y_test)
return a dictionary mapping words to index
word vector를 임베딩했을 때 특정 단어와 유사한 의미를 가진(= 차원 상 가깝게 존재하는) 단어를 표시한다.
참고 : https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.KeyedVectors
# Define word2vec_file_path
f = open(word2vec_file_path, 'w')
# Delete '<PAD>', '<SOS>', ...
vocab_size -= proper number
f.write('{} {}\n'.format(vocab_size, word_vector_dim))
vectors = model.get_weights()[0]
for i in range(4,vocab_size):
f.write('{} {}\n'.format(index_to_word[i], ' '.join(map(str, list(vectors[i, :])))))
f.close()
from gensim.models.keyedvectors import Word2VecKeyedVectors
word_vectors = Word2VecKeyedVectors.load_word2vec_format(word2vec_file_path, binary=False)