from konlpy.tag import Mecab
from gensim.models.keyedvectors import Word2VecKeyedVectors
from gensim.models import KeyedVectors, Word2Vec
Since trained word vectors are independent from the way they were trained (Word2Vec, FastText etc), they can be represented by a standalone structure, as implemented in this module.
출처 => 이해안됨
데이터 중복, 결측치 제거 => 한국어 토크나이저로 변환 => Counter을 사용하기 위해 잠시 변환
=> 텍스트 스트링을 사전 인덱스 스트링으로 변환
# train data를 한국어 토크나이저로 토큰화
X_train = []
for sentence in train_data['document']:
temp_X = tokenizer.morphs(sentence) # 토큰화
temp_X = [word for word in temp_X if not word in stopwords] #불용어 제거
X_train.append(temp_X)
words = np.concatenate(X_train).tolist() #2차원 배열을 1차원 list로 변환
counter = Counter(words)
counter = counter.most_common(10000-4)
vocab = ['<PAD>', '<BOS>', '<UNK>','<UNUSED>'] + [key for key, _ in counter]
word_to_index = {word:index for index, word in enumerate(vocab)}
# 텍스트 스트링을 사전 인덱스 스트링으로 변환
def wordlist_to_indexlist(wordlist):
return [word_to_index[word] if word in word_to_index else word_to_index['<UNK>'] for word in wordlist]
# 분포에 따라 최대 길이를 40으로 지정
# padding = pre로 지정
X_train = tf.keras.preprocessing.sequence.pad_sequences(X_train,
value=word_to_index["<PAD>"],
padding='pre',
maxlen=max_len)
X_test = tf.keras.preprocessing.sequence.pad_sequences(X_test,
value=word_to_index["<PAD>"],
padding='pre',
maxlen=max_len)
word2vec_path = os.getenv('HOME') + '/aiffel/sentiment_classification/ko.bin'
word2vec = Word2Vec.load(word2vec_path)
vocab_size = 10000
word_vector_dim = 200
embedding_matrix = np.random.rand(vocab_size, word_vector_dim)
# embedding_matrix에 Word2Vec 워드 벡터를 단어 하나씩마다 차례차례 카피한다.
for i in range(4,vocab_size):
if index_to_word[i] in word2vec:
embedding_matrix[i] = word2vec[index_to_word[i]]